JTable是将数据以表格的形式显示给用户看的一种组件,它包括行和列,其中每列代表一种属性,例如:学号,姓名,成绩等等。而每行代表的是一个实体,例如一个学生。在JTable中,默认情况下列会平均分配父容器的宽度,你可以通过鼠标改变列的宽度,还可以交换列的排列顺序,当然,这些都可以通过代码进行限定和修改。一下就进入正题,介绍JTable的一些构造函数,JTable有许多构造函数,具体的请查看API文档,这里只对部分构造函数和功能进行介绍:

1.JTable(Object[][] rowData,Object[] columnNames) :  构造一个 JTable 来显示二维数组rowData 中的值,其列名称为 columnNames

下面是例子的源代码:

[java] view plaincopy
  1. public class JTableTest extends JFrame
  2. {
  3. public JTableTest()
  4. {
  5. intiComponent();
  6. }
  7. /**
  8. * 初始化窗体组件
  9. */
  10. private void intiComponent()
  11. {
  12. /*
  13. * 设置JTable的列名
  14. */
  15. String[] columnNames =
  16. { "姓名", "学号", "性别", "工期", "学院", "学校" };
  17. /*
  18. * 初始化JTable里面各项的值,设置两个一模一样的实体"赵匡义"学生。
  19. */
  20. Object[][] obj = new Object[2][6];
  21. for (int i = 0; i < 2; i++)
  22. {
  23. for (int j = 0; j < 6; j++)
  24. {
  25. switch (j)
  26. {
  27. case 0:
  28. obj[i][j] = "赵匡义";
  29. break;
  30. case 1:
  31. obj[i][j] = "123215";
  32. break;
  33. case 2:
  34. obj[i][j] = "男";
  35. break;
  36. case 3:
  37. obj[i][j] = "两年";
  38. break;
  39. case 4:
  40. obj[i][j] = "计算机技术学院";
  41. break;
  42. case 5:
  43. obj[i][j] = "北京理工大学";
  44. break;
  45. }
  46. }
  47. }
  48. /*
  49. * JTable的其中一种构造方法
  50. */
  51. JTable table = new JTable(obj, columnNames);
  52. /*
  53. * 设置JTable的列默认的宽度和高度
  54. */
  55. TableColumn column = null;
  56. int colunms = table.getColumnCount();
  57. for(int i = 0; i < colunms; i++)
  58. {
  59. column = table.getColumnModel().getColumn(i);
  60. /*将每一列的默认宽度设置为100*/
  61. column.setPreferredWidth(100);
  62. }
  63. /*
  64. * 设置JTable自动调整列表的状态,此处设置为关闭
  65. */
  66. table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  67. /*用JScrollPane装载JTable,这样超出范围的列就可以通过滚动条来查看*/
  68. JScrollPane scroll = new JScrollPane(table);
  69. scroll.setSize(300, 200);
  70. add(scroll);
  71. this.setVisible(true);
  72. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  73. this.pack();
  74. }
  75. public static void main(String[] args)
  76. {
  77. new JTableTest();
  78. }
  79. }

界面如下:

以上这种构造方法,看起来没有用到TableModel,其实是系统帮我们自动生成了一个DefaultModel的实例,DefaultModel是TableModel的子类。每个JTabel都会有一个TableModel,这个TabelModel管理表格的数据,下面就来介绍定义自己的TableModel来实现自己的JTable.

2. JTable(TableModel dm) : 构造一个JTable,使用数据模型dm、默认的列模型和默认的选择模型对其进行初始化。

下面是例子的源代码:

