当前位置: 七九推 > IT编程>开发语言>Java > Java开发笔记(一百三十二)Swing的表格

Java开发笔记(一百三十二)Swing的表格

2023年01月24日 Java 我要评论
前面介绍了程序界面上一些简单控件的组合排列,它们用来表达相互之间联系较弱的信息倒还凑合,要是用来表达关联性较强的聚合信息就力不从心了。倘若只是简单信息的罗列,例如商品名称列表、新闻标题列表、学生姓名列

前面介绍了程序界面上一些简单控件的组合排列,它们用来表达相互之间联系较弱的信息倒还凑合,要是用来表达关联性较强的聚合信息就力不从心了。倘若只是简单信息的罗列,例如商品名称列表、新闻标题列表、学生姓名列表等,尚可使用列表框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开发笔记(序)章节目录

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • 过滤器模式(Filter Pattern)

    过滤器模式(Filter Pattern)

    过滤器模式:过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组... [阅读全文]
  • java web实现邮箱激活与忘记密码

    java web实现邮箱激活与忘记密码

    由于在项目中要实现用户注册的邮箱激活以及忘记密码重置密码功能,所以通过查阅资料做了一个简单的设计和实现。邮箱激活背景:几乎每个网站或论坛之类的用户注册后都需要通... [阅读全文]
  • Spring MVC的注解二

    Spring MVC的注解二

    概述spring从2.5版本开始引入注解,虽然版本不断变化,但是注解的特性一直被延续下来并不断进行扩展,这里就来记录一下spring mvc中常用的注解,本文承... [阅读全文]
  • Spring框架入门(一)

    Spring框架入门(一)

    spring概述spring是什么spring是分层的java se/ee应用full-stack轻量级框架,以ioc(inverse of control,反... [阅读全文]
  • selenium高效应对Web页面元素刷新的实例讲解

    selenium高效应对Web页面元素刷新的实例讲解

    当我们在页面上进行selenium.type()或者selenium.click()操作的时候,往往需要需要等待一个元素的出现,对于一般的网页,当我们进入一个新... [阅读全文]
  • 多线程通信的三大法器,你真的会用吗?

    多线程通信的三大法器,你真的会用吗?

    wait, notify, notifyall 是多线程之间通信最重要的 3 个方法,今天,栈长给大家普及一下它们的知识要点及应用实战。定义wait:让持有该对... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2023  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com