静态数据表格的样子:

package cn.dzz;

import javax.swing.*;
import java.awt.*; public class JTable { JFrame jFrame = new JFrame("简单表格"); Object[] titleList = {"姓名", "年龄", "性别"};
Object[][] dataList = {
{"李清照", 29, "女性"},
{"苏格拉底", 56, "男性"},
{"李白", 35, "男性"},
{"弄玉", 18, "女性"},
{"虎头", 2, "男性"},
};
public void init() {
javax.swing.JTable jTable = new javax.swing.JTable(dataList, titleList);
jFrame.add(new
JScrollPane(jTable)); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
} public static void main(String[] args) {
new JTable().init();
} }

程序效果:

简单的表格提供了一些基础功能:

1、可以选中某一条记录

2、可以对显示的记录的某一个字段进行修改

3、可以对列进行移动

然后是对Table的一些设置API:

package cn.dzz;

import javax.swing.*;
import javax.swing.table.TableColumn;
import java.awt.*; public class JTable { JFrame jFrame = new JFrame("简单表格"); Object[] titleList = {"姓名", "年龄", "性别"};
Object[][] dataList = {
{"李清照", 29, "女性"},
{"苏格拉底", 56, "男性"},
{"李白", 35, "男性"},
{"弄玉", 18, "女性"},
{"虎头", 2, "男性"},
}; public void init() {
javax.swing.JTable jTable = new javax.swing.JTable(dataList, titleList); // 默认的选择模式
jTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// 设置列宽
TableColumn jTableColumn1 = jTable.getColumn(titleList[0]);
jTableColumn1.setMinWidth(40);
TableColumn jTableColumn3 = jTable.getColumn(titleList[2]);
jTableColumn3.setMaxWidth(50
); jFrame.add(new JScrollPane(jTable)); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
} public static void main(String[] args) {
new JTable().init();
} }

使用TableModel来代替二维数组渲染数据:

可以自定义实现抽象表格模型类,监听获取选中的单元格:

package cn.dzz;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector; public class TableModelDemo { JFrame jFrame = new JFrame("tableModel");
Object[] titleList = {"姓名", "年龄", "性别"};
Object[][] dataList = {
{"李清照", 29, "女性"},
{"苏格拉底", 56, "男性"},
{"李白", 35, "男性"},
{"弄玉", 18, "女性"},
{"虎头", 2, "男性"},
};
private Vector titleVector = new Vector();
private Vector<Vector> dataVector = new Vector();
public void init() { for (int i = 0; i < titleList.length; i++) {
titleVector.add(titleList[i]);
} for (int i = 0; i < dataList.length; i++) {
Vector t = new Vector();
for (int j = 0; j < dataList[i].length; j++) {
t.add(dataList[i][j]);
}
dataVector.add(t);
}
// javax.swing.JTable jTable = new javax.swing.JTable(dataVector, titleVector);

MyTableModel myTableModel = new MyTableModel();
javax.swing.JTable jTable = new javax.swing.JTable(myTableModel);
jFrame.add(new JScrollPane(jTable));
// 选中监听
JButton jButton = new JButton("获取选中的行的数据");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedColumn = jTable.getSelectedColumn();
int selectedRow = jTable.getSelectedRow();
System.out.println("当前选中行的索引 " + selectedRow);
System.out.println("当前选中列的索引 " + selectedColumn);
Object valueAt = myTableModel.getValueAt(selectedRow, selectedColumn);
System.out.println("当前选中行的第一个单元格的内容为:" +
valueAt);
}
});

jFrame.add(jButton, BorderLayout.SOUTH); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
} public static void main(String[] args) {
new TableModelDemo().init();
} private class MyTableModel extends AbstractTableModel {
@Override
public int getRowCount() {
return dataVector.size();
} @Override
public int getColumnCount() {
return titleVector.size();
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
return dataVector.get(rowIndex).get(columnIndex);
} @Override
public String getColumnName(int column) {
return titleVector.get(column).toString();
} @Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
} }

Java也提供默认的TableModel可使用,DefaultTableModel

加行,加列,删除行,选中就都有了

package cn.dzz;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector; public class TableModelDemo { JFrame jFrame = new JFrame("tableModel");
Object[] titleList = {"姓名", "年龄", "性别"};
Object[][] dataList = {
{"李清照", 29, "女性"},
{"苏格拉底", 56, "男性"},
{"李白", 35, "男性"},
{"弄玉", 18, "女性"},
{"虎头", 2, "男性"},
};
private Vector titleVector = new Vector();
private Vector<Vector> dataVector = new Vector(); public void init() { for (int i = 0; i < titleList.length; i++) {
titleVector.add(titleList[i]);
} for (int i = 0; i < dataList.length; i++) {
Vector t = new Vector();
for (int j = 0; j < dataList[i].length; j++) {
t.add(dataList[i][j]);
}
dataVector.add(t);
} // javax.swing.JTable jTable = new javax.swing.JTable(dataVector, titleVector); MyTableModel myTableModel = new MyTableModel();
//javax.swing.JTable jTable = new javax.swing.JTable(myTableModel); DefaultTableModel tableModel = new DefaultTableModel(dataVector, titleVector);
javax.swing.JTable jTable = new javax.swing.JTable(tableModel);
jFrame.add(new JScrollPane(jTable)); // 选中监听
JButton jButton = new JButton("获取选中的行的数据");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedColumn = jTable.getSelectedColumn();
int selectedRow = jTable.getSelectedRow();
System.out.println("当前选中行的索引 " + selectedRow);
System.out.println("当前选中列的索引 " + selectedColumn);
Object valueAt = myTableModel.getValueAt(selectedRow, selectedColumn);
System.out.println("当前选中行的第一个单元格的内容为:" + valueAt);
}
}); JButton btnForAddNewRow = new JButton("新加一行");
JButton btnForAddNewColumn = new JButton("新加一列");
JButton btnForDelOneRow = new JButton("删除一行"); btnForAddNewRow.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tableModel.addRow(new Object[]{"柳岩", 18, "女性"});
}
}); btnForAddNewColumn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tableModel.addColumn("职业");
}
}); btnForDelOneRow.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedRow = jTable.getSelectedRow();
tableModel.removeRow(selectedRow);
}
});
// jFrame.add(jButton, BorderLayout.SOUTH);
JPanel jPanel = new JPanel();
jPanel.add(jButton);
jPanel.add(btnForAddNewRow);
jPanel.add(btnForAddNewColumn);
jPanel.add(btnForDelOneRow); jFrame.add(jPanel, BorderLayout.SOUTH);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
} public static void main(String[] args) {
new TableModelDemo().init();
} private class MyTableModel extends AbstractTableModel {
@Override
public int getRowCount() {
return dataVector.size();
} @Override
public int getColumnCount() {
return titleVector.size();
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
return dataVector.get(rowIndex).get(columnIndex);
} @Override
public String getColumnName(int column) {
return titleVector.get(column).toString();
} @Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
} }

