如何从按钮点击事件中在JPanel中绘制矩形

时间:2015-11-13 17:48:53

标签: java graphics jpanel graphics2d

我对Java Graphics比较陌生。我想在用户单击JButton时在JPanel中的(X,Y)坐标处绘制20 x 80矩形。 (其中'X'和'Y'来自2个JTextFields。)

我已经阅读了很多问题和教程,但无法解决问题。在某些情况下,我可以绘制矩形但不能在不清空JPanel的情况下绘制新的矩形。

enter image description here

这是我的代码:

public class CustomPanel extends JPanel {
      @Override
      public void paintComponent(Graphics g) {
        super.paintComponent(g); // first draw a clear/empty panel
        g.draw3DRect(Integer.parseInt(x.getText()),Integer.parseInt(y.getText()), 20, 80, true);
        // then draw using your custom logic.
      }
    }

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
   //Code for frame 
   //Code for JTextfields x and y   

    JButton btnDraw = new JButton("Draw");
    btnDraw.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
                panel= new CustomPanel();


                panel.setBounds(406, 59, 407, 297);
                frame.getContentPane().add(panel);
                frame.revalidate();
        }
    });
    btnDraw.setBounds(286, 339, 89, 23);
    frame.getContentPane().add(btnDraw);



}

1 个答案:

答案 0 :(得分:1)

你的ActionListener代码是错误的。您不想创建新面板,您想要将Rectangle添加到现有面板。

创建GUI时,您应该向GUI添加两个面板:

  1. 第一个面板将是一个空面板,可以进行自定义绘画。您通常会将其添加到框架的中心
  2. 第二个面板将包含" Draw"按钮。您通常会将此面板添加到PAGE_END。然后,当您单击“绘制”按钮时,在自定义绘画面板中调用addRectangle(...)之类的方法,以便面板可以绘制矩形。
  3. 查看Custom Painting Approaches了解自定义绘画的两种常用方法:

    1. 保持要绘制的对象列表,然后在paintComponent()方法中迭代LIst绘制每个对象。
    2. 创建一个BufferedImage,然后将Rectangle绘制到BufferedImage上,然后您可以在JLabel或paintComponent()方法中绘制BufferedImage。