1           JTable深入浅出

1.1           使用Array构造JTable表格

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.text.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import java.text.*;

import java.beans.*;

import java.awt.BorderLayout;

import java.awt.Rectangle;

import javax.swing.table.DefaultTableModel;

public class SimpleTable extends JFrame {

private DefaultTableModel model;

public SimpleTable() {

try {

String[] colName = {"歌曲名称", "歌手", "是否收藏"};

Object[][] musicList = { {"心似狂潮", "羽泉", new Boolean(true)}, {"心似狂潮",

"羽泉", new Boolean(false)}

};

model = new DefaultTableModel(musicList, colName);

this.jTable1 = new JTable(musicList, colName);

jbInit();

} catch (Exception ex) {

ex.printStackTrace();

}

}

private void jbInit() throws Exception {

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocale(new java.util.Locale("zh", "CN", ""));

this.setTitle("测试JTable");

this.setSize(500, 300);

this.setLocation(150, 150);

this.getContentPane().setLayout(borderLayout1);

jScrollPane1.setBounds(new Rectangle(10, 39, 180, 233));

jButton1.setBounds(new Rectangle(218, 46, 108, 30));

jButton1.setText("添加");

jButton1.addActionListener(new SimpleTable_jButton1_actionAdapter(this));

this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

jPanel1.add(jScrollPane1);

jPanel1.add(jButton1);

jScrollPane1.getViewport().add(jTable1);

jPanel1.setLayout(null);

}

BorderLayout borderLayout1 = new BorderLayout();

JPanel jPanel1 = new JPanel();

JTable jTable1;

JScrollPane jScrollPane1 = new JScrollPane();

JButton jButton1 = new JButton();

public static void main(String[] args) {

SimpleTable st = new SimpleTable();

st.setVisible(true);

}

public void jButton1_actionPerformed(ActionEvent e) {

Object row[]={"朋友", "周华健", new Boolean(false)};

model.addRow(row);

model.fireTableDataChanged();

jTable1.setModel(model);

}

}

class SimpleTable_jButton1_actionAdapter implements ActionListener {

private SimpleTable adaptee;

SimpleTable_jButton1_actionAdapter(SimpleTable adaptee) {

this.adaptee = adaptee;

}

public void actionPerformed(ActionEvent e) {

adaptee.jButton1_actionPerformed(e);

}

}

需要注意的地方:

表格由两部份组成:分别是行标题(Column Header)与行对象(Column Object).利用JTable所提供的getTableHeader()方法取得
行标题。在这个例子中,我们将JTable放在JScrollPane中,这种做法可以将Column Header与Colmn Object完整的显示出来,因为
JScrollPane会自动取得Column Header.但如果文坛读者将上面第15行去掉并修改第16行:
f.getContentPane().add(table,BorderLayout.CENTER);
则运行结果你会发现Column Header不见了。

如果你不想用JScrollPane,要解决这个问题,你必须将程序修改如下:

JTable table=new JTable(p,n);
table.setPreferredScrollableViewportSize(new Dimension(550,30));
f.getContentPane().add(table.getTableHeader(),BorderLayout.NORTH);
f.getContentPane().add(table,BorderLayout.CENTER);

1.2           使用TableModel构造JTable表格

1.3          利用JTable显示数据库表

1.3.1          利用资源文件封装数据库连接类(使用了单例模式)

ConnManager.java

package com.jtable;

/**

*

* <p>Title: HelloWorld之JAVA基础</p>

*

* <p>Description: JAVA基础</p>

*

* <p>Copyright: Copyright (c) 2007</p>

*

* <p>Company: HelloWorld of QYSOFT</p>

*

* @author 商延涛

* @version 1.0

*/

import java.sql.*;

import java.util.*;

