gpt4 book ai didi

java - JPanel 已添加到切换按钮单击上的其他 Jpanel 上

转载 作者:行者123 更新时间:2023-12-02 02:13:40 25 4
gpt4 key购买 nike

我正在尝试制作一个在 JToggleButton 的帮助下激活的弹出面板。我希望在选择 ToggleButton 时将 JPanel 添加到另一个 Jpanel 上,并在取消选择 ToggleButton 时隐藏 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 是我想要操作的切换按钮,DesignButtonPanel 是父面板。

public static JPanel createButtonsDialog(){

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

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

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

最佳答案

问题是您不断创建 JPanel 的实例。如果未选择 JToggleButton,则可以删除 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 仅实例化一次。

关于java - JPanel 已添加到切换按钮单击上的其他 Jpanel 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com