矩形没有显示出来

时间:2014-07-14 19:55:20

标签: java swing paintcomponent

按下按钮没有任何反应,我做错了什么?我希望按下按钮时绘制矩形。代码有什么问题??

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;

    class rectangle{
    public static void main(String args[]){
        EventQueue.invokeLater(new Runnable(){
            public void run(){
                final JFrame frame=new JFrame("RECTANGLE");
                final JPanel panel=new JPanel();
                JButton button=new JButton("DRAW");
                panel.add(button);
                frame.add(panel);
                frame.setSize(400,400);
                frame.setVisible(true);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                button.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent event){
                        panel.add(new drawrectangle());
                    }
                });
            }
        });
    }
}

class drawrectangle extends JComponent{
    public void paintComponent(Graphics g){
        Graphics2D g2=(Graphics2D) g;
        g2.setPaint(Color.PINK);
        Rectangle2D rect=new Rectangle2D.Double(50,50,200,200);
        g2.draw(rect);
        g2.fill(rect);
    }
}

4 个答案:

答案 0 :(得分:1)

您需要在repaint()上致电JFrame

 button.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent event){
              drawrectangle rec= new drawrectangle();
              panel.add(rec);
              rec.paintComponent();
              frame.repaint();
      }
 });

答案 1 :(得分:0)

简单地写一下:

frame.validate();
frame.repaint();

答案 2 :(得分:0)

您的组件没有大小。您需要覆盖getPreferredSize()并返回矩形的大小,否则您需要通过调用setSize()在其构造函数中设置其大小。你的矩形没有出现的原因是它在它的区域之外绘制,而Java 2D图形正在剪切你在组件外部绘制的部分(即所有这些)。

这不是您需要调用repaint()validate()的情况,因为当您将矩形添加到面板时,它会自动重新出现并标记为需要重新绘制。

但是,请注意每次事件触发时都要添加一个新矩形。那是你要的吗?此外,rectangledrawrectangle应以大写字母开头,以符合正常的Java命名约定,尽管还有java.awt.Rectangle类,因此Rectangle可能不是最好的要使用的名称。

答案 3 :(得分:0)

只需将window.visibility添加为true即可。