【Java-GUI】11 Swing06 JTable的更多相关文章

  1. 【Java基础】11、java方法中只有值传递,没有引用传递

    public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...

  2. 再见!【JAVA GUI】

    1.GUI概述 图形用户界面(Graphical User Interface,简称 GUI,又 称图形用户接口)是指采用图形方式显示的计算机操作用户界面. java作为一种面向对象的程序设计语言,它 ...

  3. 【Java GUI】Java GUI基金会

    AWT和Swing Swing是个AWT改进和扩展. 书写GUI规划.Swing和AWT曾效力.他们共存 Java基础类(JFC)于. 虽然AWT和Swing都提供了构造图形界面元素的类.但它们的虫药 ...

  4. 【JAVA基础】11 Scanner类

    1. Scanner的概述 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器. Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配.然后可以使用不同的 ne ...

  5. 【Java GUI】Java面板基础:JPanel

    有两个面板,常见的面板(JPanel)和滚动面板(JScrollPane) Jpanel 面板是一种常见的容器,JPanel的作用是实现接口层次结构,面放入一些组件.也能够在上面绘画,将放有组件和有画 ...

  6. 【java设计模式】-00目录

    开篇 [java设计模式]-01设计模式简介 创建型模式: [java设计模式]-02工厂模式(Factory Pattern) [java设计模式]-03抽象工厂模式(Abstract Factor ...

  7. 【线性表基础】基于线性表的简单算法【Java版】

    本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeR ...

  8. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  9. 【Java基础】4、java中的内部类

    内部类的分类:常规内部类.静态内部类.私有内部类.局部内部类.匿名内部类. 实例1:常规内部类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  10. 【Java面试】1、基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充. 源码分享:https: ...

随机推荐

  1. 《python核心编程《第二版》》笔记章节索引

    本文章作为我的其它一系列关于<python核心编程<第二版>>的笔记的文章索引. 第一章:Python-快速入门:https://www.cnblogs.com/mrlayfo ...

  2. 高德面试:为什么Map不能插入null?

    在 Java 中,Map 是属于 java.util 包下的一个接口(interface),所以说"为什么 Map 不能插入 null?"这个问题本身问的不严谨.Map 部分类关系 ...

  3. Node安装mongodb

    Node操作mongodb Mongoose介绍 网址:http://www.mongoosejs.net/docs/index.html mongoose是Node环境下异步操作mongodb数据库 ...

  4. 你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?

    首先,将问题提交到缺陷管理库里面进行备案. 然后,要获取判断的依据和标准: 根据需求说明书.产品说明.设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据: 如果没有文档依据, ...

  5. Chapter1 p2 vec

    在上一小节中,我们完成了对BMPImage类的构建,成功实现了我们这个小小引擎的图像输出功能. 你已经完成了图像输出了,接着就开始路径追踪吧... 开个玩笑XD 对于曾经学习过一些图形学经典教材的人来 ...

  6. 猪齿鱼数智化开发管理平台 1.3.0-alpha发布,欢迎立即体验!

    ​​ 2022年3月18日,数智化开发管理平台猪齿鱼 Choerodon发布 V1.3-alpha版本,多项功能新增或优化,多管齐下,全面提升团队工作效能!通过提供体系化方法论和协作.测试.DevOp ...

  7. idea文件的编码设置,解决中文编码不一致问题,对RSA验签及文本比较的测试方法 -Dfile.encoding=UTF-8

    String reqContent = "abcdef中文"; //new String("abcdefee".getBytes()," GBK &q ...

  8. Mybatis、Mybatis Generator、Mybatis-Plus、Mybatis Plus Generator

    1.介绍 Mybatis Mybatis 是操作数据库的框架:提供一种Mapper类,支持用Java代码对数据库进行增删改查. 缺点:需要先在xml中写好SQL语句: Mybatis Generato ...

  9. typroa破解

    Typora 一款 Markdown 编辑器和阅读器 风格极简 / 多种主题 / 支持 macOS,Windows 及 Linux 实时预览 / 图片与文字 / 代码块 / 数学公式 / 图表 目录大 ...

  10. Vim的移动大法

    Vim的移动大法 移动光标的按键 "h" 向左移动 "j"向下移动 "k"向上移动 "l"向右移动 在单词之间移动 注: ...