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

转载于:https://www.cnblogs.com/pinlantu/p/11294485.html

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

  1. Android开发笔记(三十二)文件基础操作

    File类 File类是java中的文件操作工具类,它的常用方法如下: File构造函数 : 根据文件路径构造File对象 delete : 删除文件 exists : 判断文件是否存在 getNam ...

  2. java把字符转化为整型_Java开发笔记(三十二)字符型与整型相互转化

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

  3. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  4. 【零基础学Java】—Java 日期时间(三十二)

    [零基础学Java]-Java 日期时间(三十二) DateFormat 是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间. 日期/时间格式化子类(如SimpleDateFor ...

  5. Android开发笔记(六十二)HTTP数据格式的解析

    json解析 android有两种主流的json解析方案,一种是sdk自带的由Google提供的json(包名前缀为org.json),另一种是Alibaba提供的第三方jar包fastjson(包名 ...

  6. Java开发笔记(五十)几种开放性修饰符

    前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...

  7. Android开发笔记(五十二)通知推送Notification

    PendingIntent 准备工作复习一下PendingIntent,前面的博文< Android开发笔记(五十)定时器AlarmManager>已经提到了它.PendingIntent ...

  8. Java开发笔记(八十六)通过缓冲区读写文件

    前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作"字符流I/O",其中字母I代表输 ...

  9. Java学习笔记(三十五)

    在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度.现在将跟着视频做的笔记进行整理.本篇博客是整理Java知识点的第三十五 ...

  10. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

最新文章

  1. ant PageHeaderWrapper 返回上一页
  2. 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED
  3. python httpstr find_Python爬虫 | BeautifulSoup使用
  4. 安卓修改动画效果--动画差值器TimeInterpolator
  5. lambda 函数式编程_Java 8 Lambda表达式的函数式编程– Monads
  6. graphql入门_GraphQL入门指南
  7. java新手的第一个小东西,或许小东西都算不上=。 =
  8. phar打包thinkphp5项目
  9. ADB常用命令及其用法大全
  10. android imagebutton 动画,android – ImageButton Icon Tint基于State
  11. ACDSee 10中文版+注册码
  12. Access入门简单教程
  13. JAVA HD japan_电竞小金刚:优派VX2778-hd-PRO
  14. 深圳首届“金口碑”颁奖典礼暨诚信者公益基金启动仪式在深举办
  15. win10家庭版如何开启本地组策略
  16. 7-23 清点代码库(简洁AC+多方法)
  17. yocto 基本概念
  18. android 高德地图设置不能旋转_地图导航哪家强?
  19. Mark一个关于Thymeleaf 使用th:field属性与对象属性绑定的小问题
  20. VS2019 配色_设计师必看|这10个网站可以帮你更快做好配色

热门文章

  1. php的链接查询,php – 使用指向另一个查询的链接运行查询.
  2. php mysql网站入侵_第一篇:PHP+MySQL injection攻击:浅谈网页安全
  3. JQuery 实现表格数据行上移与下移效果
  4. mysql自动去重_关于mysql自联去重的一些记录
  5. 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
  6. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_9_字节输入流读取字节数据...
  7. 【CS Round #46 (Div. 1.5) B】Letters Deque
  8. 截取一段字符串中,两个指定字符串中间的字符串
  9. 【工匠大道】博客园小技巧
  10. 团队二阶段冲刺个人工作总结7