0

我试图让用户选择他们想要在我的 GUI 上绘制的形状。我有一系列按钮:圆形、方形和矩形。我的 actionListener 在向我的控制台打印一个字符串时工作,但它不会在我的 GUI 上显示形状。如何使用actionCommand在我的面板上绘制该形状。

public void paintComponent(Graphics g) {
    g2D = (Graphics2D) g;
    //Rectangle2D rect = new Rectangle2D.Double(x, y, x2-x, y2-y);
    //g2D.draw(rect);
      repaint();
}

public void actionPerformed(ActionEvent arg0) { 
    if(arg0.getActionCommand().equals("Rect")){     
        System.out.println("hello");
        Rectangle2D rect = new Rectangle2D.Double(x, y, x2-x, y2-y);
        g2D.draw(rect); //can only be accessed within paintComponent method
        repaint();
    }
4

2 回答 2

3

如果您首先绘制矩形然后要求重新绘制矩形将消失。

您应该将新形状存储在一个临时变量中并在paintComponent 中渲染它。

private Rectangle2D temp;

// inside the actionPerformed
    temp = new Rectangle2D.Double(x, y, x2-x, y2-y);
    repaint();

// inside the paintComponent
    if(temp != null) {
        g2D.draw(temp);
    }
于 2013-01-23T00:04:08.077 回答
2

使矩形成为局部变量的字段。在 actionPerformed 中创建正确的矩形并调用 repaint()。然后将调用paintComponent()。应该是这样的

public void paintComponent(Graphics g) {
    g2D = (Graphics2D) g;
    g2D.draw(rect);
}
于 2013-01-23T06:54:25.790 回答