[英]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.