前面介绍了程序界面上一些简单控件的组合排列,它们用来表达相互之间联系较弱的信息倒还凑合,要是用来表达关联性较强的聚合信息就力不从心了。倘若只是简单信息的罗列,例如商品名称列表、新闻标题列表、学生姓名列表等,尚可使用列表框JList予以展示;倘若要求罗列复杂的排列信息,例如商品订单列表、新闻分类列表、学生成绩列表等等,像这种存在多项细节的信息列表就无法通过列表框表达,而应通过Swing的表格类型JTable加以描述。
JTable如其名字所言,它的面貌正是分行分列的表格,每行是一条完整的信息,而每列是信息的各项细节参数。与列表框类似,在构建表格控件之前,也得先初始化作为信息载体的模型对象。同JTable搭档的表格模型名叫DefaultTableModel,它包含的信息分成两部分,一部分是表格的标题信息,另一部分是表格的内容信息,因此需要对表格的标题数组和内容数组分别赋值,再据此构建包含这些信息的表格模型。具体的表格模型构建代码示例如下:

		// 创建表格的标题数组
String[] heads = new String[]{"序号", "套餐名称", "套餐价格"};
// 创建表格的内容数组
Object[][] values = new Object[][] {
{"1", "鱼香肉丝饭", "16"},
{"2", "香菇滑鸡饭", "18"},
{"3", "黑椒牛排饭", "20"},
{"4", "梅菜扣肉饭", "17"},
{"5", "糖醋里脊饭", "19"},
{"6", "红烧排骨饭", "17"},
{"7", "台式卤肉饭", "15"},
};
// 根据内容数组和标题数组,创建默认的表格模型
DefaultTableModel model = new DefaultTableModel(values, heads);

有了表格模型,即可在JTable的构造方法中传入模型对象,从而成功创建表格对象。表格对象的创建代码如下所示:

		JTable table = new JTable(model); // 根据模型创建表格

若要调整表格外观,则可调用表格对象的下列方法来设置:
setFont:设置表格内容的文本字体。
setGridColor:设置网格线的颜色。
setShowGrid:是否显示网格线。默认显示。
setShowHorizontalLines:是否显示水平的分隔线。默认显示。
setShowVerticalLines:是否显示垂直的分隔线。默认显示。
setRowHeight:设置每行的高度。
setEnabled:是否允许编辑。默认允许。
setAutoResizeMode:设置自动调整大小的模式。如需展示水平滚动条,则要设置为关闭自动调整。
以上方法主要针对表格内容的风格样式,除此之外,尚有其它三类属性要另外设置,包括:表格标题的属性、表格内容的对齐方式、表格列的属性。接下来分别展开简要介绍。
1、表格标题的属性
对于表格标题JTableHeader来说,需要先调用表格对象的getTableHeader方法获得标题对象,然后调用标题对象的下列方法调整标题属性:
setFont:设置标题行的文本字体。
setResizingAllowed:是否允许通过拖动改变标题各列的宽度。默认允许。
setReorderingAllowed:是否允许通过拖动改变列与列之间的顺序。默认允许。
下面是调整表格标题相关属性的代码例子:

		JTableHeader header = table.getTableHeader(); // 获得表格的头部(即标题行)
header.setFont(font); // 设置标题行的文本字体
// 是否允许通过拖动改变标题各列的宽度。默认允许
header.setResizingAllowed(false);
// 是否允许通过拖动改变列与列之间的顺序。默认允许
header.setReorderingAllowed(false);

2、表格内容的对齐方式
对于表格内容的对齐方式来说,要先创建表格单元渲染器,并分别设置渲染器在水平与垂直两个方向上的对齐方式,接着调用表格对象的setDefaultRenderer方法,才能完成表格内容的对齐操作。对应的设置代码如下所示:

		// 创建默认的表格单元渲染器
DefaultTableCellRenderer render = new DefaultTableCellRenderer();
// 设置渲染器在水平方向的对齐方式。默认靠左对齐
render.setHorizontalAlignment(JLabel.CENTER);
// 设置渲染器在垂直方向的对齐方式。默认垂直居中
render.setVerticalAlignment(JLabel.CENTER);
// 设置表格的默认渲染器
table.setDefaultRenderer(Object.class, render);

3、表格列的属性
对于表格列的属性来说,需要先调用表格对象的getColumnModel方法获得表格的列模型,之后遍历各列的模型对象,分别设置每列的属性值,比如调用setPreferredWidth方法设置当前列的推荐宽度等等。下面便是调整每列宽度的代码例子:

		// 获得表格的列模型
TableColumnModel columnModel = table.getColumnModel();
for (int i=0; i<columnModel.getColumnCount(); i++) { // 遍历各列模型
// 获取指定位置的列对象
TableColumn column = columnModel.getColumn(i);
// 设置该列的推荐宽度。只有在关闭自动调整的模式之下,设置每列的宽度才会生效
column.setPreferredWidth(100);
}

