繁体   English   中英

使用ActionListener和对象定位时出现问题

[英]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 ,这是第一种方法和第二种方法之间的很好的平衡。

以下代码在我单击按钮时绘制一个矩形,无论该按钮被单击了多少次,我都希望该矩形仅绘制一次。 另外,如何将矩形放置在框架的中心以及其上方的按钮?

  1. 当您单击按钮时,您发布的代码根本不会绘制矩形。
  2. 只需计算一下按钮被单击的频率即可,如果这是您第一次将按钮添加到JPanel中。
  3. 您可以使用BorderLayout将Rectangle放置在中心以及其上方的按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM