静态数据表格的样子:

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. GlaDS缘起

    ​  题目:Modeling channelized and distributed subglacial drainage in two dimensions 近年来,冰盖表面融化与冰盖动态之间的联 ...

  2. 燕千云ITAM:解锁数字化时代下企业竞争新优势

    数字化时代下,企业的IT资产管理(ITAM)尤为关键.企业通过在成长的每个阶段实施有效的IT资产管理策略,以确保资源的最优化利用和风险的有效控制,并在竞争激烈的市场环境中保持优势.然而实际实践中,企业 ...

  3. HBase2版本的修复工具HBCK2

    一.hbase出现的问题 1.元数据表hbase:namespace 不在线 导致查询数据时 master is initing 2.一些表的region一直处于opening状态 3.region ...

  4. 基于 .NET CORE + VUE 前后端项目打包,实现批处理安装,一键部署

    2023年7月18日 目前基于已完成了基于WPF界面的全自动部署小工具 自动判断相关.net core环境和依赖,自动部署mysql数据库,自动部署前后端web服务的功能. 有疑问的可以直接评论. - ...

  5. nginx 反向代理(proxy)与负载均衡(upstream)应用实践

    集群介绍 集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向 ...

  6. 理解shell

    理解shell shell不单单是CLI,而是一种复杂的交互式程序. 1. shell的类型 当你登录系统时,系统启动什么样的shell程序取决于你的个人用户配置.在/etc/passwd文件中,用户 ...

  7. Rougamo、Fody 实现静态Aop

    最近在看项目,看到别人使用Rougamo框架,好奇花了点时间仔细研究了,在这里记录一下. 0. 静态编织 Aop 首先,我们先了解什么是Aop? Aop 是指面向切面编程 (Aspect Orient ...

  8. 2.SpringBoot快速上手

    2.SpringBoot快速上手 SpringBoot介绍 javaEE的开发经常会涉及到3个框架Spring ,SpringMVC,MyBatis.但是这三个框架配置极其繁琐,有大量的xml文件,s ...

  9. Java项目静态资源映射的几种方式

    一.Springboot 1.webjars方式 我们之前使用Maven构建一个Web项目时,在main目录下会存在一个webapp的目录,我们以前都是将所有的页面或静态资源导在这个目录下,但现在使用 ...

  10. P2918

    [USACO08NOV]Buying Hay S 题意描述 约翰的干草库存已经告罄,他打算为奶牛们采购 H(1 \leq H \leq 50000)H(1≤H≤50000) 磅干草. 他知道 N(1 ...