为了账号安全,请及时绑定邮箱和手机立即绑定

JPanel 被添加到其他 Jpanel on togglebutton Click

JPanel 被添加到其他 Jpanel on togglebutton Click

慕桂英4014372 2023-05-10 14:20:47
我正在尝试制作一个在 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 时仅添加一次面板并在取消选择时隐藏面板?
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

问题是您不断创建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被实例化了一次。


查看完整回答
反对 回复 2023-05-10
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信