我有一个名为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的矩形背景。
答案 0 :(得分:0)
您可以尝试在SwingUtilities.invokeLater()调用中调用remove / validate。
答案 1 :(得分:0)
尝试将AditWindow.this传递给Main.board.del()方法而不是此方法。