我有一个可点击的表,但是当我双击时,它不是按照它所说的去做,而是进入编辑模式。我尝试过isCellEditable()方法但没有成功。也许我做错了什么?
以下是代码:
public AllResultsFromDB(GUI x) {
final Vector columnNames = new Vector();
final Vector data = new Vector();
for (int i = 1; i <= columns; i++) {
columnNames.addElement(metad.getColumnName(i));
}
// This loop gets the data inside the rows
while (rset.next()) {
final Vector row = new Vector(columns);
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
final JTable table = new JTable(data, columnNames) {
public boolean isCellEditable() {
return false;
}
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);
JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.SOUTH);
table.addMouseListener(new MouseListener() {
public void mousePressed(MouseEvent e) {
//System.out.println(table.getSelectedRow());
}
public void mouseReleased(MouseEvent e) {
//System.out.println(table.getSelectedRow());
}
public void mouseEntered(MouseEvent e) {
//System.out.println(table.getSelectedRow());
}
public void mouseExited(MouseEvent e) {
//System.out.println(table.getSelectedRow());
}
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){
System.out.println(table.getSelectedRow());
}
}
});
答案 0 :(得分:3)
您尝试覆盖的方法isCellEditable
具有不同的签名:
public boolean isCellEditable(int row, int column)
你怎么能指定哪个特定的细胞呢?下次添加@Override
注释时,应该有助于发现这一点。
在任何情况下,这都不是使JTable
不可编辑的正确方法。正确的方法是提供一个自定义AbstractTableModel
,它使用isCellEditable
方法返回false。 JTable
不应该决定一个单元格是否可编辑,模型有责任决定它:JTable
的isCellEditable方法只是询问其模型是否可编辑单元格。 JTable
显示内容,仅此而已,它是决定和包含数据的模型。
由于您似乎只使用JTable的基本功能,因此您无需滚动自己的表模型,DefaultTableModel
将适用于您,并且您可以覆盖其isCellEditable
方法。< / p>
答案 1 :(得分:2)
你不是那么遥远。
实际方法isCellEditable
有两个参数,所以你的方法实际上没有覆盖任何东西。
正确的方法。