非常感謝您的幫助。 :) 我想添加一個複選框列到連接到數據庫的JTable。但是,我認爲我錯過了一些東西,因爲有趣的是這兩件事都起作用(複選框和從數據庫中提取數據),但不是當它們在一起時!請讓我解釋一下我迄今所做的:我做 第一件事是覆蓋在我的默認的表模型這個類:如何在JTable上有複選框列時檢索數據?
data = new Object[100][10];
defaultModel = new DefaultTableModel(data, columnNames) {
@Override
public Class<?> getColumnClass(int col) {
switch(col) {
case 0:
return Integer.class;
case 1:
return Integer.class;
case 2:
return Date.class;
case 3:
return String.class;
case 4:
return String.class;
case 5:
return Boolean.class;
default:
return null;
}
}
};
table = new JTable(defaultModel);
js = new JScrollPane(table);
paneLeft.add(js, BorderLayout.CENTER);
這就是我正在嘗試來填充我的表的複選框:
/* My global variables for this part of the code:
String query;
Statement stmt;
ResultSet rs;
DefaultTableModel defaultModel;
String[] columnNames = {"id","pat_id","date","time", "note", "status"};
*/
public void placeContentIntoRows(){
stmt = null;
rs = null;
query = "select * from messages";
try {
stmt = TableConnection.dbConnector().createStatement();
if (stmt.execute(query)) {
rs = stmt.getResultSet();
}
int rowCounter = 0;
while(rs.next()){
data[rowCounter][0] = rs.getInt(1
data[rowCounter][1] = rs.getInt(2);
data[rowCounter][2] = rs.getDate("3"); //When I add the right name for all the columns, column status loses its checkbox.
data[rowCounter][3] = rs.getString(4);
data[rowCounter][4] = rs.getString(5);
data[rowCounter][5] = rs.getBoolean(6);
rowCounter++;
} defaultModel = new DefaultTableModel(data, columnNames);
table.setModel(defaultModel);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
}
table.repaint();
}
您可能能夠看到,我有這樣一段代碼爲列號3: 數據rowCounter = rs.getDate(「3」); 有意添加了引號,以便我可以更充分地解釋我的問題。當引號出現時,這意味着代碼的那部分出現了錯誤,我的表格顯示如下:(沒有數據,但是有複選框)。
複選框顯示
但是,如果我修改代碼的一部分,並採取了引號,是正確的,但沒有複選框顯示我的表!
while(rs.next()){
data[rowCounter][0] = rs.getInt(1);
data[rowCounter][1] = rs.getInt(2);
data[rowCounter][2] = rs.getDate(3); //When I add the right name for all the columns (id), column status loses its checkbox.
data[rowCounter][3] = rs.getString(4);
data[rowCounter][4] = rs.getString(5);
data[rowCounter][5] = rs.getBoolean(6);
rowCounter++;
}
這是我的數據庫表:
- ID INT,pat_id INT,日期的日期,時間爲varchar(25),記爲varchar(25),狀態 TINYINT(1)
請不要介意變量時間設置爲varchar。只是現在就這樣來解決一個問題。一旦我的這個複選框出現在屏幕上,它會立即改變它。
如果有人可以請看看我的代碼,並試圖揭示我錯過了什麼,這將是非常感謝的確。這是我第一次使用JTables,所以它可能很簡單,我知道。在這個時刻,我無法找到自己。 非常感謝您的熱心幫助。 :)
PS: That`s my table:
Field | Type | Null | Key | Default | Extra
------------+---------------+-------------+---------+-------+
Id | int (11) | NO | Pri | NULL | auto_increment
Pat_id | int (11) | NO | NULL
Date | date | NO | NULL
time | varchar(25) | YES | NULL
note |varchar(25) | YES | NULL
status |tinyint(1) | YES | NULL
沒有複選框
方法,其中的問題被發現重構數據:
private void placeContentIntoTable() {
PreparedStatement st = null;
ResultSet rst = null;
try{
String query="SELECT * from messages";
st = TableConnection.dbConnector().prepareStatement(query);
if (st.execute()) rst = st.getResultSet();
int rowCounter = 0;
data = new Object[1000][10];
//String[] columnNames = {"id","pat_id", "date", "time", "note", "status"};
while(rst.next()){
for(int i=0; i<columnNames.length; i++){
data[rowCounter][i] = rst.getObject(i+1);
}
rowCounter++;
}
defaultModel = new DefaultTableModel(data, columnNames);//When it is uncommented we see data but no checkbox, when it is commented out we see the checkboxes but no data
table.setModel(defaultModel);
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
}
table.repaint();
}
你有例外嗎?因爲我認爲你的日期對象是一個字符串,並不是一個真正的日期。所以當表格試圖渲染你的列3時,它會注意到一個錯誤並停止處理其他列(因此你在第6列丟失了複選框)。這可能有所幫助:http://stackoverflow.com/questions/36488426/override-getcolumnclass-not-working-for-date-columns – hamena314
我不明白你目前的問題。請提供[SSCCE](http://sscce.org),而不需要從數據庫獲取檢索數據(例如,使用預定義的二維數組或其他內容)。在這種情況下,我們可能會幫助你。 –
你好,非常感謝你的回覆。我已經添加了我擁有的數據的圖片。我沒有例外,沒有。只能用複選框看不到日期。將布爾值設置爲「true」或「false」,但是當我沒有正確的日期顯示時,我可以看到複選框。 –