静态数据表格的样子:

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. INTEL S4500 960G 入手评测

    INTEL S4500 960G 入手评测 简易上个图: CDI AS SSD: CDM: AS SSD AND CDM: -

  2. 你唯一需要的是“Wide Events”,而非“Metrics、Logs、Traces”

    Charity Majors 的这句话可能是对科技行业当前可观察性状态的最好总结--完全的.大规模的混乱.大家都很困惑.什么是 trace?什么是 span?一行日志就是一个 span 吗?如果我有日 ...

  3. ES备份恢复

    1.官网提供snap快照备份恢复 https://www.elastic.co/guide/en/elasticsearch/reference/7.9/snapshot-restore.html 环 ...

  4. window10设置保护眼睛的颜色

    1.调出运行菜单.右击开始键选择运行,或者同时按下键盘上的WIN+R打开运行框,输入 regedit 回车转到注册表编辑器.2.选择第二项 HKEY_CURRENT_USER 点击进入.进入后点击 C ...

  5. Big Exponential Addition

    Big Exponential Addition 给定一非负整数n计算2^n的值,一般而言把 2 乘上 n 次,就能得到答案.然而,当n特别大时,2^n要一次次地乘2可能稍嫌太慢,面对此一巨大问题利用 ...

  6. QQ、支付宝、微信收款码三合一

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` QQ.支付宝.微信收款码三合一 日期:2018-8-24 ...

  7. DotNet Web应用单文件部署系列

    目录 一.    pubxml文件配置 二.    打包wwwroot文件夹 三.    混淆dll文件 四.    csproj文件配置 五.    批处理 六.    Windows服务安装 七. ...

  8. ecnuoj 5042 龟速飞行棋

    5042. 龟速飞行棋 题目链接:5042. 龟速飞行棋 赛中没过,赛后补题时由于题解有些抽象,自己写个题解. 可以发现每次转移的结果只跟后面两个点的胜负状态有关. 不妨设 \(f_{u,a,b}\) ...

  9. Ubuntu20.04之Nvidia驱动安装

    参考:https://blog.csdn.net/xiaokedou_hust/article/details/82187860,实际操作时和该博文有些出入,故作优化. s1.连接wifi,打开终端. ...

  10. django 信号 新增和删除信的合用

    from django.db.models.signals import post_save, post_delete from django.dispatch import receiver fro ...