簡體   English   中英

我的JTable拋出classCastException。 我正在從文本文件加載,需要(True / false)列顯示為復選框

[英]My JTable throws a classCastException. I am loading from a text file and need the (True/false) column to show as Checkboxes

有人幫我 我是Java新手,正在從文本文件加載表數據。 這是我的表格數據:

  • Log1,主題,名稱,寵物名稱,時間,true,日期,false
  • Log2,主題,名稱,寵物名稱,時間,true,日期,false
  • Log3,主題,名稱,寵物名稱,時間,true,日期,false
  • Log4,主題,名稱,寵物名稱,時間,true,日期,false
  • Log5,主題,名稱,寵物名稱,時間,true,日期,false

這是我用來在桌子上設置的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM