Как создать 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 для двух примеров