JPanel 被添加到其他 Jpanel on togglebutton Click
JPanel is added onto other Jpanel on togglebutton Click
我正在尝试制作一个在 JToggleButton 的帮助下激活的弹出面板。
我希望在 ToggleButton 为 selected 时将 JPanel 添加到另一个 Jpanel 上,并在 ToggleButton 为 deselected 时隐藏。
我已经声明了 JToggleButton 并使用了 ItemListener。但是发生的事情是当我 select ToggleButton 创建一个面板时,如果我 deselect 和 Select 它再次添加另一个 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;
}
这 class 显示我想添加到父面板的面板
如何在 JtoggleButton 被 Selected 时只添加一次面板并在其 Deselected 时隐藏?
问题是您一直在创建 JPanel
的实例。
如果未选择 JToggleButton
,则可以 remove
JPanel
,如果选择了按钮,则可以添加 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
只实例化了一次
我正在尝试制作一个在 JToggleButton 的帮助下激活的弹出面板。 我希望在 ToggleButton 为 selected 时将 JPanel 添加到另一个 Jpanel 上,并在 ToggleButton 为 deselected 时隐藏。
我已经声明了 JToggleButton 并使用了 ItemListener。但是发生的事情是当我 select ToggleButton 创建一个面板时,如果我 deselect 和 Select 它再次添加另一个 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;
}
这 class 显示我想添加到父面板的面板
如何在 JtoggleButton 被 Selected 时只添加一次面板并在其 Deselected 时隐藏?
问题是您一直在创建 JPanel
的实例。
如果未选择 JToggleButton
,则可以 remove
JPanel
,如果选择了按钮,则可以添加 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
只实例化了一次