[java] view plaincopy
  1. public class JTableTest extends JFrame
  2. {
  3. public JTableTest()
  4. {
  5. intiComponent();
  6. }
  7. /**
  8. * 初始化窗体组件
  9. */
  10. private void intiComponent()
  11. {
  12. JTable table = new JTable(new MyTableModel());
  13. /* 用JScrollPane装载JTable,这样超出范围的列就可以通过滚动条来查看 */
  14. JScrollPane scroll = new JScrollPane(table);
  15. add(scroll);
  16. this.setVisible(true);
  17. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  18. this.pack();
  19. }
  20. private class MyTableModel extends AbstractTableModel
  21. {
  22. /*
  23. * 这里和刚才一样,定义列名和每个数据的值
  24. */
  25. String[] columnNames =
  26. { "姓名", "学号", "年龄", "成绩", "选择" };
  27. Object[][] data = new Object[2][5];
  28. /**
  29. * 构造方法,初始化二维数组data对应的数据
  30. */
  31. public MyTableModel()
  32. {
  33. for (int i = 0; i < 2; i++)
  34. {
  35. for (int j = 0; j < 5; j++)
  36. {
  37. if (0 == i)
  38. {
  39. switch (j)
  40. {
  41. case 0:
  42. data[i][j] = "邓光侨";
  43. break;
  44. case 1:
  45. data[i][j] = "2008415";
  46. break;
  47. case 2:
  48. data[i][j] = "18";
  49. break;
  50. case 3:
  51. data[i][j] = "90";
  52. break;
  53. case 4:
  54. data[i][j] = new Boolean(false);
  55. break;
  56. }
  57. }
  58. if (1 == i)
  59. {
  60. switch (j)
  61. {
  62. case 0:
  63. data[i][j] = "李洁璇";
  64. break;
  65. case 1:
  66. data[i][j] = "2008321";
  67. break;
  68. case 2:
  69. data[i][j] = "18";
  70. break;
  71. case 3:
  72. data[i][j] = "63";
  73. break;
  74. case 4:
  75. data[i][j] = new Boolean(false);
  76. break;
  77. }
  78. }
  79. }
  80. }
  81. }
  82. // 以下为继承自AbstractTableModle的方法,可以自定义
  83. /**
  84. * 得到列名
  85. */
  86. @Override
  87. public String getColumnName(int column)
  88. {
  89. return columnNames[column];
  90. }
  91. /**
  92. * 重写方法,得到表格列数
  93. */
  94. @Override
  95. public int getColumnCount()
  96. {
  97. return columnNames.length;
  98. }
  99. /**
  100. * 得到表格行数
  101. */
  102. @Override
  103. public int getRowCount()
  104. {
  105. return data.length;
  106. }
  107. /**
  108. * 得到数据所对应对象
  109. */
  110. @Override
  111. public Object getValueAt(int rowIndex, int columnIndex)
  112. {
  113. return data[rowIndex][columnIndex];
  114. }
  115. /**
  116. * 得到指定列的数据类型
  117. */
  118. @Override
  119. public Class<?> getColumnClass(int columnIndex)
  120. {
  121. return data[0][columnIndex].getClass();
  122. }
  123. /**
  124. * 指定设置数据单元是否可编辑.这里设置"姓名","学号"不可编辑
  125. */
  126. @Override
  127. public boolean isCellEditable(int rowIndex, int columnIndex)
  128. {
  129. if (columnIndex < 2)
  130. return false;
  131. else
  132. return true;
  133. }
  134. /**
  135. * 如果数据单元为可编辑,则将编辑后的值替换原来的值
  136. */
  137. @Override
  138. public void setValueAt(Object aValue, int rowIndex, int columnIndex)
  139. {
  140. data[rowIndex][columnIndex] = aValue;
  141. /*通知监听器数据单元数据已经改变*/
  142. fireTableCellUpdated(rowIndex, columnIndex);
  143. }
  144. }
  145. public static void main(String[] args)
  146. {
  147. new JTableTest();
  148. }
  149. }

下面是程序界面:

  这里要指出的是每个数据单元的都有个cell renderer根据其数据类型将数据进行绘画显示出来。默认情况下boolean类型对应的是CheckBox对象,Object类型是将对象的字符显示出来,ImageIcon是将图片以lable形式显示出来等等.具体的可以查看API文档.

