[英]jTable boolean column shows true/false instead of checkboxes
[英]My JTable throws a classCastException. I am loading from a text file and need the (True/false) column to show as Checkboxes
有人幫我 我是Java新手,正在從文本文件加載表數據。 這是我的表格數據:
這是我用來在桌子上設置的Java程序:
public class SubjectTableModel extends AbstractTableModel {
private String[] Titles = new String[]{ "LOG", "SUBJECT", "NAME", "OWNER-NAME", "TIME","OWNER", "DATE", "BORROWED"};
static File pwd = new File("columnVals");
int linenumber;
Vector data;
Vector columns;
public SubjectTableModel(){
String line;
data = new Vector();
//columns = new Vector();
try {
FileInputStream fis = new FileInputStream(pwd);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringTokenizer st1 = new StringTokenizer(br.readLine(), ", ");
/*while (st1.hasMoreTokens())
columns.addElement(st1.nextToken());*/
while ((line = br.readLine()) != null) {
StringTokenizer st2 = new StringTokenizer(line, ", ");
while (st2.hasMoreTokens())
data.addElement(st2.nextToken());
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public String getColumnName(int column) {
return Titles[column];
}
public Class<?> getColumnClass(int columnIndex) {
switch(columnIndex){
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return String.class;
case 5:
return Boolean.class;
case 6:
return String.class;
case 7:
return Boolean.class;
default:
return null;
}
}
public int getColumnCount() {
return 8;
}
public int getRowCount() {
return data.size() / getColumnCount();
}
public Object getValueAt(int rowIndex, int columnIndex) {
return (String) data.elementAt((rowIndex * getColumnCount())
+ columnIndex);
}
}
運行時引發的異常是:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at javax.swing.JTable$BooleanRenderer.getTableCellRendererComponent(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)...
重要說明:如果沒有getColumnClass
方法,則一切運行正常。
您為某些列定義了要返回的Boolean.class,但是您的模型包含字符串。
您可以更改getValueAt()
方法以返回列的布爾值。 像這樣
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex==5 || columnIndex==7) {
return Boolean.valueOf((String) data.elementAt((rowIndex * getColumnCount())
+ columnIndex));
}
return (String) data.elementAt((rowIndex * getColumnCount())
+ columnIndex);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.