2014-07-15 22 views
0

下面的代码在我单击按钮时绘制一个矩形,我希望矩形只能被绘制一次,无论点击多少次。另外我怎样才能将矩形放置在框架的中心和上面的按钮?ActionListener和对象定位问题

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

你可以声明场

boolean firstClick = true;

,比写类似的东西:

public void actionPerformed(ActionEvent event){ 
         if(firstClick){ 
         panel.add(new drawrectangle()); } 
         firstClick = false; 

} 
+0

谢谢,它的工作:) – user3798851

0

要回答你的第一个问题,你可以保持的按钮多少次了轨道已使用变量按下并在actionPerformed()方法中递增。然后你会知道按钮被按下多少次,并相应地采取行动。

要回答第二个问题,更简单的方法是使用BorderLayout。创建两个JPanel s添加按钮到一个面板并将其添加到NORTH并将第二个面板添加到CENTRE。然后当您按下按钮时,您可以将矩形添加到CENTER中的面板。

困难的方法,但更确切的做法是通过删除布局管理器(panel.setLayout(null)),然后指定所有组件的大小和位置来手动放置按钮和矩形。您还需要跟踪窗口状态的变化等。

另一种方法是使用GridBagLayout,这是第一种和第二种方法之间的很好平衡。

+0

谢谢,我会试试:) – user3798851

0

下面的代码在我点击按钮时绘制一个矩形,我希望矩形只能被绘制一次而不管点击多少次。另外我怎样才能将矩形放置在框架的中心和上面的按钮?

  1. 不,你发布的代码不绘制矩形在所有当你点击按钮。
  2. 只需计算点击按钮的频率以及是否第一次将按钮添加到JPanel。
  3. 您可以使用BorderLayout将矩形放置在中心位置和上方的按钮上。
+0

lolololololol – user3798851