我在我的jtable中放入一个复选框时遇到了一些问题。我的jtable中有四列,后两列有复选框。我的jtable中的数据来自我的数据库。这是我的错误"线程中的异常" AWT-EventQueue-0" java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Boolean",在我的数据库中有两个" yes / no"是"存在的列#34;和"加班"我怎么能解决这个错误?
这是我的代码
private void attendance(){
DateFormat dateFormat = new SimpleDateFormat("MMMM dd hh:mm a");
Date date = new Date();
attendanceDate.setText(dateFormat.format(date));
try{
String query ="SELECT e.firstName,e.lastName,a.Present,a.Overtime FROM employees e INNER JOIN attendance a ON e.ID = a.empID";
Object[][] result = connectToDB(query);
dailyAttendanceTable.setModel(new javax.swing.table.DefaultTableModel(
result, new String [] {"First Name","Last Name","Present","Overtime"}
)
{
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.Boolean.class
};
boolean[] canEdit = new boolean [] {
false, false, true, true
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
}catch (ClassNotFoundException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:3)
首先,您需要将“yes”转换为“true”,将“no”转换为“false”。您可以更改数据库,也可以使用java中的ENUM进行转换。
看看是否能自动解决问题。
否则,您可能需要添加另一个步骤,您需要手动转换值并使用Object[][] result
boolean b = Boolean.parseBoolean("value");
=================已编辑============================= ========= 示例代码
package com.pkg1;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TableWithModel extends JFrame {
private static final long serialVersionUID = 1L;
// constructor that will display a JTable based on elements received as arguments
TableWithModel(Object[][] obj, String[] header) {
super("JTable example");
JPanel panel = new JPanel(new BorderLayout());
JTable table = new JTable();
table.setModel(new javax.swing.table.DefaultTableModel(
obj, header
)
{
/**
*
*/
private static final long serialVersionUID = 1L;
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.Boolean.class
};
boolean[] canEdit = new boolean [] {
false, false, true, true
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
panel.add(new JScrollPane(table));
add(panel); // adding panel to frame
// and display it
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
pack();
}
// to run the whole thing
public static void main(String[] args) {
Object[][] rowAndColumn = {
{"Dog", "Mammal",Boolean.parseBoolean("true")},
{"Cat", "Mammal",Boolean.parseBoolean("true")},
{"Shark", "Fish",Boolean.parseBoolean("false")},
{"Eagle", "Bird",Boolean.parseBoolean("false")}
};
// defines the header
String[] header = {"Animal", "Family","Domestic"};
TableWithModel twm = new TableWithModel(rowAndColumn, header);
}
}