按下按钮没有任何反应,我做错了什么?我希望按下按钮时绘制矩形。代码有什么问题??
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);
}
}
答案 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()
的情况,因为当您将矩形添加到面板时,它会自动重新出现并标记为需要重新绘制。
但是,请注意每次事件触发时都要添加一个新矩形。那是你要的吗?此外,rectangle
和drawrectangle
应以大写字母开头,以符合正常的Java命名约定,尽管还有java.awt.Rectangle
类,因此Rectangle
可能不是最好的要使用的名称。
答案 3 :(得分:0)
只需将window.visibility添加为true即可。