JButton需要2次点击

时间:2015-07-17 16:04:08

标签: java swing

我有一个名为JPanel的主board,其中有另一个JPanel,其中有两个“JButtons”,其中一个应该在点击时删除此面板。

public class AditWindow extends JPanel {
    private int width;
    private int height;

public AditWindow(int x, int y){
        super();
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        width=180;
        height=60;
        setBounds(x, y, width, height);
        JButton addLoc = new JButton("Add Location");
        JButton addSign = new JButton("Add Sign");
        addLoc.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                close();
                System.out.println("click");
            }
        });
        addSign.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("addSign");
            }
        });
        Main.font=Main.font.deriveFont(13f);
        addLoc.setFont(Main.font);
        addSign.setFont(Main.font);
        addLoc.setMaximumSize(new Dimension(width, 30));
        addSign.setMaximumSize(new Dimension(width, 30));
        addLoc.setBackground(new Color(0xF6F6F6));
        addSign.setBackground(new Color(0xF6F6F6));
        add(addLoc);
        add(addSign);
        Main.board.validate();

private void close(){
        System.out.println("close");
        Main.board.del(this);
        }
}

del方法是:

public void del(Component c){
        remove(c);
        validate();
        System.out.println("removed");
        }

问题是:出于某种原因,要删除面板需要2次点击,但两次点击都会打印这些行。我不确定如何正确处理这种情况。

EIDT:如果我从del()方法中删除了validate()行,它将从第一次点击开始工作,但只有按钮会消失,并在屏幕上留下JPanel的矩形背景。

2 个答案:

答案 0 :(得分:0)

您可以尝试在SwingUtilities.invokeLater()调用中调用remove / validate。

答案 1 :(得分:0)

尝试将AditWindow.this传递给Main.board.del()方法而不是此方法。