如何在Java中使用Table

简介: 如何在Java中使用Table

在Java中,表用于将数据排列成列和行。列是表中水平排列的空间,而行是表中垂直排列的空间。列和行之间的交点称为单元格,用于保存单条数据。

在Java中,开发人员可以使用JTable方法在其应用程序中创建表。JTable是从JComponent类继承的Swing组件。

如何在Java中创建表

要创建表,需要创建JTable类的实例。您需要在其构造函数中为要构造的表提供两个参数(row和column),如以下示例代码段所示:

JTable table = new JTable (row, column);

row和column的值可以由两个整数值组成,如下所示:

JTable table = new JTable (5,3);

上面的语句创建了一个包含5行3列的表。

程序员也可以为每行中的数据提供一个二维数组,为列名提供一个一维数组,而不是为JTable构造函数提供整数。以下是如何使用数组在Java中创建表:

JTable(Object[][] rowData, Object[] columnNames)

下面是一些示例代码,展示了如何用Java创建一个表并填充数据:

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
class Table{
   public static void main(String args[]){
      JFrame frame = new JFrame();
      String[] columnNames = {"姓名", "年龄", "是否学生"};
      Object[][] data = {
       {"陈晨曦", new Integer(5), new Boolean(false)},
       {"阿星", new Integer(3), new Boolean(true)},
       {"阿楠", new Integer(2), new Boolean(false)},
       {"高东",new Integer(20), new Boolean(true)},
       {"阿强", new Integer(10), new Boolean(false)}
   };
    JTable table = new JTable(data, columnNames);
   frame.add(table);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setSize(400,400);
   frame.setLocationRelativeTo(null);  
   frame.setVisible(true);
   }
}

如果在Idea中运行此代码,它将生成以下输出:

当您单击上述任何一个单元格时,您会注意到其中的数据是可编辑的。如果您只是向用户展示数据,这不是一个特别理想的功能。此外,在向用户演示时,所有数据都被视为字符串。

另一个值得关注的问题是,如果您在数据库对象中查询特定值,则必须将所有值复制到数组或向量中。

为了避免这些问题,您可以使用模型创建表格。

如何在Java中使用模型创建表

首先,了解如何处理表数据很重要。所有表(包括使用JTable方法创建的表)都使用表模型来管理其数据。当开发人员没有向JTable的构造函数提供表模型时,将自动为其创建DefaultTableModel的实例。因此,如果需要使用自定义模型,则需要将其提供给JTable构造函数,如以下示例代码所示:

JTable table = new JTable(new MyTableModel());

要定义表模型,程序员需要创建一个扩展AbstractTableModel类的类:

class MyTableModel extends AbstractTableModel{
}

在表模型中,可以包括行和列名的数据,如前面的JTable示例所示。为了确保表模型类是一个具体的类,您需要实现AbstractTableModel的以下三个方法:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

您可以实现更多的方法,但必须确保上面的方法是您实现的方法之一。您可以从官方的Oracle API文档中找到其他方法的描述。

下面的代码示例展示了如何在Java中使用表模型:

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
class TableUsingModel{
   public static void main(String args[]){
      JFrame frame = new JFrame();
      JTable table = new JTable(new MyTableModel());
      frame.add(table);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(400,400);
      frame.setLocationRelativeTo(null);  
      frame.setVisible(true);
   }
}
class MyTableModel extends AbstractTableModel {
   String[] columnNames = {"姓名", "年龄", "位置"};
      Object[][] data = {
       {"陈晨曦", new Integer(25), "北京"},
       {"阿星", new Integer(31), "上海"},
       {"阿楠", new Integer(29), "河南"},
       {"高东",new Integer(20), "浙江"},
       {"阿强", new Integer(18), "福建"}
   };
   public int getRowCount() {
       return data.length;
   }
   public int getColumnCount() {
       return columnNames.length;
   }
   public Object getValueAt(int row, int col) {
       return data[row][col];
   }
}

这将产生以下输出:

这一次,尝试双击任何单元格,你会发现它是不可编辑的。

如何在Java中管理列宽和列高

如果要设置行的高度,可以使用setRowHeight()方法。

JTable table = new JTable(data, columnNames);
table.setRowHeight(80);

上述示例将每行的高度设置为80像素。

要设置列的宽度,可以使用setPreferredWidth()方法。首先,需要创建TableColumnModel类型的列模型。然后,您可以获得所需的特定列,然后设置其首选宽度。下面是一些示例代码,说明如何在Java中设置表的列宽:

TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(2).setPreferredWidth(200);

小结

在本编程教程中,程序员学习了如何使用JTable或表模型在Java中创建表。

上面显示的代码示例将表直接添加到JFrame容器中。但是,您可以将表添加到滚动窗格中,这样当数据超出容器时,用户可以轻松浏览数据。


相关文章
|
Java API 数据库
Java一分钟之-JPA注解:@Entity, @Table, @Id等
【6月更文挑战第14天】Java Persistence API (JPA) 是Java开发中的ORM框架,通过注解简化数据访问层。本文介绍了三个核心注解:`@Entity`标识实体类,`@Table`自定义表名,`@Id`定义主键。易错点包括忘记添加`@Entity`、未正确设置主键。建议使用`@GeneratedValue`和`@Column`细化主键策略和字段映射。正确理解和应用这些注解能提高开发效率和代码质量。
1260 3
flowable项目报错:java.sql.SQLSyntaxErrorException: Table ‘psr_flowable_test.act_ge_property’ doesn’t exi
flowable项目报错:java.sql.SQLSyntaxErrorException: Table ‘psr_flowable_test.act_ge_property’ doesn’t exi
399 0
|
数据库
Caused by: java.sql.SQLException: Table ‘.\***\*****‘ is marked as crashed and should be repaired
Caused by: java.sql.SQLException: Table ‘.\***\*****‘ is marked as crashed and should be repaired
227 0
|
算法 Java 大数据
Lua中table内建排序与C/C++/Java/php/等内排序算法的排序效率比较
Lua这类脚本语言在处理业务逻辑作为配置文件的时候方便省事 但是在大量需要 运算的地方就显得略微不足   按照 Lua内建排序算法 对比C/C++ PHP Java等的快速排序算法进行一下比较。
1362 0
|
Java
Could not determine type for: java.util.Collection, at table: 解决
Could not determine type for: java.util.Collection, at table: 该错误有可能的原因是:  在实体类的属性中的annotation, 要么就全写在属性上,要么就全写在get方法上,不能混用。
1170 0
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
202 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
228 1