当前位置: 首页 > 面试题库 >

通过切换按钮将JPanel添加到其他Jpanel上单击

薄烨
2023-03-14
问题内容

我正在尝试制作一个通过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是作为父项的Panel。

public static JPanel createButtonsDialog(){

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

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

如何在选择JtoggleButton的情况下仅添加一次面板,而在取消选择时隐藏面板?


问题答案:

问题是您一直在创建自己的实例JPanel。你可以removeJPanel如果你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仅实例化了一次。



 类似资料:
  • 问题内容: 我有一个带有按钮的Class Circle和一个带有jPanel的Class I,我想做的是单击该按钮时会在面板上绘制一个圆圈,每次我单击该按钮并更改x和y“有些不怎么实现在这里”,我一遍又一遍地在JPanel上绕了一圈。如何做到这一点,或者有一种方法可以执行我描述的内容,而不管我的代码如何,但是我希望类圈子扩展Shape。 然后是圆班 问题答案: 您有点错误的主意。在绘图面板中,您应

  • 问题内容: 当有人单击按钮时,如何显示第二个JPanel?该代码给出了一个错误-未知源。我想念什么? 问题答案: 这个JPanel代码好吗? 并非如此(很抱歉),您应该使用a 来使其正常工作,请参阅如何使用CardLayout。 通过在构造函数中重新声明变量(和),您还可以隐藏变量。 您还应该避免使用布局,像素完美布局是现代ui设计中的一种幻觉。有太多因素会影响组件的单个大小,您无法控制。Swin

  • 问题内容: 我有一个gui,它的Panel包含一系列标签和TextField,并使用spring布局(这是mainPanel),而另一个Panel仅包含button(buttonPanel)。我正在尝试使我的mainPanel也具有垂直滚动条。我想实现我的GUI,以便在JFrame中有2个面板。mainPanel出现在框架的顶部,而buttonPanel出现在mainPanel的下方。 我的问题是

  • 我正在尝试将此 JPanel 添加到 JFrame 中,但我看不到他。当我创建新的 java 类并自己制作这个框架时,一切都很好。 来自JFrame表单的代码。 来自 JPanel 的代码: 来自Java类的代码。 我想不出区别在哪里。有人能帮我吗?

  • 我正在创建一个swing应用程序,并希望将JfreeChart添加到JPanel中。我创建了一个方法,在该方法中我创建了如下所示的图表: 创建了一个全局变量: 由于某种原因,当我点击按钮时,图表没有显示出来。

  • 我目前有一个主JFrame包含几个JPanels,每个面板中都有一些文本。创建JPanels的代码在一个单独的类中(它“实现”JPanels)。如何仅向单个面板添加JScrollPane? 我已经花了一些时间尝试这样做,但什么也没有发生。顺便说一下,我的JPanel使用GridLayout 上面的类是另一个面板类的实例变量,它是主面板“MenuHold”的实例变量。但使用“MenuHolder”的