我对Java GUI的理解不如我想象中的好。在我的窗体的paint方法中,我想清除所有当前的按钮,并添加新的按钮。(总体目标是提供一个界面,用户可以看到字符并单击按钮以下载与该字符相关的文档。由于每个字符都不同,当用户从我的列表中选择一个新用户时,将为他们提供一组新的文档和按钮。)
这是我刚刚编写的一个测试窗体,展示了事情会偏离轨道的地方。它具有我在实际程序中使用的类似范例,没有太多的杂乱无章。
没有调用removeAll(),按钮会继续被放在JPanel上面,但是有了这个调用,就什么也不显示了。我不知道为什么会这样,因为我已经适当地添加了组件,对吗?
编辑 明白了,让我给你更详细的解释。客户通过查看西侧面板上游戏中角色列表来浏览我的程序。他们可以从列表中选择一行,然后在东侧面板上显示char详情。详情包括图像和描述。最近,我添加了相关文档,这些文档将显示在东侧面板的底部。我创建了键盘监听器,以便客户可以通过按数字键快速查看文档,但我还希望给他们能够单击按钮启动pdf视图并查看文档内容的能力。
由于每个char都有不同的相关文档和不同数量的文档,我每次都会重新绘制按钮,以反映相关文档的数量和文档的适当标题。这就是重绘出现问题的地方。你给了我一个很好的解释,但我不知道如何让客户访问文档,除了在热键启动文档时绘制文档的描述。这有意义吗?
这是我刚刚编写的一个测试窗体,展示了事情会偏离轨道的地方。它具有我在实际程序中使用的类似范例,没有太多的杂乱无章。
public class GUITest extends JFrame
{
/**
* @param args
*/
public static void main(String[] args)
{
Container gui_test = new GUITest();
}
private JComponent content = null;
public GUITest()
{
super();
setVisible(true);
}
public void paint(Graphics g)
{
this.removeAll();
content = new JPanel();
JComponent test_button = new JButton("New Button 1");
JComponent button = new JButton("New Button 2");
content.add(button);
content.add(test_button);
this.add(content);
super.paint(g);
}
}
没有调用removeAll(),按钮会继续被放在JPanel上面,但是有了这个调用,就什么也不显示了。我不知道为什么会这样,因为我已经适当地添加了组件,对吗?
编辑 明白了,让我给你更详细的解释。客户通过查看西侧面板上游戏中角色列表来浏览我的程序。他们可以从列表中选择一行,然后在东侧面板上显示char详情。详情包括图像和描述。最近,我添加了相关文档,这些文档将显示在东侧面板的底部。我创建了键盘监听器,以便客户可以通过按数字键快速查看文档,但我还希望给他们能够单击按钮启动pdf视图并查看文档内容的能力。
由于每个char都有不同的相关文档和不同数量的文档,我每次都会重新绘制按钮,以反映相关文档的数量和文档的适当标题。这就是重绘出现问题的地方。你给了我一个很好的解释,但我不知道如何让客户访问文档,除了在热键启动文档时绘制文档的描述。这有意义吗?