Как создать jCheckbox в jTable при получении данных из SQLite

Я использую netbeans и подключаю его к базе данных SQLite, ниже вы найдете код, который я использую для заполнения jtable из базы данных, проблема в том, что столбец состояния ((третий столбец)) показывает мне логическое значение как 1 с и 0s, как я могу сделать это как jcheckboxs внутри jtable?

private void Update_table() {

    try {
        String sql = "select Name,location,Status from Items where E_ID =" + 
                Integer.parseInt(E_I.getText());

        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        jtable1.setModel(DbUtils.resultSetToTableModel(rs));

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}

Теперь я использую это, но флажки никогда не проверяются!! цвет строки изменяется, и в столбце появляется флажок, который я хочу, но проблема в том, как сделать так, чтобы он был установлен, если true!!

    public class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {

      CheckBoxRenderer() {
        setHorizontalAlignment(JLabel.CENTER);
      }

      public Component getTableCellRendererComponent(JTable table, Object value,
          boolean isSelected, boolean hasFocus, int row, int column) {
        if (isSelected) {

          setSelected(true);

        } else {

          setSelected(false);
        }

        return this;
      }
      }  








   public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer {

    public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        final java.awt.Component cellComponent =    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        Object val = table.getValueAt(row, 2);
        String sval = val.toString();

        int ival = Integer.parseInt(sval);
        if (ival == 0) {
            cellComponent.setForeground(Color.black);
            cellComponent.setBackground(Color.magenta);

        } else {
            cellComponent.setBackground(Color.white);
            cellComponent.setForeground(Color.black);
        }
        if (isSelected) {
            cellComponent.setForeground(table.getSelectionForeground());
            cellComponent.setBackground(table.getSelectionBackground());
        }
       CheckBoxRenderer checkBoxRenderer = new CheckBoxRenderer();
       Itabel.getColumnModel().getColumn(2).setCellRenderer(checkBoxRenderer);
        return cellComponent;

        }

         }

1 ответ

Решение

Рендеринг достигается за счет использования комбинации поиска в JTable, привязанный к данному Class тип и TableCellRenderer,

JTable спросит TableModel для columnClass и будет искать TableCellRenderer использовать для этого данного типа.

По умолчанию, когда TableModel#getColumnClass метод возвращает Boolean.class, JTable будет использовать JCheckBox оказать заданное значение.

Взгляните на Как использовать таблицы и решено - установка данных следующего столбца в jtable в java для двух примеров

Другие вопросы по тегам