User interface 图形用户界面。将paintComponent与从JPanel派生的类一起使用。

User interface 图形用户界面。将paintComponent与从JPanel派生的类一起使用。,user-interface,graphics,paintcomponent,User Interface,Graphics,Paintcomponent,我试图绘制一个简单的gui,用户在其中添加数据,然后按下按钮,它在窗口中绘制形状。我在更大的项目上失败了,所以我重新开始。我只是想创建一个简单的窗口,在菜单栏上有一个“绘图”按钮。当您按下按钮时,一个图形(我已经硬编码到一个从实现图形类的JPanel派生的类中)应该出现在同一个窗口中 这是我的,但它不起作用。有人能看看我做错了什么吗。令人沮丧的是,当我只是创建形状并将其添加到构造器中的布局时,它工作得很好,但当我尝试使用按钮执行操作时,它失败了 谢谢 公共类ShapeGUITest扩展了JFra

我试图绘制一个简单的gui,用户在其中添加数据,然后按下按钮,它在窗口中绘制形状。我在更大的项目上失败了,所以我重新开始。我只是想创建一个简单的窗口,在菜单栏上有一个“绘图”按钮。当您按下按钮时,一个图形(我已经硬编码到一个从实现图形类的JPanel派生的类中)应该出现在同一个窗口中

这是我的,但它不起作用。有人能看看我做错了什么吗。令人沮丧的是,当我只是创建形状并将其添加到构造器中的布局时,它工作得很好,但当我尝试使用按钮执行操作时,它失败了

谢谢

公共类ShapeGUITest扩展了JFrame{

public static final int WINDOW_WIDTH = 500;
public static final int WINDOW_HEIGHT = 500;
public static final int X = 100;
public static final int Y = 75;
public static final int SHAPE_BASE = 200;
public static final int SHAPE_HEIGHT = 250;
JPanel buttonPanel;
JComponent shapeArea;

public ShapeGUITest() {

    super("Draw Shapes Dammit!");
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    shapeArea = new Jpanel();
    add(shapeArea, BorderLayout.CENTER);

    JButton drawButton = new JButton("Draw");
    drawButton.addActionListener(new DrawButtonListener());

    JMenuBar bar = new JMenuBar();
    bar.add(drawButton);
    setJMenuBar(bar);

}

/*public void drawShapePanel() {
    shapeArea = new ShapePanel();
    add(shapeArea, BorderLayout.CENTER);
}*/

private class DrawButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
    //drawShapePanel();

    //shapeArea = new ShapePanel();
    //add(shapeArea, BorderLayout.CENTER);
    ShapePanel s = new ShapePanel();
    //s.setVisible(true);
    //shapeArea.removeAll();
    shapeArea.add(s);
    shapeArea.revalidate();
    validate();
    //ShapeFrame s = new ShapeFrame();

}
}

private class ShapeFrame extends JFrame {

    public ShapeFrame() {
        super("the shape is here");
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void paint(Graphics g) {
        super.paint(g);
        setBackground(Color.WHITE);
        g.setColor(Color.YELLOW);
        g.fillRect(X, Y, SHAPE_BASE, SHAPE_HEIGHT);
        g.setColor(Color.GREEN);
        g.drawRect(X, Y, SHAPE_BASE, SHAPE_HEIGHT);
    }
}

private class ShapePanel extends JPanel {

    public ShapePanel() {
        super();
        setVisible(true);
        setLayout(new FlowLayout());
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        setBackground(Color.WHITE);
        g.setColor(Color.YELLOW);
        g.fillRect(X, Y, SHAPE_BASE, SHAPE_HEIGHT);
        g.setColor(Color.GREEN);
        g.drawRect(X, Y, SHAPE_BASE, SHAPE_HEIGHT);
    }
}

public static void main(String[] args) {
    ShapeGUITest gui = new ShapeGUITest();
    gui.setVisible(true);
}
}