jpanel被添加到togglebutton click上的其他jpanel中



我正在尝试制作一个弹出面板,该面板在JToggleButton的帮助下激活。我希望当选择toggleButton并在取消切换时隐藏时,我希望将jpanel添加到另一个jpanel中。

我已经声明了jtogglebutton并使用了itemListener。但是发生的事情是,当我选择togglebutton时,如果我取消选择并再次选择了一个面板时,再次添加了另一个jpanel,则在5次点击之后,什么也不会出现。

public static JPanel createDesignButtons(){
    designButtonsPanel.setOpaque(false);
    BoxLayout boxLayout = new BoxLayout(designButtonsPanel, BoxLayout.LINE_AXIS);
    designButtonsPanel.setLayout(boxLayout);
    mainButton.setIcon(Icons.venueIcon);
    mainButton.setBorderPainted(false);
    mainButton.setPreferredSize(new Dimension(40,40));
    mainButton.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent ev) {
        if(ev.getStateChange()==ItemEvent.SELECTED){
        designButtonsPanel.add(createButtonsDialog());
        designButtonsPanel.validate();
        } else if(ev.getStateChange()==ItemEvent.DESELECTED){
        System.out.println("button is not selected");
        }
    }
});
    designButtonsPanel.add(mainButton);
    JLabel padding = new JLabel(" ");
    padding.setPreferredSize(null);
    JLabel divider = new JLabel("", Icons.dividerIcon, JLabel.CENTER);
    divider.setPreferredSize(new Dimension(3,45));
    designButtonsPanel.add(divider);

    SwingUtilities.updateComponentTreeUI(designButtonsPanel);
    return(designButtonsPanel);
}

上面的代码显示mainbutton是我想要动作的toggleButton,而DesignButtonPanel是父母。

public static JPanel createButtonsDialog(){
    JPanel buttonsPanel = new JPanel();
    buttonsPanel.setBorder(new LineBorder(Color.gray,1));
    return buttonsPanel;
}

此类显示我想添加到父面板上的面板

选择JToggleButton并在取消选择时隐藏时,如何仅添加面板一次?

问题是您继续创建JPanel的实例。如果未选择JToggleButton,则可以remove JPanel,如果选择按钮,则可以添加JPanel的实例。请参阅此简单示例:

public class MainFrame extends JFrame {
private JPanel topPanel = new JPanel();
private JPanel centerPanel = new JPanel();
private JToggleButton toggleButton = new JToggleButton("Toggle");
public MainFrame() {
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLayout(new BorderLayout());
    this.topPanel.setPreferredSize(new Dimension(100, 100));
    this.centerPanel.setPreferredSize(new Dimension(100, 100));
    this.toggleButton.setPreferredSize(new Dimension(100, 100));
    this.add(topPanel, BorderLayout.NORTH);
    this.add(centerPanel, BorderLayout.CENTER);
    this.add(toggleButton, BorderLayout.SOUTH);
    this.toggleButton.addItemListener(new ItemListener() {
        @Override
        public void itemStateChanged(ItemEvent e) {
            if(e.getStateChange() == ItemEvent.SELECTED) {
                add(centerPanel, BorderLayout.CENTER);
            } else {
                remove(centerPanel);
            }
            pack();
        }
    });
    this.pack();
    this.setVisible(true);
}
}

您可以看到centerPanel仅实例化一次。

最新更新