gpt4 book ai didi

java - Swing:动态显示面板

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

我目前正在使用 Netbeans GUI 生成器制作 java swing GUI。当用户浏览 GUI 时,我的主 JFrame 上有一堆面板被替换, Controller 类正在处理这个问题。但是,在一个步骤中,有一个面板 (FilterDefinitionPanel),其中包含一个组合框以及一个空白的内部面板 (QueryHelperPanel)。

我想做的是根据用户在组合框中选择的内容,将这个内部面板替换为我创建的另一个面板 (StringQueryDefinitionPanel)。所以现在在我的组合框的 ComboBoxItemStateChanged 事件处理程序下,我让我的 Controller 类运行这个方法:

 public void selectFilterAttribute(Object item) {
/**
* Determine panel to create based on item selection. Currently always returns the same
* StringQueryDefinitionPanel.
*/
JPanel panel = this.getRequiredQueryHelperPanel(item);
/**
* Swap the placeholder QueryHelperPanel with the required one.
*/
((FilterDefinitionPanel) this.mainFrame.getMainPanel()).setQueryHelperPanel(panel);
/**
* Not sure if all of these are needed :\
*/
mainFrame.validate();
mainFrame.repaint();
mainFrame.pack();
}

这是 FilterDefinitionPanel 的 setQueryHelper 方法中发生的事情:

public void setQueryHelperPanel(JPanel panel){
this.remove(queryHelperPanel);
this.queryHelperPanel=panel;
this.queryHelperPanel.repaint();
/**
* Again, not sure which refresh methods are needed...
*/
this.validate();
this.repaint();
}

目前我认为这是用 ...something... 替换我的内部占位符面板,但替换似乎不包含任何内容。我不知道这是否重要,但占位符和替换面板的尺寸相同。我是一个 Swing 不定的人,所以任何提示都会非常感激。

最佳答案

setQueryHelperPanel() 方法不起作用,因为它通过 remove()this 的子集合中删除现有面板方法,但随后不使用 add() 添加新面板 - 将它分配给实例变量不会导致它成为子面板。

但是,对于您的问题,更简洁的解决方案是使用 CardLayout .

关于java - Swing:动态显示面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2269194/

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