另外注意,JTable不会自动显示滚动条,若要在表格内容超出范围时呈现滚动条,则需像JTextArea那样创建一个JScrollPane对象来绑定表格对象。默认情况只展示垂直滚动条,若想同时展示水平滚动条,则需关闭表格的自动调整机制,也就是调用表格对象的setAutoResizeMode方法将模式修改为AUTO_RESIZE_OFF。为表格对象添加滚动条的关键代码如下所示:

		// 设置自动调整大小的模式。如需展示水平滚动条,则要设置为关闭自动调整
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// 第一种绑定方式:创建一个滚动条,在构造方法中填入表格对象
JScrollPane scroll = new JScrollPane(table);
// 第二种绑定方式:调用setViewportView方法设置滚动条关联的控件
//scroll.setViewportView(table);
// 第三种绑定方式:通过滚动条对象的视图口岸的add方法添加表格对象
//scroll.getViewport().add(table);
frame.getContentPane().add(scroll); // 在窗口的内容面板上添加包含表格的滚动条

把上述的几处表格调用代码合并到一起,运行合并后的测试代码,区分程序窗口能否装得下整个表格的两种情况,弹出的窗口界面将出现对应的两种效果。其中下面第一张图属于窗口不够大的情况,此时表格右侧出现了垂直滚动条;而第二张图属于窗口足够大的情况,此时界面展示了完整的表格内容,并未出现多余的滚动条。


更多Java技术文章参见《Java开发笔记(序)章节目录

Java开发笔记(一百三十二)Swing的表格的更多相关文章

  1. Java开发笔记(三十二)字符型与整型相互转化

    前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...

  2. Java开发笔记(三十八)利用正则表达式校验字符串

    前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...

  3. Java开发笔记(三十九)日期工具Date

    Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的 ...

  4. Java开发笔记(三十六)字符串的常用方法

    不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可 ...

  5. Java开发笔记(八十二)注解的基本单元——元注解

    Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...

  6. Java开发笔记(三十)大小数BigDecimal

    前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal.如果说设计BigInteger的目的是替代int和long类型,那么设计Bi ...

  7. Java开发笔记(三十四)字符串的赋值及类型转换

    不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...

  8. Java开发笔记(三十五)字符串格式化

    前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...

  9. Java开发笔记(五十二)对象的类型检查

    前面介绍了类的多态性,来自于鸡类的实例chicken,既能用来表达公鸡实例,也能用来表达母鸡实例.可是这导致了一个问题,假如在call方法内部需要手工判断输入参数属于公鸡实例还是母鸡实例,那该如何是好 ...

  10. Java开发笔记(六十二)如何定义函数式接口

    前面介绍了Lambda表达式的用法,从实践中发现它确实极大地方便了开发者,然而不管是匿名内部类还是Lambda表达式,所举的例子都离不开各类数组的排序方法,倘使Lambda表达式仅能用于sort方法, ...

随机推荐

  1. 使用HttpWebRequest和HtmlAgilityPack抓取网页(拒绝乱码,拒绝正则表达式)

    废话不多说, 直接说需求. 公司的网站需要抓取其他网站的文章,但任务没到我这,同事搞了一下午没搞出来.由于刚刚到公司, 想证明下自己,就把活揽过来了.因为以前做过,觉得应该很简单,但当我开始做的时候, ...

  2. Hibernate与MyBatis区别

    Hibernate是当前主流的ORM框架,对数据库结构提供了较为完整的封装. MyBatis同样也是非常流行的ORM框架,主要在于pojo与SQL之间的映射关系. 区别: 1.两者最大的区别 针对简单 ...

  3. HDU 4869 Turn the pokers (2014 Multi-University Training Contest 1)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. iOS-利用AFNetworking(AFN 1.x)-实现文件上传

    转:http://www.kaifazhe.com/ios_school/380067.html 官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseU ...

  5. Entity Framework中查看生成的SQL语句

    Entity Framework 4.0 中是这样的,高版本的跟这个有些差异,不太一样,貌似已经到7了 using (Entities entities = new Entities()) { var ...

  6. 关于MySQL数据库的一些操作

    启动:net start MySQL 关闭:net stop MySQL (也可以用quit:) 登录到MySQL:mysql -u root -p -u : 所要登录的用户名; -p : 告诉服务器 ...

  7. Httpservlet 获取json对象字符窜

    使用的是google 的json转换jar import com.google.gson.JsonObject;import com.google.gson.JsonParser; import or ...

  8. 201521123025《java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 1.1建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 1.2在自己建立的数据库上执行常见SQL语句 ...

  9. Jungle Roads(kruskar)

    Jungle Roads 题目链接;http://poj.org/problem?id=1251 Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

  10. Magento2 常见错误 ----- 定期更新

    1.静态文件有版本号,静态文件不能读取,页面无法显示.如下图: 解决方案:其实URL里的版本号对于magento来说是合法的,这是因为我们缺少了一个文件\pub\static\.htaccess:导致 ...