java GUI界面之JTable详解相关推荐

  1. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  2. 转:Java 7 种阻塞队列详解

    转自: Java 7 种阻塞队列详解 - 云+社区 - 腾讯云队列(Queue)是一种经常使用的集合.Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表. ...

  3. android-短信验证功能,Android实现获取短信验证码的功能以及自定义GUI短信验证详解...

    <Android实现获取短信验证码的功能以及自定义GUI短信验证详解>由会员分享,可在线阅读,更多相关<Android实现获取短信验证码的功能以及自定义GUI短信验证详解(8页珍藏版 ...

  4. Java包(package)详解

    Java包(package)详解 在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生.有时候,开发人员还可能需 ...

  5. java基础与案例开发详解 pdf下载_Java基础与案例开发详解(张孝祥) pdf_IT教程网...

    资源名称:Java基础与案例开发详解(张孝祥) pdf 第1.2和3章介绍Java环境的安装配置,Java程序的开发过程和Java语言的基础语法. 第4章介绍数组和常用算法的相关知识. 第5章和6章介 ...

  6. java线程池ThreadPoolExecutor类详解

    线程池有哪些状态 1. RUNNING:  接收新的任务,且执行等待队列中的任务 Accept new tasks and process queued tasks  2. SHUTDOWN: 不接收 ...

  7. Java开发常见面试题详解(JVM)_2

    Java开发常见面试题详解(JVM)_2 JVM 问题 详解 JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots link 你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认 ...

  8. Java并发编程最佳实例详解系列

    Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...

  9. python编程基础:python 实现GUI(图形用户界面)编程详解

    今天小编就为大家分享一篇python 实现GUI(图形用户界面)编程详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python支持多种图形界面的第三方库,包括: wxWidge ...

最新文章

  1. 总结C#保留小数位数
  2. Ruby之Rspec的报错解决
  3. Kubernetes 落地案例|使用 Kubernetes 重新部署全球最大的教育公司
  4. 解决IndexClosedException: closed
  5. SSH生成rsa密钥对
  6. VC使用HTTP协议下载文件
  7. 并发编程—Volatile关键字
  8. 程序员面试金典 - 面试题 04.06. 后继者(循环中序遍历)
  9. AI 人工智能学习经典书单
  10. 力扣题目——235. 二叉搜索树的最近公共祖先
  11. Head First 设计模式 —— 工厂模式与工厂方法
  12. 微信提现php 该怎么加密,关于php 调用接口 微信云支付 HmacSha256 加密 request_content...
  13. css控制广告位置,CSS固定定位实现右下角可关闭广告
  14. 2020年中国共享电单车市场现状与格局分析,青桔、哈啰和美团占据市场主要份额「图」
  15. DH-SQL(学生信息表-课程表-选课表)
  16. 周末了,看,首富出门遛狗。
  17. H5手机休闲游戏开发商有哪些?带你看遍北京游戏研发公司
  18. [php fqm说明]以及nginx和apache的一些说明
  19. asp 更新 mysql数据库_asp update mysql数据库
  20. 到底咋做,才能业务财务真的一体化

热门文章

  1. hdu1505 暴力或dp优化
  2. 【数字信号处理】基本序列 ( 基本序列列举 | 单位脉冲序列 | 单位脉冲函数 | 离散单位脉冲函数 | 单位脉冲函数 与 离散单位脉冲函数的区别 )
  3. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Mixin 注解进行方法注入 | Mixin 混合多个类优先级分析 )
  4. 【Android 文件管理】分区存储 ( 修改与删除图片文件 )
  5. 【MATLAB】基本绘图 ( 线条设定 | 线条设定组合 )
  6. 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)
  7. 《剑指offer》第四十九题(丑数)
  8. 1.DBCP和CP30的区别
  9. jquery 数组的调用
  10. CentOS6.8 安装/升级Python2.7.x,并安装最新setuptools、pip、fabric程序总结