我正在使用Abeille Forms Designer作为我的Swing应用程序的WYSIWYG编辑器。我已经使用这个工具创建了一个test.jfpr
文件,然后我将其导入Eclipse项目并放入类路径。然后我只创建一个JFrame
使用该文件作为其FormPanel
,当应用程序启动时 - 瞧 - 你有一个非常漂亮的GUI,无需编程。我喜欢它!
唯一的问题是,当应用程序加载时,“客户端区域”(Windows术语)中没有任何内容正在绘制 - 菜单栏以及屏幕的主要内容。
当我调整JFrame
窗口的大小时,所有内容都立即绘制/绘制并且看起来很棒。
如果我再做一些事情(选择菜单项等)应该更改主屏幕,则没有任何反应。但如果我调整窗口大小,那么 bam !我看到更改生效了。
对我而言,这似乎是一个绘画/重绘问题,我的应用程序逻辑与我创建的Abeille表单之间存在脱节。
有没有办法 - 在Swing中 - 以编程方式强制整个窗口(客户端和非客户端区域)重绘/刷新?如果没有,那么是否有人知道这里发生了什么?提前谢谢!
答案 0 :(得分:3)
除了mKorbel的建议,
确认您正在event dispatch thread上构建GUI。
确保在在封闭的setVisible()
上调用pack()
后仅调用 {。}}。
答案 1 :(得分:1)
1)you have a very nice looking GUI that took zero programming effort. I love it!
2)If I then do something (selecting a menu item, etc.) that should change
the main screen, nothing happens. But if I resize the window, then bam!
I see the changes take effect.
3)Is there a way - in Swing - to programmatically force the entire window
(client- and non-client areas alike) to repaint/refresh?
4)If not, then does anybody have an idea as to what is happening here?
LayoutManager
如何工作答案 2 :(得分:0)
您可以在菜单上注册actionListener。菜单例程完成后,请调用相应组件上的repaint函数。
可能需要一些额外的工作来避免闪烁。