java实现简单的表格显示

本文介绍了一个使用Java Swing库创建简单用户界面的应用实例。该应用通过JTable展示了一个包含姓名、性别和年龄等字段的数据表格,并允许用户通过下拉菜单进行编辑。此外,文章还展示了如何使用AbstractTableModel的子类来实现自定义表格模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址 http://blog.chinaunix.net/uid-25422700-id-202241.html

非常感谢原文作者: ruanjwei2011


有时候需要在一张表格里显示数据或者选择一些内容,如些图所示:
主要用到了JFrame显示窗口,JTable类以及继承了AbstractTableModel的一个类。
 
  1. import java.awt.*;
  2. import java.util.*;

  3. import javax.swing.*;
  4. import javax.swing.table.*;

  5. /** 
  6.  * JTable的例子 
  7.  */
  8. public class Test {
  9.     
  10.     private JFrame frame = null;

  11.     private JTable table = null;

  12.     private Table_Model model = null;

  13.     private JScrollPane s_pan = null;

  14.     public Test() {
  15.         frame = new JFrame("Test");
  16.         model = new Table_Model(20);
  17.         table = new JTable(model);
  18.         String[] age = { "21", "22", "23", "24", "25", "26", "27", "28", "29", "30" };
  19.         JComboBox com = new JComboBox(age);
  20.         TableColumnModel tcm = table.getColumnModel();
  21.         tcm.getColumn(2).setCellEditor(new DefaultCellEditor(com)); // 设置某列采用JComboBox组件 


  22.         model.addRow("宋江", true, "30");
  23.         model.addRow("孙二娘", false, "21");
  24.         model.addRow("武松", true, "24");
  25.         
  26.         s_pan = new JScrollPane(table);

  27.         frame.getContentPane().add(s_pan, BorderLayout.CENTER);
  28.         
  29.         frame.setSize(300, 200);
  30.         frame.setVisible(true);

  31.         //model.addRow(2); // 在某处插入一空行 

  32.         //table.updateUI(); // 刷新 


  33.     }

  34.     public static void main(String args[]) {
  35.         new Test();
  36.     }

  37. }

  38. class Table_Model extends AbstractTableModel {
  39.     private static final long serialVersionUID = -3094977414157589758L;

  40.     private Vector content = null;

  41.     private String[] title_name = { "姓名", "性别", "年龄" };

  42.     public Table_Model() {
  43.         content = new Vector();
  44.     }

  45.     public Table_Model(int count) {
  46.         content = new Vector(count);
  47.     }

  48.     /** 
  49.      * 加入一空行 
  50.      * @param row 行号 
  51.      */
  52.     public void addRow(int row) {
  53.         Vector v = new Vector(3);
  54.         v.add(0, null);
  55.         v.add(1, null);
  56.         v.add(2, null);
  57.         content.add(row, v);
  58.     }

  59.     /** 
  60.      * 加入一行内容 
  61.      */
  62.     public void addRow(String name, boolean ***, String age) {
  63.         Vector v = new Vector(3);
  64.         v.add(0, name);
  65.         v.add(1, new Boolean(***)); // JCheckBox是Boolean的默认显示组件,这里仅仅为了看效果,其实用JComboBox显示***更合适 

  66.         v.add(2, age); // 本列在前面已经设置成了JComboBox组件,这里随便输入什么字符串都没关系 

  67.         content.add(v);
  68.     }

  69.     public void removeRow(int row) {
  70.         content.remove(row);
  71.     }

  72.     public boolean isCellEditable(int rowIndex, int columnIndex) {
  73.         if(rowIndex == 2) {
  74.             return false;
  75.         }
  76.         return true;
  77.     }

  78.     public void setValueAt(Object value, int row, int col) {
  79.         ((Vector) content.get(row)).remove(col);
  80.         ((Vector) content.get(row)).add(col, value);
  81.         this.fireTableCellUpdated(row, col);
  82.     }

  83.     public String getColumnName(int col) {
  84.         return title_name[col];
  85.     }

  86.     public int getColumnCount() {
  87.         return title_name.length;
  88.     }

  89.     public int getRowCount() {
  90.         return content.size();
  91.     }

  92.     public Object getValueAt(int row, int col) {
  93.         return ((Vector) content.get(row)).get(col);
  94.     }

  95.     public Class getColumnClass(int col) {
  96.         return getValueAt(0, col).getClass();
  97.     }

  98. }

  99. 2016.10.27 北京天气阴,学习java界面设计,读取Excel表格并在界面显示,加油~~~

