`
<冫茖>
  • 浏览: 36760 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Swing Tips(一)

阅读更多

 

一、性能问题

随着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);
3 frame.pack();

三、合理的控制初始化组件和组件初始化的顺序可以很大的提高性能

举个例子:之前我们项目中有一个地方,当打开程序时,会初始化几十个甚至成百个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>() {
3   
4             public int compare(Integer o1, Integer o2) {
5                 return o1.compareTo(o2);
6             }
7         };
8 rs.setComparator(3, intComparator);
2、自定义Table Renderer
01 public class CommonTableCellRenderer extends DefaultTableCellRenderer {
02   
03         @Override
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);
08             //表格的奇数偶数行交叉颜色显示
09             if (!isSelected) {
10                 if (row % 2 == 0) {
11                     comp.setBackground(UIConsts.HIGHLIGHTER_COLOR);
12                 } else {
13                     comp.setBackground(Color.white);
14                 }
15             }
16   
17             //table column里面显示图标和对齐方式
18             switch (column) {
19                 case PaperTableModel.STATUS_COLUMN:
20                     switch ((EntityStatus) value) {
21                         case VALID:
22                             comp.setIcon(ENABLED_ICON);
23                             setHorizontalAlignment(JLabel.LEADING);
24                             break;
25                         case DISABLED:
26                             comp.setIcon(DISABLED_ICON);
27                             setHorizontalAlignment(JLabel.CENTER);
28                             break;
29                     }
30                     break;
31                 default:
32                     comp.setIcon(null);
33                     break;
34             }
35   
36             return comp;
37         }
38     }
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,将左侧的数据和右侧的数据分开

01 //找到主表所在的scrollPane
02 JScrollPane scrollPane = (JScrollPane) SwingUtilities.
03    getAncestorOfClass(JScrollPane.class,
04     reportTable.getTable());
05   
06 //中间处理headerTable的数据和reportTable剩余的数据
07   
08 //将新表HeaderTable放在scrollPane的左上角
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) 方法,拿到原来的对象,设置新的对象值。

分享到:
评论

相关推荐

    swing-tips-helper(swing-tips 例子助手)包含swing-tips的900多种swing各种实现例子

    1. 可以用来作为学习swing的辅助工具 ...3. 使用方式 java -jar swing-tips-helper.jar ,如果你需要源码及资源及更多详细介绍参考该地址 https://blog.csdn.net/x308561498/article/details/123211860

    java-swing-tips, 包含 Java Swing的示例.zip

    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.zip

    aterai_java-swing-tips_1743030688

    java源码blob-java-swing-tips:JavaSwing示例

    java源代码块java-swing-tips :介绍一个带有源代码的小样本的Java Swing GUI程序。 :使用小源代码示例介绍Java Swing的GUI程序。 什么是摇摆 Swing是一组Java标准组件(库、 UI工具包),用于创建GUI (图形用户...

    一个显示Tips对话框的例子

    在编程领域,特别是GUI(图形用户界面)设计中,"Tips对话框"是一种常见的功能,它用于向用户提供简短的提示信息。这个例子是关于如何在应用程序中实现Tips对话框的教程,主要针对控件使用的类。让我们深入探讨一下...

    Java--330--Tips

    “Java--330--Tips”是一本汇集了330个实用Java技巧的手册,这些技巧覆盖了多个方面,包括网络编程、多线程处理、图形用户界面(GUI)、数据库操作等。该书的目标读者是Java开发者,旨在帮助他们更好地理解和掌握...

    500个JAVA的_Tips

    根据给定的信息,“500个JAVA的_Tips”是一份收集了来自多个Java论坛及新闻通讯中的优质问题与解答的资料集。这份文档由一位热爱Java编程并对该语言有深刻理解的人士编撰而成。下面,我们将从文档标题、描述、标签...

    330 Java Tips(330 JAVA 小技巧)

    根据提供的文件信息,我们可以推断出这是一本包含330个Java小技巧的书籍或文档,旨在帮助读者提升Java编程技能。虽然具体内容没有详细列出,但从描述中我们可以大致了解到这本书涉及了Java的多个方面,并且鼓励用户...

    500 JAVA Tips

    根据给定文件的信息,我们可以总结出“500 JAVA Tips”这一资料中涵盖的主要知识点及其相关信息。 ### 一、概述 “500 JAVA Tips”是一份由作者收集整理的关于Java编程语言的知识资料,包含了从多个Java论坛及新闻...

    330 个 有用的Java Tips

    以上只是"330个有用的Java Tips"中的冰山一角,每个提示都可能涉及一个或多个深入的主题。通过深入学习和实践,开发者可以不断提升自己的Java技能,编写出高效、健壮的代码。提供的PDF文档"330 Java Tips-pdf.pdf"和...

    330_tips_Jul22_2003

    《330_tips_Jul22_2003》是针对Java编程语言的一份珍贵资源,包含330个实用技巧和最佳实践。这份资料可能是2003年7月22日发布的一个PDF文档集合,旨在帮助Java开发者提升技能、优化代码并解决常见问题。下面,我们将...

    330 java tips

    接下来,我们将围绕“330 Java Tips”这一主题展开讨论。 ### 一、Java基础知识 #### 1. Java语言特性 - **面向对象**:Java是一种完全支持面向对象编程的语言,它支持类、对象、继承、封装、多态等概念。 - **...

    Qt学习之路(1~60 + tips)彩版带书签

    ### Qt学习之路(1~60 + tips)彩版带书签 #### 重要知识点概览 1. **Qt简介** - Qt不仅是一个GUI库,而是一个全面的跨平台应用开发框架。 - 提供一站式服务,包括但不限于字符串处理、网络编程、数据库访问等。 ...

    A-Practical-Guide-to-LATEX-Tips.pdf

    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 ...

    Delphi简单的FTP服务器

    简单的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小程序 数火柴游戏 图形界面

    这是一个使用Java Swing框架开发的简单数火柴游戏。游戏的目标是通过移除一定数量的火柴来击败对手。游戏采用图形用户界面(GUI),使得玩家能够直观地看到当前游戏的状态,并进行操作。 ### 二、主要类和组件介绍 #...

    java 330条技巧

    图形用户界面(GUI)开发是Java的一大特色,AWT和Swing是两种主要的GUI工具包。AWT是较早的API,而Swing是在AWT基础上的改进,提供了更丰富的组件库和更好的跨平台兼容性。这部分技巧将指导开发者如何设计美观且功能...

    Jcreator开发工具-绿色版

    Jcreator还支持Java Swing和JavaFX等图形用户界面的开发,使得创建桌面应用程序变得更加容易。 在提供的文件列表中,我们可以看到以下几个关键文件: 1. **unins000.dat和unins000.exe**:这些通常是卸载程序的...

Global site tag (gtag.js) - Google Analytics