sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 09:38:33 36 4
mua khóa gpt4 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 时仅添加一次面板并在取消选择时隐藏面板?

1 Câu trả lời

问题是您不断创建 JPanel 的实例。如果未选择 JToggleButton,则可以xóa bỏ 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() {
@Ghi đè
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
add(centerPanel, BorderLayout.CENTER);
} khác {
remove(centerPanel);
}
pack();
}
});

this.pack();
this.setVisible(true);
}
}

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

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

36 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com