<think>好的,我现在需要解决用户的问题:如何用Java实现从SQL文件读取数据并在表格显示。用户提到了几个关键词:Java、读取SQL文件、数据表格显示实现方法。首先,我需要理清楚用户的具体需求是什么。 首先,用户提到的是“读取SQL文件”。这里的SQL文件可能有两种情况:一种是包含SQL语句的文件,比如SELECT语句;另一种是包含数据导出的文件,比如CSV格式或者其他格式的数据文件。但根据用户后续的描述和提供的引用,用户可能更倾向于从SQL查询结果中获取数据,然后展示在表格中,或者直接从SQL文件中读取数据显示。不过,通常SQL文件存储的是数据库的结构或操作语句,而不是数据本身。因此,可能需要先执行SQL文件中的查询语句,从数据库中获取数据,再将结果展示出来。 接下来,用户希望将数据表格显示。在Java中,常见的表格显示可以使用Swing组件如JTable,或者通过Web前端技术如HTML表格,或者使用第三方库如Apache POI生成Excel表格。根据引用中提到的内容,用户可能对Excel处理比较关注,引用[2]、[3]、[4]都提到了Java与Excel的交互,比如导出到Excel或者读取Excel生成SQL。但用户的问题是关于读取SQL文件并在表格显示,所以可能需要结合数据库操作和表格展示。 现在,我需要考虑实现步骤。首先,需要连接到数据库,执行SQL文件中的语句(可能是查询),获取结果集,然后将结果集的数据展示在表格中。或者,如果SQL文件包含的是数据(如INSERT语句),可能需要解析这些语句提取数据,但这比较复杂。更合理的流程是执行SQL查询,从数据库获取数据,然后显示。 所以,步骤可能包括: 1. 读取SQL文件中的SQL语句。 2. 连接数据库,执行这些语句,获取ResultSet。 3. 将ResultSet的数据转换为适合表格显示的结构,比如二维数组或List。 4. 使用Swing的JTable或者生成Excel文件来展示数据。 根据引用[4],用户有读取Excel生成SQL的经验,但现在需要反向操作:执行SQL,获取数据,生成表格。可能需要使用JDBC连接数据库,执行查询,处理结果集,然后用Swing显示或者导出到Excel。 另外,用户提供的引用中有关于将Excel数据转为SQL的例子,比如引用[1]和[4]。这可能意味着用户对数据导入导出比较熟悉,现在需要从SQL获取数据显示。因此,可能需要结合JDBC和Swing组件,或者生成Excel文件。 现在需要确定具体实现方法。比如,使用JDBC连接数据库,执行SQL文件中的查询,然后使用JTable展示数据。或者将数据导出到Excel,然后用Excel显示。不过用户的问题是在表格显示,可能更倾向于直接在Java应用程序中展示,比如GUI界面。 可能的代码结构: - 读取SQL文件内容,获取SQL语句。 - 使用JDBC执行查询,得到ResultSet。 - 将ResultSet转换为二维数组或TableModel。 - 使用JTable显示TableModel。 需要注意异常处理、资源释放(如关闭Connection、Statement、ResultSet),以及不同数据库的驱动配置。 另外,用户可能需要的是从SQL文件直接读取数据,比如CSV格式的数据,但这种情况较少见。所以更可能的是执行SQL查询获取数据,然后显示。 现在检查引用中的内容是否有帮助。引用[2]提到将SQL数据库中的导出到Excel,这可能涉及处理ResultSet并写入Excel。引用[4]提到读取Excel生成SQL,而用户需要的是相反的过程:执行SQL,获取数据显示表格。因此,可能需要参考如何将ResultSet转化为表格数据。 可能的实现步骤详细说明: 1. **读取SQL文件**:使用Java的文件读取类,如BufferedReader,读取SQL文件中的语句。需要注意SQL文件可能包含多行语句,需要正确解析。如果是查询语句(如SELECT),则执行;如果是其他语句,可能需要处理,但用户的需求是获取数据,所以应假设SQL文件包含SELECT语句。 2. **数据库连接**:使用JDBC,加载驱动,建立连接。需要数据库的URL、用户名、密码。 3. **执行SQL查询**:创建Statement或PreparedStatement,执行SQL语句,获取ResultSet。 4. **处理ResultSet**:遍历ResultSet,获取列名和行数据,存储到合适的数据结构,如List<Object[]>,其中第一行是列名。 5. **显示表格**:使用Swing的JFrame和JTable,将数据包装成TableModel,设置到JTable中显示。 或者,如果需要导出到Excel表格,可以使用Apache POI库创建Excel文件,将数据写入,然后打开该文件。但用户的问题可能更倾向于在应用程序中直接显示,而不是生成文件。 代码示例可能如下: 读取SQL文件: ```java String sqlFilePath = "path/to/sqlfile.sql"; StringBuilder sql = new StringBuilder(); try (BufferedReader br = new BufferedReader(new FileReader(sqlFilePath))) { String line; while ((line = br.readLine()) != null) { sql.append(line).append("\n"); } } catch (IOException e) { e.printStackTrace(); } ``` 连接数据库和执行查询: ```java String url = "jdbc:mysql://localhost:3306/mydb"; String user = "user"; String password = "password
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值