当前位置: 首页 > 知识库问答 >
问题:

具有数据库访问权限的jtable中单元格内的复选框

单琛
2023-03-14

我在jtable中添加复选框时遇到了一点问题。我的jtable中有四列,最后两列有复选框。jtable中的数据来自我的数据库。这是我的错误“线程中的异常”AWT-EventQueue-0“java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Boolean”,在我的数据库中有两个“是/否”列,分别是“存在”和“超时”。如何解决此错误?

这是我的密码

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个答案

公冶同
2023-03-14

首先,你需要将“是”转换为“真”,将“否”转换为“假”。您可以在数据库中进行更改,也可以使用java中的ENUM进行转换。

看看这是否能自动解决问题。否则,您可能需要添加另一个步骤,需要手动转换值,并使用类似于boolean b=boolean.parseBoolean(“value”)的方法更新Object[][]结果

===================已编辑= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =示例代码

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

 类似资料:
  • 问题内容: 我有一个JTable,我想用自定义渲染器尝试检查isEnabled()的所有禁用的复选框单元变灰,然后更改背景颜色,但仍然无法使用。有什么建议么?谢谢!!! 问题答案: 如“ 概念:编辑器和渲染器 ”中所述,“通常使用单个单元格渲染器来绘制包含相同类型数据的所有单元格。” 您需要维护表模型中的enabled状态。 附录:作为一个具体示例,此示例中的数据模型是一组简单的Date实例。ge

  • 如何设置文本颜色,我将使用setForebackground(color c),但如果我使用它,图像不会被打乱。 有可能使它与JLabel一起工作吗?在修改单元格的线程中设置所需的Jlabel(带有图像或文本),只需设置Valueat(label,row,column);

  • 在web应用程序(基于laravel 5.3的mysql)中,有三个主要模型:、和和许多其他模型(、等)有管理器(另一个在顶层)。 属于。部门组成等级制度。用户有一些角色,例如,允许他查看他的部门和他的部门下面的所有部门的任务。 例如,零级部门的用户可以看到系统中的所有任务。

  • 问题内容: 我有一个存储过程,该过程可以找到所有现有数据库并从每个数据库的表中读取数据。 有没有一种方法可以使我对所有数据库以及将来的所有数据库都具有登录读取访问权限,即在添加新数据库时我无需执行任何操作? 有服务器角色可以工作吗?有没有一种方法可以使SQL代理作业在任何新数据库上添加权限?还是有其他方法? 问题答案: 对于新数据库,将用户添加到模型数据库中。这用作所有新数据库的模板。 对于现有数

  • 我试图理解Java8中引入的新日期和时间API。 我在日志文件中有一个unix时间戳,我需要对它进行处理,以确定它属于今天或昨天的哪个小时。 我遇到了一个不寻常的错误在Android Studio,想更好地理解它。

  • 问题内容: 我有一个无法解决的问题。 众所周知,我对使用JTables还是比较陌生,所以答案可能很简单,但是我找不到解决方案:/ 所以,我有一个使用AbstractTableModel的JTable,它重写了 方法,以告知要显示的每一列的类型。其中之一是布尔值。 当我创建一个简单的JTable时,使用 一切都很好,并且使用复选框(开/关)可以正确显示布尔值。 现在,我想将文本放在每个单元格的中心(