我想在某人單擊單元格時執行操作。例如打開另一個gui。但是,如何讓單元格可點擊但是不可編輯?這些是sql查詢的結果。儘管如此,我無法讓桌子變得不可編輯。我需要聽衆嗎?如果是的話我應該在哪裏放?JTable單元格不可編輯但可點擊
這裏是我的代碼:
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) {
}
}
}
爲OP理解,我認爲關鍵的一點,就是他們必須提供一個'TableModel'到JTable,而不是隻是直接使用數據構建它。帶有'isCellEditable()'的新的DefaultTableModel(){...}'應該可以解決這個問題。 – Josh
它可能沒有足夠突出 - *「通過使用類似DefaultTableModel的,你可以重寫此方法,而不會有太多麻煩」* ... – MadProgrammer
是的,我抓住了那部分,這就是爲什麼我評論,而不是添加一個新的回答。我自己可能不夠清楚;我的意思是,新手可能不太理解_how_或_where_「使用類似於」DefaultTableModel「的東西」 - 我的評論中的重點應該是「向JTable'提供一個TableModel ......」 ,你發佈的教程應該可以做到。 – Josh