JPanel 被添加到其他 Jpanel on togglebutton Click

我正在尝试制作一个在 JToggleButton 的帮助下激活的弹出面板。我希望在选择 ToggleButton 时将 JPanel 添加到另一个 Jpanel 上,并在取消选择 ToggleButton 时隐藏它。


我已经声明了 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 是我想要操作的切换按钮,而 DesignButtonPanel 是父面板。


public static JPanel createButtonsDialog(){


    JPanel buttonsPanel = new JPanel();

    buttonsPanel.setBorder(new LineBorder(Color.gray,1));

    return buttonsPanel;

}

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


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


慕桂英4014372
浏览 91回答 1
1回答

呼唤远方

问题是您不断创建JPanel. remove如果JPanel您JToggleButton未被选中,您可以添加一个已创建的实例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被实例化了一次。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java