Java ListSelectionModel-getMinSelectionIndex()错误地返回-1
我通过TableModel从Oracle数据库中提取了一个表。以下是源代码:Java ListSelectionModel-getMinSelectionIndex()错误地返回-1,java,swing,jtable,actionlistener,selectionmodel,Java,Swing,Jtable,Actionlistener,Selectionmodel,我通过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 jav
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];
}
}
}
我的错在哪里
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);
}
}
});
在用户更改单击某行之前,设置“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);
}
}
});
testKonfig
在监听器外部初始化-从监听器内部设置它以获取当前选择值testKonfig
在监听器外部初始化-从监听器内部设置它以获取当前选择值