簡體   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