java - 程序在调用时未绘制 GUI

标签 java swing user-interface paint

我是一名高中生,正在尝试自学 GUI 基础知识。我试图编写的程序将从用户那里获取两个数字,然后将这两个数字绘制在图表中。如果用户愿意,还可以输入更多积分。我遇到的问题是,当我按下打开 GUI(应该是图形)的按钮时,GUI 出现,但它是空白的。我认为绘制方法以及设置和调用的方式存在问题,但我不确定。预先感谢您的任何建议或帮助。

这是创建图形 GUI 的类:

package dataGraph;
import javax.swing.*;
import java.awt.*;
import javax.swing.JFrame;

import java.awt.Graphics;
import java.awt.Graphics2D;

public class graphGUI extends JFrame {
//public Graphics2D g2;
public graphGUI() {
    setTitle("Data Graph");
    setSize(500, 500);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setResizable(false);
    setVisible(true);
}

public void paint(Graphics g) {
    super.paintComponents(g);
    g.drawLine(40, 425, 450, 425);
    g.drawLine(40, 425, 40, 70);
    g.drawString("Graph", 20, 20);
    // g2.draw
    g.drawLine(50, 50, 50, 50);
     for(int i = 0; i < dataEntryGUI.x.size(); i++){
     g.drawOval(Integer.parseInt(dataEntryGUI.x.get(i)),
     Integer.parseInt(dataEntryGUI.y.get(i)),5,5);
     }
}

}

这个类创建用于数据输入的 GUI,并具有允许用户添加更多“点”然后用“图形”表示它们的操作监听器:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JFrame;

public class dataEntryGUI extends JFrame implements ActionListener {

public static ArrayList<String> x;
public static ArrayList<String> y;

private Button btnAdd;
private Button btnGraph;
private Label lbl;
private Label lbl2;
private TextField xInt;
private TextField yInt;

public dataEntryGUI() {
    setTitle("Data entry");
    setSize(250, 250);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setResizable(false);
    lbl = new Label("x");

    lbl2 = new Label("y");

    // text fields
    xInt = new TextField();

    yInt = new TextField();
    x = new ArrayList<String>();
    y = new ArrayList<String>();

    // add button
    btnAdd = new Button("Add another");
    // btnAdd.setPreferredSize(new Dimension(70,30));
    btnAdd.addActionListener(this);
    btnGraph = new Button("Make Graph");
    btnGraph.addActionListener(this);
    add(lbl);
    add(xInt);
    add(lbl2);
    add(yInt);
    add(btnAdd);
    add(btnGraph);
    setLayout(new FlowLayout());
    setVisible(true);
}

public void actionPerformed(ActionEvent e) {

    // System.out.println("boogers");

    if (e.getSource() == btnAdd) {
        //xInt.getText();

        x.add(xInt.getText());
        y.add(yInt.getText());
        xInt.setText("");
        yInt.setText("");

    } else {
        graphGUI graph = new graphGUI();
        graph.repaint();
    }
}

}

这是主要方法:

package dataGraph;
public class dataGraphMain {

public static void main(String[] args) {
    dataEntryGUI gui = new dataEntryGUI();
    //graphGUI gui2 = new graphGUI();

}

}

最佳答案

public void paint(Graphics g) {
    super.paintComponents(g);

一般来说,每当您重写一个方法时,您都应该在您要重写的方法名称上调用“super”,而不是其他方法。在这种情况下,您将调用:

super.paint(g);

但是,对于自定义绘制,您不应重写 JFrame 的 Paint() 方法。

相反,您应该重写 JPanel 的 paintComponent(...) 方法,然后将面板添加到框架中。阅读 Swing 教程中关于 Custom Painting 的部分了解更多信息和示例。

I am a high school student trying to teach myself GUI basics.

保留 Swing 教程目录的链接,以供将来引用,因为该教程涵盖了基础知识和更多内容。

关于java - 程序在调用时未绘制 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28642245/

相关文章:

java - 使除 1 个元素外的所有元素向 FlowLayout 左侧 float

linux - 命令行 GUI 是如何制作的?

java - 发生 Ant BuildException : HTTP Authorization failure

java - 如何在图像(背景)上放置 JButton?

Java Swing - 具有 3 种状态的 JCheckbox(完全选中、部分选中和取消选中)

java - 从另一个类访问 JTextfield 中的值

android - 以百分比(或类似百分比)动态调整 View 大小?

java - 用句点(.)分割的字符串表现出不同的行为

java - Java 中的线程和观察者模式

java - OIM 11gR2 PS3 保存创建用户请求的理由