【错误记录】Java AWT 图形界面编程问题 ( 组件按照布局要求设置后无法显示等各种问题 )
一、问题描述
最近尝试使用 Java AWT 图形界面编程 绘制一个小界面 , 用了一周多 , 恶心坏了 ;
经常遇到 按照 布局要求 设置好代码后 , 布局不显示 , 刷新不及时 , 显示一半布局等问题 ;
在本篇博客中整理下遇到的问题 ;
AWT 不是一般的难用 , 赶紧学 Swing ;
二、在对话框中设置了组件不显示的问题
先显示 Dialog 对话框 , 然后根据操作需求生成指定数量的组件 , 显示在对话框中 ;
动态添加组件后 , 发现添加的组件都无法显示 ;
最后发现需要在添加后 , 调用一次 Frame#setVisibility(true) 方法 , 设置以下窗口的可见性 , 最终才能将动态添加的组件更新上去 ;
只要组件发生了改动 , 就调用一次 Frame#setVisibility(true) 方法 , 多调用几次反正又不报错 ;
组件在设置前窗口已经显示 , 那么在设置了新组件之后 , 建议再次调用 Frame#setVisibility(true) 再次显示一次窗口 ;
三、Frame 窗口设置组件位置失效
在 Frame 窗口 中设置组件 的位置和大小 , 发现设置无效 ;
最终发现 Frame 窗口的默认布局是 BorderLayout , 默认添加组件是添加在中心的 , 默认填充整个 CENTER 区域 ;
如果想要在窗口中精确控制某个组件或容器的显示位置和大小 , 那么就要取消 Frame 窗口的默认布局 , 调用
Frame#setLayout(null)
取消布局 , 所有的组件和容器的显示位置和显示大小 , 全部都手动控制 , 这样可以随心所意设置界面的布局样式 ;
四、线性布局组件显示大小设置
在 Box 或者使用 BoxLayout 的 Panel 容器中 , 向其中添加的组件默认填充整个布局 , 这里需要设置大小来限制布局 ;
使用 Component#setSize 设置的大小是无效的 ;
必须使用 Component#setMaximumSize 设置最大大小来显示组件 ;
五、容器的多重嵌套问题
Container A 容器中 嵌套 Container B , Container B 中嵌套 组件 C ;
那么 设置 组件时 , 创建完 容器 B , 不要马上添加到 容器 A 中 , 一定要按照 嵌套顺序 进行操作 , 建议的操作顺序如下 :
创建容器 A -> 创建容器 B -> 创建组件 C -> 组件 C 添加到容器 B -> 容器 B 添加到容器 A -> 设置 Frame#setVisibility(true) 显示窗口
这样操作是最不容易出问题的 , 出现过一次显示部分布局的情况 , 按照上述问题进行操作 ,
六、对话框多次打开问题
在界面开发时 , 经常遇到点击按钮弹出对话框的问题 ;
多次点击会弹出很多对话框 , 这里建议将 Dialog 设置为成员属性 , 在创建 Dialog 对话框前 先判断该 Dialog 变量是否不为空 , 如果不为空 则先调用 Dialog#dispose 先关闭一下对话框 ;
if (mDialog != null) {
mDialog.dispose();
}
这样可以保证始终只显示一个新的对话框 , 打开新对话框时会关闭前一个对话框 ;
七、界面跳转闪烁问题
每个独立的功能都封装在一个单独的 Frame 窗口中 , 如 配置窗口 , 操作窗口 , 日志窗口等 , 各个窗口之间跳转时 , 需要创建并显示 Frame 实例 , 这样导致屏幕闪烁 ;
推荐方案 : 只创建一个 Frame 窗口 , 不同的功能封装成不同的 Panel , 切换功能时 , 只更换 Panel 容器 , 这样就避免了 Frame 窗口的创建和显示
相关文章
- 年近而立,Java何去何从?
- Java 项目编译错误 Error:java: java.lang.ExceptionInInitializer
- Java 流程控制语句——分支结构
- 模仿echo命令学习NIO——Java实现
- Java性能调优工具之JConsole工具
- sql查询报java.sql.SQLException: Column 'LC_ID' not found 的错误实际上是mysql在hibernate别名的问题
- Java修改数组长度
- Java环境变量配置错误
- Java垃圾回收精粹 — Part2
- ‘getColor(Int): Int‘ is deprecated. Deprecated in Java
- androidの异常:java.lang.IllegalStateException: ImageLoader must be init with configuration befor 错误解决方法
- java 基础之入门第一个坑 错误:找不到或无法加载主类
- in thread “main“ java.lang.IllegalArgumentException:java.net.UnknownHostException:hadoop102
- java中出现绑定异常,MyBatis绑定错误提示BindingException:Invalid bound statement (not found)的解决方法...
- android程序连接网络错误:java.net.unknownhostexception:unable to resolve host
- java -inally转