[英]Trouble with ActionListener and object positioning
以下代码在我单击按钮时绘制一个矩形,无论该按钮被单击了多少次,我都希望该矩形仅绘制一次。 另外,如何将矩形放置在框架的中心以及其上方的按钮?
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);
}
}
您可以声明字段
boolean firstClick = true;
比写这样的东西:
public void actionPerformed(ActionEvent event){
if(firstClick){
panel.add(new drawrectangle()); }
firstClick = false;
}
要回答您的第一个问题,您可以使用变量跟踪按钮被按下的次数,并在actionPerformed()
方法中对其进行递增操作。 然后,您将知道已按下按钮多少次,并采取相应的措施。
要回答第二个问题,更简单的方法是使用BorderLayout
。 在一个面板上创建两个JPanel
的添加按钮,将其添加到NORTH
然后将第二个面板添加到CENTRE
。 然后,当您按下按钮时,可以将矩形添加到CENTRE的面板中。
困难的方法但更精确的方法是通过删除布局管理器( panel.setLayout(null)
),然后指定所有组件的大小和位置来手动放置按钮和矩形。 然后,您还必须跟踪窗口状态等的变化。
还有一种方法是使用GridBagLayout
,这是第一种方法和第二种方法之间的很好的平衡。
以下代码在我单击按钮时绘制一个矩形,无论该按钮被单击了多少次,我都希望该矩形仅绘制一次。 另外,如何将矩形放置在框架的中心以及其上方的按钮?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.