亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號