每当我点击按钮时,下面的代码都会绘制一个矩形,我想要只绘制一次矩形,无论单击按钮多少次。另外,我如何将矩形定位在框架的中心和上方的按钮?
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.BLACK);
Rectangle2D rect=new Rectangle2D.Double(50,50,200,200);
g2.draw(rect);
g2.fill(rect);
}
}
答案 0 :(得分:0)
您可以声明字段
boolean firstClick = true;
比写那样:
public void actionPerformed(ActionEvent event){
if(firstClick){
panel.add(new drawrectangle()); }
firstClick = false;
}
答案 1 :(得分:0)
要回答您的第一个问题,您可以使用变量跟踪按钮被按下的次数,并使用actionPerformed()
方法将其递增。然后,您将知道按下按钮的次数并采取相应的操作。
要回答您的第二个问题,更简单的方法是使用BorderLayout
。在一个面板上创建两个JPanel
添加按钮,并将其添加到NORTH
,然后将第二个面板添加到CENTRE
。然后,当您按下按钮时,您可以将矩形添加到CENTER中的面板。
困难的方法,但更精确的方法是通过删除布局管理器(panel.setLayout(null)
)手动放置按钮和矩形,然后指定所有组件的大小和位置。然后,您还必须跟踪窗口状态等的变化。
另一种方法是使用GridBagLayout
,这是第一种和第二种方法之间的重要平衡。
答案 2 :(得分:0)
每当我点击按钮时,下面的代码都会绘制一个矩形,我想要只绘制一次矩形,无论单击按钮多少次。另外,我如何将矩形定位在框架的中心和上方的按钮?