- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过 TableModel 从 Oracle 数据库中提取了一个表。这是源代码:
package database;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.text.Document;
import oracle.jdbc.internal.OracleResultSet;
import oracle.sql.CLOB;
import oracle.xdb.XMLType;
import java.sql.*;
import java.util.*;
/**
* an immutable table model built from getting metadata about a table in a jdbc
* database
*/
public class TestKonfigTableModel extends AbstractTableModel {
static Object[][] contents;
String[] columnNames;
Class[] columnClasses;
public TestKonfigTableModel(Connection conn, String tableName) throws SQLException {
super();
getTableContents(conn, tableName);
}
protected void getTableContents(Connection conn, String tableName) throws SQLException {
// get metadata: what columns exist and what
// types (classes) are they?
DatabaseMetaData meta = conn.getMetaData();
System.out.println("got meta = " + meta);
ResultSet results = meta.getColumns(null, null, tableName, null);
OracleResultSet orset = (OracleResultSet)results;
System.out.println("got column results");
ArrayList colNamesList = new ArrayList();
ArrayList colClassesList = new ArrayList();
while (results.next()) {
colNamesList.add(results.getString("COLUMN_NAME"));
System.out.println("name: " + results.getString("COLUMN_NAME"));
int dbType = results.getInt("DATA_TYPE");
switch (dbType) {
case Types.INTEGER:
colClassesList.add(Integer.class);
break;
case Types.FLOAT:
colClassesList.add(Float.class);
break;
case Types.DOUBLE:
case Types.REAL:
colClassesList.add(Double.class);
break;
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
colClassesList.add(java.sql.Timestamp.class);
break;
case Types.SQLXML:
colClassesList.add(oracle.xdb.XMLType.class);
default:
colClassesList.add(String.class);
break;
}
;
System.out.println("type: " + results.getInt("DATA_TYPE"));
}
columnNames = new String[colNamesList.size()];
colNamesList.toArray(columnNames);
columnClasses = new Class[colClassesList.size()];
colClassesList.toArray(columnClasses);
// get all data from table and put into
// contents array
Statement statement = conn.createStatement();
results = statement.executeQuery("SELECT * FROM " + tableName + " ORDER BY 1");
ArrayList rowList = new ArrayList();
while (results.next()) {
ArrayList cellList = new ArrayList();
for (int i = 0; i < columnClasses.length - 1; i++) {
Object cellValue = null;
if (columnClasses[i] == String.class)
cellValue = results.getString(columnNames[i]);
else if (columnClasses[i] == Integer.class)
cellValue = new Integer(results.getInt(columnNames[i]));
else if (columnClasses[i] == Float.class)
cellValue = new Float(results.getInt(columnNames[i]));
else if (columnClasses[i] == Double.class)
cellValue = new Double(results.getDouble(columnNames[i]));
else if (columnClasses[i] == java.sql.Date.class)
cellValue = results.getTimestamp(columnNames[i]);
else if (columnClasses[i] == oracle.xdb.XMLType.class) {
cellValue = results.getSQLXML(columnNames[i]);
} else
System.out.println("Can't assign " + columnNames[i]);
cellList.add(cellValue);
} // for
Object[] cells = cellList.toArray();
rowList.add(cells);
} // while
// finally create contents two-dim array
contents = new Object[rowList.size()][];
for (int i = 0; i < contents.length; i++)
contents[i] = (Object[]) rowList.get(i);
System.out.println("Created model with " + contents.length + " rows");
// close stuff
results.close();
statement.close();
}
// AbstractTableModel methods
public int getRowCount() {
return contents.length;
}
public int getColumnCount() {
if (contents.length == 0)
return 0;
else
return contents[0].length;
}
public Object getValueAt(int row, int column) {
return contents[row][column];
}
// overrides methods for which AbstractTableModel
// has trivial implementations
public Class getColumnClass(int col) {
return columnClasses[col];
}
public String getColumnName(int col) {
return columnNames[col];
}
}
一切正常,我的表格完全按照我想要的方式显示。但是现在,我想向表行添加一个操作监听器,以便双击时返回行号。现在总是返回-1。根据 API 描述,这意味着没有选择任何行。但我确实选择并双击了一些行,但它一直返回-1。出于测试原因,我在一个主方法中编写了所有这些内容,所以请原谅这种糟糕的风格:
package database;
import javax.swing.*;
import javax.swing.table.*;
import oracle.jdbc.pool.OracleDataSource;
import java.sql.*;
import java.util.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.*;
public class GUIAutoTest {
public static void main(String[] args) {
try {
/*
* driver, url, user, and pass can be passed in as system properties
* "jdbctable.driver", "jdbctable.url", "jdbctable.user", and
* "jdbctable.pass", or specified in a file called
* "jdbctable.properties" in current directory
*/
Properties testProps = new Properties();
String ddriver = System.getProperty("jdbctable.driver");
String durl = System.getProperty("jdbctable.url");
String duser = System.getProperty("jdbctable.user");
String dpass = System.getProperty("jdbctable.pass");
ListSelectionModel testSelectionModel;
if (ddriver != null)
testProps.setProperty("jdbctable.driver", ddriver);
if (durl != null)
testProps.setProperty("jdbctable.url", durl);
if (duser != null)
testProps.setProperty("jdbctable.user", duser);
if (dpass != null)
testProps.setProperty("jdbctable.pass", dpass);
try {
testProps.load(new FileInputStream(new File("jdbctable.properties")));
} catch (Exception e) {
} // ignore FNF, etc.
System.out.println("Test Properties:");
testProps.list(System.out);
// now get a connection
// note care to replace nulls with empty strings
OracleDataSource ods = new OracleDataSource();
ods.setDriverType("thin");
ods.setNetworkProtocol("tcp");
ods.setDatabaseName("***");
ods.setServerName("***");
ods.setPortNumber(1521);
ods.setUser("***");
ods.setPassword("***");
Connection conn = ods.getConnection();
// create db table to use
String tableName = createSampleTable(conn);
// get a model for this db table and add to a JTable
TableModel mod = new TestKonfigTableModel(conn, tableName);
JTable jtable = new JTable(mod);
testSelectionModel = jtable.getSelectionModel();
testSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
int testKonfig = testSelectionModel.getMinSelectionIndex();
jtable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event) {
if (event.getClickCount() == 2) {
System.out.println(testKonfig);
}
}
});
JScrollPane scroller = new JScrollPane(jtable, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JFrame frame = new JFrame("JDBCTableModel demo");
frame.getContentPane().add(scroller);
frame.pack();
frame.setVisible(true);
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String createSampleTable(Connection conn) throws SQLException {
return "TEST_KONFIG";
}
}
我的错误在哪里?
最佳答案
int testKonfig = testSelectionModel.getMinSelectionIndex();
jtable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event) {
if (event.getClickCount() == 2) {
System.out.println(testKonfig);
}
}
});
您在用户更改为单击一行之前设置“testDonfig”的值。
代码应该是:
//int testKonfig = testSelectionModel.getMinSelectionIndex();
jtable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event) {
if (event.getClickCount() == 2) {
int testKonfig = testSelectionModel.getMinSelectionIndex();
System.out.println(testKonfig);
}
}
});
关于java - ListSelectionModel - getMinSelectionIndex() 错误地返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44464738/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!