Java 使用vector从数据库填充JTable并在最后一列中显示复选框

Java 使用vector从数据库填充JTable并在最后一列中显示复选框,java,swing,ms-access,jtable,tablemodel,Java,Swing,Ms Access,Jtable,Tablemodel,我已经搜索了所有的地方,还没有找到一个例子,可以帮助我。。。我需要使JTable的最后一列(由ms access数据库填充)显示为默认未选中的复选框。我从中提取的数据库有数百条记录,但是出于我们的目的,我修改了代码和数据库,使其更加简单。我所要做的就是让最后一列作为复选框出现在JavaGUI上,用户可以进行检查并最终保存结果。也许JTable不是最好的方法 对于这段代码,我将Access数据库命名为clientEmployee,并添加了四列,最后一列命名为“active”,包含是/否值(Acce

我已经搜索了所有的地方,还没有找到一个例子,可以帮助我。。。我需要使JTable的最后一列(由ms access数据库填充)显示为默认未选中的复选框。我从中提取的数据库有数百条记录,但是出于我们的目的,我修改了代码和数据库,使其更加简单。我所要做的就是让最后一列作为复选框出现在JavaGUI上,用户可以进行检查并最终保存结果。也许JTable不是最好的方法

对于这段代码,我将Access数据库命名为clientEmployee,并添加了四列,最后一列命名为“active”,包含是/否值(Access中的复选框)

我的作业马上就要交了,请帮帮我。谢谢大家!

This is the main Gui.....

import javax.swing.*;  
import java.awt.event.*;
import java.awt.*;
import java.sql.SQLException;


public class TheMainGUI extends JFrame {  

    //Elements of Notes Tab  
    private JButton buttons5[];
    private JLabel labels5[];
    private String fldLabel5[] = {"Client","Employee"};
    private JPanel p1d;
        static String sql;

public TheMainGUI() {  

//creates the main tab pane object  
JTabbedPane jtp = new JTabbedPane();  

//adds tabbed pane to the frame   
getContentPane().add(jtp);  

//Creats all of the tabs

JPanel jp5 = new JPanel();//checklist tab

//This adds the tabs to the tabbed pane and sets their titles 

 jtp.addTab("Stakeholders", jp5);


        labels5 = new JLabel[2];
        buttons5 = new JButton[2];
        p1d = new JPanel();

        p1d.setLayout(new GridLayout(2,4,5,5));

        jp5.setLayout(new FlowLayout());


        for(int count=0;count<buttons5.length && count<labels5.length; count++) {
            labels5[count] = new JLabel(fldLabel5[count]);
                buttons5[count] = new JButton(fldLabel5[count]);

                p1d.add(buttons5[count]);
}
               buttons5[0].addActionListener(
        new ActionListener() {

            //Handle JButton event if it is clicked
            public void actionPerformed(ActionEvent event) {

                            sql = "Select * from client";
                            DatabaseForm.dbFrame();
                            //setVisible(false);        
            }
        }
        );   
                buttons5[1].addActionListener(
        new ActionListener() {

            //Handle JButton event if it is clicked
            public void actionPerformed(ActionEvent event) {

                            sql = "Select * employee'";
                            DatabaseForm.dbFrame();
                            //setVisible(false);        
            }
        }
        );   

            jp5.add(p1d);
}

     //Main method creates GUI
     public static void main (String []args){  
        TheMainGUI frame = new TheMainGUI();       
        frame.setTitle("Stakeholders");  
        frame.setSize(400,500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setVisible(true);
}
     }






This is the database form class........


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.JCheckBox;

public class DatabaseForm extends JFrame{

    public  ResultSet rs;
    public  Statement stmt;
    public  Connection con;
    JButton save;
    public Checkbox box[];

public DatabaseForm() {

    Vector columnNames = new Vector();
    Vector data = new Vector();

    try {
            // connects to database    
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con =DriverManager.getConnection("jdbc:odbc:clientEmployee");

                //declare statment variable
                 stmt = con.createStatement();
                //declare result set and get query from the main gui
                 rs = stmt.executeQuery( TheMainGUI.sql );

                 //declare metadata variable 
                ResultSetMetaData md = rs.getMetaData();

        //set variable colmns to get column count                  
        int columns = md.getColumnCount();

        //for loop retreives all column names from the database
        for (int i = 1; i <= columns; i++) {
        columnNames.addElement( md.getColumnName(i) );
        }


     while (rs.next()) {


        Vector row = new Vector(columns);

        //for loop that retreives data from the columns
        for (int i = 1; i <= columns; i++) {

        row.addElement( rs.getObject(i));
        //row.add(box[i]);
        }
        data.addElement( row );


}
            rs.close();
            stmt.close();
}
    catch(Exception e) {
            System.out.println( e );
}
    //create JTable
            JTable table = new JTable(data, columnNames);
    // create scroll feature
        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );

        JPanel buttonPanel = new JPanel();
      // add save button
        buttonPanel.setLayout(new FlowLayout());
                save = new JButton("Save");
                    buttonPanel.add(save);
        getContentPane().add( buttonPanel, BorderLayout.SOUTH );

                 save.addActionListener(
        new ActionListener() {

            //Handle JButton event if it is clicked
            public void actionPerformed(ActionEvent event) {

                   setVisible(false);
            }
        }
        );
        }

        static void dbFrame(){
            DatabaseForm frame = new DatabaseForm();
            frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
            frame.pack();
            frame.setTitle("Stakeholder Checklist");
            frame.setVisible(true);
            frame.setLocation(450,50);
            frame.setSize(1000,900);
}   
}
这是主Gui。。。。。
导入javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
导入java.sql.SQLException;
公共类TheMainGUI扩展了JFrame{
//“注释元素”选项卡
专用按钮5[];
私人JLabel标签5[];
私有字符串fldLabel5[]={“客户”,“员工”};
私人JPanel p1d;
静态字符串sql;
公共主题maingui(){
//创建主选项卡窗格对象
JTabbedPane jtp=新JTabbedPane();
//将选项卡式窗格添加到框架中
getContentPane().add(jtp);
//创建所有选项卡
JPanel jp5=新的JPanel();//检查表选项卡
//这会将选项卡添加到选项卡式窗格并设置其标题
jtp.addTab(“利益相关者”,jp5);
标签5=新的JLabel[2];
按钮5=新的JButton[2];
p1d=新的JPanel();
p1d.设置布局(新网格布局(2,4,5,5));
jp5.setLayout(新的FlowLayout());

对于(int count=0;count实现一个围绕列表的自定义TableModel(可能是ArrayList而不是Vector)

以下是一个只读示例:

如果需要复选框,请确保getColumnClass为最后一列返回Boolean.class

确保要编辑的单元格是可编辑的(isCellEditable)

教程:


请正确缩进您的代码,并显示使用相关代码:设置表数据的代码。要完成@JBNizet注释:删除所有与数据库相关的代码,只使用一些硬编码数据,这样我们就可以运行您的代码,而无需设置数据库(请参阅)你有没有一个从数据库中提取数据的例子,我很难遵循这个例子并将其转换为我的代码。非常感谢你的时间!我建议使用JPA来获取POJO列表:否则,如果你使用的是纯JDBC,你必须手动填充POJO或采用以数据为中心的方法(对象列表)而不是面向对象的方法(POJO列表)。