一、性能问题
随着Java 6对于Swing性能的改进,Swing的运行速度已经开始得到了大大的提高,看看NetBeans就知道了,NetBeans就是Swing开发的,如果你跑Swing很慢,很耗资源,那么应该从自己的程序上找找问题,推荐使用NetBeans自带的Profile查找原因,教程在这里 – Profile Introduce 。
二、LookAndFeel
用Swing做企业应用时,LookAndFeel的选择和使用是决定这个项目能否被客户接受的一个很大因素,即要好看,又要考虑跨平台的兼容性,必要时自己还得设计部分LookAndFeel, 可以看看这里提供的一些开源LookAndFeel:http://www.open-open.com/61.htm 和http://www.javootoo.com/。
切换LookAndFeel:
1 |
UIManager.setLookAndFeel(LookAndFeelName); |
2 |
SwingUtilities.updateComponentTreeUI(frame); |
三、合理的控制初始化组件和组件初始化的顺序可以很大的提高性能
举个例子:之前我们项目中有一个地方,当打开程序时,会初始化几十个甚至成百个JPanel,这显然成为程序启动时慢的一个因素,也导致了用户体验的降低,这些JPanel完全可以在程序启动后再根据用户的需要去初始化,因为用户打开程序时这些Panel不是必须看到的。
四、要有统一的UI规范
比如Button的高度,进度条的高宽等,也可以通过UIManager给系统组件设置统一属性,比如统一设定Button的间距和字体:
1 |
UIManager.put( "Button.margin" , new Insets( 2 , 5 , 2 , 5 ));
|
2 |
UIManager.put( "Button.font" , new Font( "宋体" , Font.PLAIN, 13 )); |
五、多线程的使用
用Swing做的都是界面的东西,如果界面假死或者用户等待事件太长,那么用户体验必然是不好的,这里就需要用到多线程的使用了,当界面处理一个请求时,不能让界面假死了,需要后台另一个线程去做处理,然后将结果返回到Swing线程,这块可以看看SwingWorker的介绍。
六、布局管理器
布局管理器的使用在Swing里面是比较重要的,它直接决定了你界面的显示效果,也是比较难用的一块,不好举例子,建议多了解每个布局管理器的使用场景。
七、JTable & JTree
在Swing组件的使用中除了布局管理器,估计就数JTable和JTree的使用稍微有点麻烦了,下面我就分享一些实际项目中JTable的一些实例,关于JTree,可以点这里:JTree 经验 总结 。
JTable相关
1、自定义表头排序
1 |
TableRowSorter rs = (TableRowSorter) table.getRowSorter(); |
2 |
Comparator<Integer> intComparator = new Comparator<Integer>() {
|
4 |
public int compare(Integer o1, Integer o2) {
|
5 |
return o1.compareTo(o2);
|
8 |
rs.setComparator( 3 , intComparator);
|
2、自定义Table Renderer
01 |
public class CommonTableCellRenderer extends DefaultTableCellRenderer {
|
04 |
public Component getTableCellRendererComponent(JTable table, Object value,
|
05 |
boolean isSelected, boolean cellHasFocus, int row, int column) {
|
06 |
JComponent comp = (JComponent) super .getTableCellRendererComponent(table, value,
|
07 |
isSelected, cellHasFocus, row, column); |
11 |
comp.setBackground(UIConsts.HIGHLIGHTER_COLOR);
|
13 |
comp.setBackground(Color.white);
|
19 |
case PaperTableModel.STATUS_COLUMN:
|
20 |
switch ((EntityStatus) value) {
|
22 |
comp.setIcon(ENABLED_ICON);
|
23 |
setHorizontalAlignment(JLabel.LEADING);
|
26 |
comp.setIcon(DISABLED_ICON);
|
27 |
setHorizontalAlignment(JLabel.CENTER);
|
3、自定义Table列宽
1 |
TableColumnModel colModel = table.getColumnModel(); |
2 |
colModel.getColumn( 0 ).setPreferredWidth( 70 );
|
3 |
colModel.getColumn( 1 ).setPreferredWidth( 55 );
|
4 |
colModel.getColumn( 2 ).setPreferredWidth( 120 ); |
4、禁止Table列拖动
1 |
table.getTableHeader().setReorderingAllowed( false ); |
5、单选表格设置
1 |
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
6、设置表头默认支持排序
1 |
table.setAutoCreateRowSorter( true ); |
7、设置列不可随容器组件大小变化自动调整宽度
1 |
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); |
8、固定Table上的某些列不滚动
这个需求是这样的,比如Table上左边有部分数据,是后面数据所共有的属性,那么当后面数据很多时,显示不下会出现滚动条,但是滚动时又不想让左侧的共有属性动,只滚动右侧的数据部分。
实现原理是:scrollPane里面放置一个表格,然后在scrollPane的左上角放置以共有属性的部分为Model的表格,剩下的右侧就是剩余的纯数据表格。
最终效果就是表格左侧的列锁定了,右侧数据出现滚动条时,可以滚动,但左侧不动。
核心代码:比如有HeaderTable和ReportTable, 其中ReportTable是放置在一个ScrollPanel里面,Model是所有数据的Model,将左侧的数据和右侧的数据分开
02 |
JScrollPane scrollPane = (JScrollPane) SwingUtilities. |
03 |
getAncestorOfClass(JScrollPane. class ,
|
04 |
reportTable.getTable());
|
09 |
scrollPane.setRowHeaderView(headerTable.getTable()); |
10 |
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, |
11 |
headerTable.getTable().getTableHeader()); |
9、Table上的直接编辑功能
两点:
1、重写 public boolean isCellEditable(int row, int columnIndex) 方法,定义可编辑的行列。
2、重写 public void setValueAt(Object obj, int rowIndex, int columnIndex) 方法,拿到原来的对象,设置新的对象值。
分享到:
相关推荐
1. 可以用来作为学习swing的辅助工具 ...3. 使用方式 java -jar swing-tips-helper.jar ,如果你需要源码及资源及更多详细介绍参考该地址 https://blog.csdn.net/x308561498/article/details/123211860
java-swing-tips, 包含 Java Swing的示例 java-swing-tips英语: 使用小源代码示例介绍 Java Swing的GUI 程序。 许可证https://github.com/aterai/java-swing-tips/blob/master/L
aterai_java-swing-tips_1743030688
java源代码块java-swing-tips :介绍一个带有源代码的小样本的Java Swing GUI程序。 :使用小源代码示例介绍Java Swing的GUI程序。 什么是摇摆 Swing是一组Java标准组件(库、 UI工具包),用于创建GUI (图形用户...
在编程领域,特别是GUI(图形用户界面)设计中,"Tips对话框"是一种常见的功能,它用于向用户提供简短的提示信息。这个例子是关于如何在应用程序中实现Tips对话框的教程,主要针对控件使用的类。让我们深入探讨一下...
“Java--330--Tips”是一本汇集了330个实用Java技巧的手册,这些技巧覆盖了多个方面,包括网络编程、多线程处理、图形用户界面(GUI)、数据库操作等。该书的目标读者是Java开发者,旨在帮助他们更好地理解和掌握...
根据给定的信息,“500个JAVA的_Tips”是一份收集了来自多个Java论坛及新闻通讯中的优质问题与解答的资料集。这份文档由一位热爱Java编程并对该语言有深刻理解的人士编撰而成。下面,我们将从文档标题、描述、标签...
根据提供的文件信息,我们可以推断出这是一本包含330个Java小技巧的书籍或文档,旨在帮助读者提升Java编程技能。虽然具体内容没有详细列出,但从描述中我们可以大致了解到这本书涉及了Java的多个方面,并且鼓励用户...
根据给定文件的信息,我们可以总结出“500 JAVA Tips”这一资料中涵盖的主要知识点及其相关信息。 ### 一、概述 “500 JAVA Tips”是一份由作者收集整理的关于Java编程语言的知识资料,包含了从多个Java论坛及新闻...
以上只是"330个有用的Java Tips"中的冰山一角,每个提示都可能涉及一个或多个深入的主题。通过深入学习和实践,开发者可以不断提升自己的Java技能,编写出高效、健壮的代码。提供的PDF文档"330 Java Tips-pdf.pdf"和...
《330_tips_Jul22_2003》是针对Java编程语言的一份珍贵资源,包含330个实用技巧和最佳实践。这份资料可能是2003年7月22日发布的一个PDF文档集合,旨在帮助Java开发者提升技能、优化代码并解决常见问题。下面,我们将...
接下来,我们将围绕“330 Java Tips”这一主题展开讨论。 ### 一、Java基础知识 #### 1. Java语言特性 - **面向对象**:Java是一种完全支持面向对象编程的语言,它支持类、对象、继承、封装、多态等概念。 - **...
### Qt学习之路(1~60 + tips)彩版带书签 #### 重要知识点概览 1. **Qt简介** - Qt不仅是一个GUI库,而是一个全面的跨平台应用开发框架。 - 提供一站式服务,包括但不限于字符串处理、网络编程、数据库访问等。 ...
The aim is not to teach LATEX programming, but to give a quick reference to all the tips and tricks that can be used if you are encountering a (difficult) problem, or simply facing a question which ...
简单的FTP服务器 ... FTP Server By: Bryan Cairns ...If youre a Dephi Pro, you can probably give me some tips as I am still new to Delphi programming. Bryan Cairns cairnsb@ameritech.net
这是一个使用Java Swing框架开发的简单数火柴游戏。游戏的目标是通过移除一定数量的火柴来击败对手。游戏采用图形用户界面(GUI),使得玩家能够直观地看到当前游戏的状态,并进行操作。 ### 二、主要类和组件介绍 #...
图形用户界面(GUI)开发是Java的一大特色,AWT和Swing是两种主要的GUI工具包。AWT是较早的API,而Swing是在AWT基础上的改进,提供了更丰富的组件库和更好的跨平台兼容性。这部分技巧将指导开发者如何设计美观且功能...
Jcreator还支持Java Swing和JavaFX等图形用户界面的开发,使得创建桌面应用程序变得更加容易。 在提供的文件列表中,我们可以看到以下几个关键文件: 1. **unins000.dat和unins000.exe**:这些通常是卸载程序的...