public class ConnManager {

private ConnManager() {

}

public static void main(String[] args) {

ConnManager connmanager = new ConnManager();

String name = connmanager.config.getString("dbUsrName");

System.out.println("name");

}

protected static ConnManager instance;

public static ConnManager getInstanceOf() {

if (instance == null) {

return new ConnManager();

}

return instance;

}

public Connection getConnection() {

try {

Class.forName(config.getString("dbDriver"));

return java.sql.DriverManager.getConnection(config.getString(

"dbUrl"),

config.getString("dbUsrName"),

config.getString("dbPassword"));

} catch (ClassNotFoundException ex) {

ex.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

private final String path = "com.jtable.dbconfig";

private ResourceBundle config = java.util.ResourceBundle.getBundle(path,

java.util.Locale.getDefault());

}

1.3.2      连接数据库的DbModel

package com.jtable;

/**

*

* <p>Title: HelloWorld之JAVA基础</p>

*

* <p>Description: JAVA基础</p>

*

* <p>Copyright: Copyright (c) 2007</p>

*

* <p>Company: HelloWorld of QYSOFT</p>

*

* @author 商延涛

* @version 1.0

*/

import javax.swing.table.*;

import javax.swing.JTable;

import java.util.*;

import java.sql.*;

public class DbModel extends AbstractTableModel {

public DbModel(String command) throws SQLException {

this.command = command;

conn = ConnManager.getInstanceOf().getConnection();

statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

rs = statement.executeQuery(command);

rsm = rs.getMetaData();

}

public static void main(String[] args) {

}

public int getRowCount() {

try {

rs.last();

return rs.getRow();

} catch (SQLException ex) {

}

return 0;

}

public int getColumnCount() {

try {

return rsm.getColumnCount();

} catch (SQLException ex) {

return 0;

}

}

public String getColumnName(int c)

{

try {

return rsm.getColumnName(c + 1);

} catch (SQLException ex) {

return null;

}

}

public Object getValueAt(int row, int column) {

try {

rs.absolute(row + 1);

return rs.getObject(column + 1);

} catch (SQLException ex) {

return null;

}

}

public void addRows() throws SQLException {

if (conn == null || rs == null)

return;

rows = new Vector();

while (rs.next()) {

Vector v = new Vector();

for (int i = 0; i <= rsm.getColumnCount(); i++) {

v.add(rs.getString(i + 1));

}

rows.add(v);

}

}

private Vector rows;

private String command;

private Connection conn;

private java.sql.ResultSet rs;

private java.sql.Statement statement;

private ResultSetMetaData rsm;

}

JTable深入浅出相关推荐

  1. 大学谷歌镜像_Google表示您不再需要大学

    大学谷歌镜像 重点 (Top highlight) This week, Google announced new professional career certificates that can ...

  2. java jtable 单元格合并_JTable 单元格合并 【转】

    最近,我为了做一个管理系统,需要用到合并JTable的单元格.查找了很多资料,终于简单的实现了.现在把代码共享出来,希望对大家有用. 本程序主要实现行的合并,列的合并大家可以根据下面的代码修改. CM ...

  3. Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战

    上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度.以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集. Python --深入浅出Apriori关联分析算法(一) 这次 ...

  4. MSDN Webcast“深入浅出ASP.NET AJAX系列”

    课程: ASP.NET AJAX深入浅出系列课程(1):ASP.NET AJAX 概述(3月13日):对于ASP.NET AJAX的大致功能进行概述和演示,通过简单的演示让听众了解到ASP.NET A ...

  5. java显示链表在jtable上输出_jtable的使用精华

    jtable的使用精华 众所皆知,java中没有像c#中的DATAGRID似的数据显示控件,所以不能直接显示数据,只有通过自己定制表格才能显示数据,请个位来讨论一下java中用来显示数据jtable的 ...

  6. 5.3Role和Claims授权「深入浅出ASP.NET Core系列」

    5.3Role和Claims授权「深入浅出ASP.NET Core系列」 原文:5.3Role和Claims授权「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁. ...

  7. 深入浅出开源性能测试工具 Locust (使用篇 1)

    在<[LocustPlus序]漫谈服务端性能测试>中,我对服务端性能测试的基础概念和性能测试工具的基本原理进行了介绍,并且重点推荐了Locust这一款开源性能测试工具.然而,当前在网络上针 ...

  8. 《深入浅出iPhone/iPad开发(第2版)》——在Xcode中建立你的界面

    本节书摘来自异步社区<深入浅出iPhone/iPad开发(第2版)>一书中的在Xcode中建立你的界面,作者 [美]Dan Pilone , Tracey Pilone,更多章节内容可以访 ...

  9. 【组队学习】【35期】深入浅出Pytorch

    深入浅出Pytorch 航路开辟者:李嘉骐.牛志康.刘洋.陈安东 领航员:朱松青 航海士:管柯琴.宋泽山.林旭升 基本信息 开源内容:https://github.com/datawhalechina ...

最新文章

  1. 10 种保护 Spring Boot 应用的绝佳方法
  2. IDEA编辑器多行编辑模式
  3. 2015-2016 Northwestern European Regional Contest (NWERC 2015)
  4. db2数据库日期减一天_DB2 日期时间函数
  5. 关于第十届省赛失败的总结
  6. java中简单的删除添加修改_教你数据库简单实现添加,显示,修改,删除的方法
  7. linux调sqlloader命令,Linux环境SQLLDR导入出现SQLLOADER-553、509错误
  8. 韩寒《三重门》精彩语录2
  9. WordPress站点被挂马,如何预防、检测和应对?
  10. visual studio工程文件介绍
  11. 2021-01-30
  12. 机器学习---推荐系统效果评估NDCG
  13. python交互式程序设计导论答案第五周_学堂在线_计算机科学与Python编程导论_章节测试答案...
  14. 策略模式——多种发票上传实现案例
  15. 记一次个人服务器被nicehash挖矿,排查挖矿程序记录
  16. Kerberos认证原理
  17. 基于 DocumentFormat.OpenXml 操作 Excel (1)-- 初识
  18. Oracle Check约束
  19. Altium Designer 20 如何快速给不规则板框铺铜的方法,超级简单操作!
  20. android开发中使用硬件加速有什么用,Android 开发中使用硬件加速

热门文章

  1. 在Win 11下使用Visual Studio 2019和cygwin编译JBR(Java SDK 17)源码
  2. 网卡介绍——MAC与PHY的关系分析
  3. 【裸金属服务器】安装VMware ESXi
  4. c/c++中sizeof()、strlen()、length()、size()详解和区别
  5. KK模组、同步带模组和线性模组的区别在哪里?
  6. 译书《物联网实战指南》出版 | 新成就:翻译自己的英文简介
  7. 【阿里笔试题】线程篇
  8. time_t c语言 2038,什么是2038问题?
  9. Nginx缓存、静态文件缓存配置
  10. 大白话解释:到底什么是人工智能(AI),小学生都能看懂