vendredi 4 novembre 2016

How to retrieve data when JTable has checkbox column on it?

Many thanks for your help. :) I am trying to add a checkbox column into a JTable connected to a database. However, I think I am missing something because the funny thing is that both things work (The checkbox and the data extraction from the database), but not when they are together! Please let me explain what I have done so far: First thing I did was to override this class on my default table model:

data = new Object[100][10];
    defaultModel = new DefaultTableModel(data, columnNames) {

        @Override
        public Class<?> getColumnClass(int col) {
            switch(col) {
            case 0:
                return Integer.class;
            case 1:
                return Integer.class;
            case 2:
                return Date.class;
            case 3:
                return String.class;
            case 4:
                return String.class;
            case 5:
                return Boolean.class;
            default:
                return null;
            }
        }


    };

    table = new JTable(defaultModel);
    js = new JScrollPane(table);
    paneLeft.add(js, BorderLayout.CENTER);

And that is how I am trying to populate my table with the checkbox:

 /* My global variables for this part of the code:
String query;
    Statement stmt;
    ResultSet rs;
    DefaultTableModel defaultModel;
    String[] columnNames = {"id","pat_id","date","time", "note", "status"};
*/



public void placeContentIntoRows(){
        stmt = null;
        rs = null;
        query = "select * from messages";

        try {
            stmt = TableConnection.dbConnector().createStatement();
            if (stmt.execute(query)) {
                rs = stmt.getResultSet();
            }

            int rowCounter = 0;

            while(rs.next()){
                data[rowCounter][0] = rs.getInt(1
                data[rowCounter][1] = rs.getInt(2);
                data[rowCounter][2] = rs.getDate("3"); );//When I add the right name for all the columns, column status loses its checkbox.
                data[rowCounter][3] = rs.getString(4);
                data[rowCounter][4] = rs.getString(5);
                data[rowCounter][5] = rs.getBoolean(6);

                rowCounter++;    
            }           defaultModel = new DefaultTableModel(data, columnNames);
            table.setModel(defaultModel);

        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
        }

        table.repaint();
    }

You may be able to see that I have this piece of code for column number 3: data[rowCounter][2] = rs.getDate("3"); The quotes were added intentionally so that I can explain my problem more fully. When the quotes are there, which means I have a mistake in that part of the code, my table is displayed like that: (With no data, but with the checkbox on it).

CheckBox Displayed

However, if I fix that part of the code and take out the quotes, my table is displayed correctly but without checkboxes!

[enter image description here][2]

while(rs.next()){
                data[rowCounter][0] = rs.getInt(1);
                data[rowCounter][1] = rs.getInt(2);
                data[rowCounter][2] = rs.getDate(3); //When I add the right name for all the columns (id), column status loses its checkbox. 
                data[rowCounter][3] = rs.getString(4);
                data[rowCounter][4] = rs.getString(5);
                data[rowCounter][5] = rs.getBoolean(6);

                rowCounter++;    
            }

This is my database table:

  • id int, pat_id int, date date, time varchar(25), note varchar(25), status tinyint(1)

Please do not mind the fact the variable time is set as varchar. Just did it that way for now to tackle a problem at a time. Will change it as soon as I get this checkbox to appear on the screen. 

If anyone could please have a look at my code and try to shed some light on what I am missing that would be much appreciated indeed. That is the first time I work with JTables, so it may be something simple, I know. Just can`t find it myself at this moment. Thank you so very much for your kind help. :)




Aucun commentaire:

Enregistrer un commentaire