jdk\demo\jfc\TableExample\
看看这个例子就差不多了
----------------------------------------
import java.util.Vector;
import java.sql.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.event.TableModelEvent;
public class JDBCAdapter extends AbstractTableModel {
Connection connection;
Statement statement;
ResultSet resultSet;
String[] columnNames = {};
Vector rows = new Vector();
ResultSetMetaData metaData;
public JDBCAdapter(String url, String driverName,
String user, String passwd) {
try {
Class.forName(driverName);
System.out.println("Opening db connection");
connection = DriverManager.getConnection(url, user, passwd);
statement = connection.createStatement();
}
catch (ClassNotFoundException ex) {
System.err.println("Cannot find the database driver classes.");
System.err.println(ex);
}
catch (SQLException ex) {
System.err.println("Cannot connect to this database.");
System.err.println(ex);
}
}
public void executeQuery(String query) {
if (connection == null || statement == null) {
System.err.println("There is no database to execute the query.");
return;
}
try {
resultSet = statement.executeQuery(query);
metaData = resultSet.getMetaData();
int numberOfColumns = metaData.getColumnCount();
columnNames = new String[numberOfColumns];
// Get the column names and cache them.
// Then we can close the connection.
for(int column = 0; column < numberOfColumns; column++) {
columnNames[column] = metaData.getColumnLabel(column+1);
}
// Get all rows.
rows = new Vector();
while (resultSet.next()) {
Vector newRow = new Vector();
for (int i = 1; i <= getColumnCount(); i++) {
newRow.addElement(resultSet.getObject(i));
}
rows.addElement(newRow);
}
// close(); Need to copy the metaData, bug in jdbc:odbc driver.
fireTableChanged(null); // Tell the listeners a new table has arrived.
}
catch (SQLException ex) {
System.err.println(ex);
}
}
public void close() throws SQLException {
System.out.println("Closing db connection");
resultSet.close();
statement.close();
connection.close();
}
protected void finalize() throws Throwable {
close();
super.finalize();
}
//////////////////////////////////////////////////////////////////////////
//
// Implementation of the TableModel Interface
//
//////////////////////////////////////////////////////////////////////////
// MetaData
public String getColumnName(int column) {
if (columnNames[column] != null) {
return columnNames[column];
} else {
return "";
}
}
public Class getColumnClass(int column) {
int type;
try {
type = metaData.getColumnType(column+1);
}
catch (SQLException e) {
return super.getColumnClass(column);
}
switch(type) {
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR:
return String.class;
case Types.BIT:
return Boolean.class;
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
return Integer.class;
case Types.BIGINT:
return Long.class;
case Types.FLOAT:
case Types.DOUBLE:
return Double.class;
case Types.DATE:
return java.sql.Date.class;
default:
return Object.class;
}
}
public boolean isCellEditable(int row, int column) {
try {
return metaData.isWritable(column+1);
}
catch (SQLException e) {
return false;
}
}
public int getColumnCount() {
return columnNames.length;
}
// Data methods
public int getRowCount() {
return rows.size();
}
public Object getValueAt(int aRow, int aColumn) {
Vector row = (Vector)rows.elementAt(aRow);
return row.elementAt(aColumn);
}
public String dbRepresentation(int column, Object value) {
int type;
if (value == null) {
return "null";
}
try {
type = metaData.getColumnType(column+1);
}
catch (SQLException e) {
return value.toString();
}
switch(type) {
case Types.INTEGER:
case Types.DOUBLE:
case Types.FLOAT:
return value.toString();
case Types.BIT:
return ((Boolean)value).booleanValue() ? "1" : "0";
case Types.DATE:
return value.toString(); // This will need some conversion.
default:
return "\""+value.toString()+"\"";
}
}
public void setValueAt(Object value, int row, int column) {
try {
String tableName = metaData.getTableName(column+1);
// Some of the drivers seem buggy, tableName should not be null.
if (tableName == null) {
System.out.println("Table name returned null.");
}
String columnName = getColumnName(column);
String query =
"update "+tableName+
" set "+columnName+" = "+dbRepresentation(column, value)+
" where ";
// We don't have a model of the schema so we don't know the
// primary keys or which columns to lock on. To demonstrate
// that editing is possible, we'll just lock on everything.
for(int col = 0; col<getColumnCount(); col++) {
String colName = getColumnName(col);
if (colName.equals("")) {
continue;
}
if (col != 0) {
query = query + " and ";
}
query = query + colName +" = "+
dbRepresentation(col, getValueAt(row, col));
}
System.out.println(query);
System.out.println("Not sending update to database");
// statement.executeQuery(query);
}
catch (SQLException e) {
// e.printStackTrace();
System.err.println("Update failed");
}
Vector dataRow = (Vector)rows.elementAt(row);
dataRow.setElementAt(value, column);
}
}
分享到:
相关推荐
通常,我们会在`run`方法中添加一个循环,每隔一定时间调用`repaint`方法来重新绘制窗口,从而展示下一张图片。 5. **`ImageObserver`接口** 在`paint`方法中,我们创建了一个匿名内部类实现`ImageObserver`接口。...
在Java编程语言中,`Icon`组件是一个非常实用的类,它被用来在GUI(图形用户界面)上显示小图像,比如按钮、标签等组件的图标。本篇将深入讲解如何利用`Icon`组件来展示图片,特别是通过`ImageIcon`类实现这一功能。...
在Java编程中,实现一个能够连续显示多张图片的小应用程序,主要涉及以下几个核心知识点: 1. **Swing库**:Java Swing是Java Foundation Classes (JFC)的一部分,用于构建图形用户界面(GUI)。在这个案例中,我们...
这将在屏幕上显示一个包含笑脸的窗口。 通过这个简单的示例,我们可以看到Java强大的图形绘制能力。在实际应用中,我们可以利用这些基础构建复杂的图形用户界面,实现游戏、数据可视化等多种功能。对于Java程序员来...
这个程序可能是在学习Java基础和GUI编程时的一个常见课程设计任务,旨在帮助学生理解事件处理、Swing库以及文件I/O等核心概念。 1. **Swing库的使用** Swing是Java AWT(抽象窗口工具包)的扩展,提供了丰富的用户...
在本案例中,"java-JPanel滑动切换"可能指的是在JPanel之间实现类似滑动动画的效果,这种效果通常在移动应用或者某些桌面应用中用于切换不同的视图或面板。 要实现JPanel的滑动切换,我们需要以下几个关键知识点: ...
标题 "java-Swing-PHOTO.zip_java swing相册_图片管理" 提示我们这个压缩包包含了一个基于Java Swing开发的相册应用,用于管理和浏览图片。这个应用很可能实现了以下关键知识点: 1. **JFrame**: JFrame是Java ...
- CardLayout:允许在容器中切换不同的组件,就像卡片堆叠一样,每次只能显示一张“卡片”。 9.4 常用控件: Java Swing提供了各种常用控件,如JButton(按钮)、JLabel(标签)、JTextField(文本字段)、...
Java图形用户界面(GUI)是Java编程中一个重要的部分,用于创建交互式的、可视化的应用程序。GUI允许用户通过鼠标和键盘等输入设备与程序进行交互,使得程序更加友好且易于操作。下面,我们将深入探讨Java GUI开发的...
本项目名为"Java-slide.rar",显然它是一个包含了Java源代码和可能的资源文件的压缩包,用于实现一个Java图片幻灯片播放器。下面我们将深入探讨这个Java幻灯片播放器所涉及的关键知识点。 首先,我们需要了解Java的...
在进行Java课程设计时,完成这样一个拼图程序不仅能巩固Java语法,还能深入理解面向对象编程的概念,提高解决问题的能力。此外,这样的项目实践也有助于熟悉软件工程的流程,包括需求分析、设计、编码、测试和文档...
本报告详细阐述了一个基于Java技术开发的拼图游戏的设计与实现。游戏的主要特点是自动化处理图片切割与加载过程,避免用户手动操作,且能根据图片大小自适应调整窗口尺寸,防止拼图错误和错位。游戏记录通过*.rc格式...
在实现实时显示时,可以使用Java Swing或JavaFX等图形用户界面库创建窗口,并在窗口上绘制`BufferedImage`对象。每接收到一帧视频,就更新窗口内容,实现动态播放。 为了支持二次开发,你需要设计良好的接口和类...
在Java中实现幻灯片效果,首先要创建一个包含所有幻灯片内容的容器,例如使用JPanel数组或者ArrayList来存储每一张幻灯片。每张幻灯片可以是一个包含图片、文本或者其他组件的独立面板。然后,可以利用布局管理器...
在这个图片查看器中,可能使用了`JFrame`作为主窗口,`JLabel`显示图片,`JButton`作为控制按钮(如打开、关闭、上一张、下一张等)。`ActionListener`接口用于监听用户操作并触发相应的行为。 4. **事件处理**:...
这个示例中,我们创建了一个 JFrame 窗口,并在其中添加了一个 JPanel 面板,该面板使用 CardLayout 布局管理器。我们添加了三个按钮到面板中,并使用 `layout.show(panel, "btn02")` 显示第二个按钮。然后,我们...
本文将详细介绍一个基于Java Swing的简易图片查看器的设计与实现过程。该查看器具备基本的图片浏览功能,包括打开文件、切换图片以及关闭文件等操作。通过本项目的实践,读者不仅能加深对Swing组件的理解,还能掌握...
在计算机视觉领域,OpenCV(开源计算机视觉库)是一个广泛使用的工具,尤其在图像处理和机器学习方面。本文将详细探讨如何使用OpenCV 3.1.0版本在Visual Studio 2015环境下显示一张图片,同时涵盖相关的重要知识点。...
在"codesc.net"这个文件中,很可能包含了一个Java源码示例,演示了如何执行上述步骤。源码可能包括读取图片文件、创建`BufferedImage`对象、遍历并转换像素以及在窗口中显示结果。这个例子是学习Java图形处理和色彩...
该程序是一个简单的基于Java Swing框架的桌面应用,用于展示存储在本地目录中的图像文件。程序的主要功能包括显示指定数量的图片,并通过工具栏按钮控制图片的前后切换。 ### 项目组成及作用 #### LastTest类 这是...