java - AWT 和 Swing 组件未正确呈现
问题描述
我有一个在我们公司使用的应用程序,用于在服务器上搜索与客户相关的文件(macOS 提供的搜索失败,甚至 FoxTrotSearch 等第三方程序也无法找到网络驱动器上的所有文件)。
有时(可能有 10% 的时间),Preference Frame 没有完全渲染。一些组件只是在屏幕上丢失,但由于其他组件正确放置在空白区域周围,因此以某种方式存在。如果我选择另一个窗口/框架/应用程序,则会出现缺少的组件。
我已经注意到,当涉及更多组件时,问题会更频繁地出现。有时只有少数组件丢失,有时接近 50%。
我在调用之前放置并添加所有组件validate(); pack(); setVisible(true);
是否有我遗漏的东西,或者这是一种必须接受的行为?
为了完整性:我正在使用以下组件:
java.awt.Component
java.awt.Label
java.awt.TextField
javax.swing.JCheckBox
javax.swing.JFrame
javax.swing.JSeparator
javax.swing.JSpinner
- (
java.awt.FlowLayout
) - (
javax.swing.BoxLayout
)
解决方案
不要混合使用 Swing 和 AWT 组件。由于 Swing 提供轻量级组件,而 AWT 具有重量级组件,将它们混合在一起可能(通常确实)会导致问题。
IE 而不是Component
, Label
&TextField
使用JComponent
(或JPanel
), JLabel
& JTextField
。
注意: Swing建立在AWT 组件之上——Swing 组件的继承层次通常最终会返回到 AWT 组件。Swing 还使用大量 AWT API(打印、Java2D 字体等)和许多基于 AWT 的布局。这只是我们需要小心的组件。
推荐阅读
- r - 如何增加ggplot R中的轴标签文本大小?
- go - 如何包装路由处理函数 gin.HandlerFunc
- c# - 为什么此代码段不起作用?(Uwp 应用内容播放媒体内容)
- swift - 核心数据 - 关系没有保存在循环中
- postgresql - Play Framework:使用h2数据库进行开发和生产模式下的postgresql以及如何通过conf-file连接到postgresql
- python - 尝试获取硒代码以在下拉菜单中选择一个选项,但不起作用(Google 表单)
- docker - Nginx 日志没有写入
- mongodb - 查询以加入 mongodb 中的两个嵌套集合
- machine-learning - 如何改善我的回归问题的准确性低?
- javascript - javascript,js图表循环问题