jtable中单元格内的复选框,可在数据库中访问

时间:2014-05-02 10:17:35

标签: java swing ms-access jtable jcheckbox

我在我的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);
        }
    }

1 个答案:

答案 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);
    }
}