我想在有人单击单元格时放置一个操作。 例如,打开另一个 GUI。但是如何使单元格可单击但不可编辑?这些是 sql 查询的结果。不过,我无法使表格无法编辑。我需要听众还是什么?如果是,我应该把它放在哪里?
这是我的代码:
public class AllResultsFromDB extends JFrame
{
GUI ins = new GUI();
public AllResultsFromDB(GUI x)
{
Vector columnNames = new Vector();
Vector data = new Vector();
this.ins = x;
try
{
// Initializing GUI class in order to call getSelectedTable() method.
// GUI ins = new GUI();
//System.out.println(ins.getSelectedTable());
Login sgui = new Login();
String dburl = "jdbc:oracle:thin:@localhost:1521:ORCL";
Connection connection = DriverManager.getConnection( dburl, sgui.getUsername(), sgui.getPassword() );
// Fetch data from table specified by user
String query = "SELECT * FROM " + ins.getSelectedTable() + " ORDER BY id";
System.out.println(query);
Statement stmt = connection.createStatement();
ResultSet rset = stmt.executeQuery(query);
ResultSetMetaData metad = rset.getMetaData();
int columns = metad.getColumnCount();
// This loop gets the names of the columns
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( metad.getColumnName(i) );
//columnNames.addElement("PROFILES");
}
// This loop gets the data inside the rows
while (rset.next())
{
Vector row = new Vector(columns);
//Vector b = new Vector((Collection)button);
for (int i = 1; i <= columns; i++)
{
row.addElement( rset.getObject(i) );
}
data.addElement( row );
//data.addElement(b);
}
rset.close();
stmt.close();
connection.close();
// Create table with results
JTable table = new JTable(data, columnNames)
{
public Class getColumnClass(int column)
{
for (int row = 0; row < getRowCount(); row++)
{
Object obj = getValueAt(row, column);
if (obj != null)
{
return obj.getClass();
}
}
return Object.class;
}
};
JScrollPane scroll = new JScrollPane( table );
getContentPane().add( scroll );
//table.addMouseListener(l);
//table.setEnabled(false);
//table.setDragEnabled(true);
JPanel panel = new JPanel();
getContentPane().add( panel, BorderLayout.SOUTH );
} catch (SQLException e) {
}
}
}
首先看看如何使用表格
TableModel
确定单元格isCellEditable
方法是否可编辑。 此方法应返回false
直接向JTable
提供列/数据信息时,JTable
会在内部创建DefaultTableModel
。 默认情况下,此类的 isCellEditiable
方法将返回true
。
通过使用类似 DefaultTableModel
的东西,您可以毫不费力地覆盖此方法,并将模型直接设置为表。
接下来,您需要将MouseListener
附加到表
看看如何编写鼠标侦听器
然后,您可以使用getSelectedColumn,getSelectedRow来获取选定的单元格。
您还需要使用 convertRowIndexToModel 和 convertColumnIndexToModel 在视图索引和模型索引之间进行转换