无法在JTable中创建带有复选框的列 [英] Can't create column with checkboxes in JTable

查看:101
本文介绍了无法在JTable中创建带有复选框的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有JTable,我用SQL数据,这是我的方法:

  private void updateTable b $ b try {
String sql =SELECT number as Numver,name as Available,type FROM available_t ORDER BY number asc;
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
tableAvail.setModel(DbUtils.resultSetToTableModel(rs));

} catch(Exception e){
JOptionPane.showMessageDialog(null,e);
} finally {
try {
rs.close();
pst.close();
} catch(Exception e){
}
}
}

到目前为止很好。数据显示正确。但是,我想添加一个复选框。当我尝试使用Eclipse中的向导手动创建(按钮'模型')我不能添加新的列,也许因为表和列是通过方法创建。所以,如何添加新列,将有复选框。然后,当我选择一些复选框 - 当我按确定按钮,以检查哪些复选框被选中,并在列中的TYPE中更改它的YES或NO。



编辑: **
这是我的代码,我只是想让结果true / false在列中的复选框中转换:

  private JPanel contentPane; 
private final JPanel panel = new JPanel();
private final JScrollPane scrollPane = new JScrollPane();
private final JTable table = new JTable();

/ **
*启动应用程序。
* /
public static void main(String [] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
try {
TableExample frame = new TableExample();
frame.setVisible(true);
} catch(Exception e){
e.printStackTrace();
}
}
});
}

/ **
*创建框架。
* /
public TableExample(){
initGUI();
}
private void initGUI(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,450,300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
panel.setBounds(31,11,238,209);

contentPane.add(panel);
panel.setLayout(null);
scrollPane.setBounds(10,11,218,187);

panel.add(scrollPane);
table.setModel(new DefaultTableModel(
new Object [] [] {
{1,Test1,20,false},
{ 2,Test2,10,false},
{3,Test3,20,true},
} [] {
Id,Test,Rate,T / F
}


scrollPane.setViewportView(table);感谢大家,谢谢大家!谢谢大家!谢谢大家!谢谢大家。谢谢大家!谢谢大家!这是我创建和工作完美

  public void updateTable()throws ClassNotFoundException,SQLException {
String sql = select * from instruments_sales_t where sold ='YES';
conn = ConnectionToDb.connectDb();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);


DefaultTableModel model = new DefaultTableModel(){
public Class<?> getColumnClass(int column){
switch(column){

case 0:return String.class;
case 1:return String.class;
case 2:return String.class;
case 3:return String.class;
case 4:return String.class;
case 5:return String.class;
case 6:return String.class;
case 7:return Boolean.class;

默认值:return String.class;
}
}
};


tablePaidSales.setModel(model);
model.addColumn(id);
model.addColumn(Name);
model.addColumn(Size);
model.addColumn(Avail);
model.addColumn(Total);
model.addColumn(Cl);
model.addColumn(Date);
model.addColumn();

int i = 0;
while(rs.next()){
model.addRow(new Object [0]);
model.setValueAt(rs.getString(id),i,0);
model.setValueAt(rs.getString(name),i,1);
model.setValueAt(rs.getString(size),i,2);
model.setValueAt(rs.getString(want_items),i,3);
model.setValueAt((rs.getDouble(want_price))*(rs.getDouble(want_items)),i,4);
model.setValueAt(rs.getString(client),i,5);
model.setValueAt(rs.getString(date_of_sell),i,6);
model.setValueAt(false,i,7);
i ++;
}

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizo​​ntalAlignment(JLabel.RIGHT);
rightRenderer.setForeground(Color.BLUE);

DefaultTableCellRenderer redRenderer = new DefaultTableCellRenderer();
redRenderer.setHorizo​​ntalAlignment(JLabel.RIGHT);
redRenderer.setForeground(Color.RED);

tablePaidSales.setShowGrid(true);
tablePaidSales.setGridColor(Color.LIGHT_GRAY);
tablePaidSales.setShowHorizo​​ntalLines(false);
tablePaidSales.getColumnModel()。getColumn(0).setPreferredWidth(28);
tablePaidSales.getColumnModel()。getColumn(1).setPreferredWidth(230);
tablePaidSales.getColumnModel()。getColumn(2).setPreferredWidth(140);
tablePaidSales.getColumnModel()。getColumn(3).setPreferredWidth(57);
tablePaidSales.getColumnModel()。getColumn(4).setPreferredWidth(70);
tablePaidSales.getColumnModel()。getColumn(5).setPreferredWidth(120);
tablePaidSales.getColumnModel()。getColumn(6).setPreferredWidth(82);
tablePaidSales.getColumnModel()。getColumn(7).setPreferredWidth(25);
tablePaidSales.getColumnModel()。getColumn(3).setCellRenderer(rightRenderer);
tablePaidSales.getColumnModel()。getColumn(4).setCellRenderer(redRenderer);
}


I have JTable and I fill it with SQL data, here is my method:

private void updateTable() {
    try {
        String sql = "SELECT number as Numver, name as Available, type FROM available_t ORDER BY number asc";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        tableAvail.setModel(DbUtils.resultSetToTableModel(rs));

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    } finally {
        try {
            rs.close();
            pst.close();
        } catch (Exception e) {
        }
    }
}

So far so good. The data shows correct. But, I want to put one more column with checkbox. When I try to create manually using wizard in Eclipse (button 'model') I can't add new column, maybe because the table and columns is create by method. So, How I can add new column, that will have checkboxes. Then after I select some checkbox - when I press OK button, to check which checkboxes are checked and update it in db in column TYPE with YES or NO.

Edit:*** Here is my code, I just want result true/false to be converted in checkboxes in column:

private JPanel contentPane;
private final JPanel panel = new JPanel();
private final JScrollPane scrollPane = new JScrollPane();
private final JTable table = new JTable();

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TableExample frame = new TableExample();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public TableExample() {
    initGUI();
}
private void initGUI() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    panel.setBounds(31, 11, 238, 209);

    contentPane.add(panel);
    panel.setLayout(null);
    scrollPane.setBounds(10, 11, 218, 187);

    panel.add(scrollPane);
    table.setModel(new DefaultTableModel(
        new Object[][] {
            {"1", "Test1", "20", "false"},
            {"2", "Test2", "10", "false"},
            {"3", "Test3", "20", "true"},
        },
        new String[] {
            "Id", "Test", "Rate", "T/F"
        }
    ));

    scrollPane.setViewportView(table);
}

解决方案

thanks everyone. Here is what I create and works perfect

public void updateTable() throws ClassNotFoundException, SQLException {
 String sql = "select * from instruments_sales_t where sold = 'YES'";
 conn = ConnectionToDb.connectDb();
 stmt = conn.createStatement();
 rs = stmt.executeQuery(sql);


 DefaultTableModel model = new DefaultTableModel() {
 public Class<?> getColumnClass(int column) {
 switch (column) {

 case 0: return String.class;
 case 1: return String.class;
 case 2: return String.class;
 case 3: return String.class;
 case 4: return String.class;
 case 5: return String.class;
 case 6: return String.class;
 case 7: return Boolean.class;

 default:return String.class;
 }
 }
 };


 tablePaidSales.setModel(model);
 model.addColumn("id");
 model.addColumn("Name");
 model.addColumn("Size");
 model.addColumn("Avail");
 model.addColumn("Total");
 model.addColumn("Cl");
 model.addColumn("Date");
 model.addColumn("");

 int i = 0;
 while (rs.next()) {
 model.addRow(new Object[0]);
 model.setValueAt(rs.getString("id"), i, 0);
 model.setValueAt(rs.getString("name"), i, 1);
 model.setValueAt(rs.getString("size"), i, 2);
 model.setValueAt(rs.getString("want_items"), i, 3);
 model.setValueAt((rs.getDouble("want_price"))*(rs.getDouble("want_items")), i, 4);
 model.setValueAt(rs.getString("client"), i, 5);
 model.setValueAt(rs.getString("date_of_sell"), i, 6);
 model.setValueAt(false, i, 7);
 i++;
 }

      DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
      rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
 rightRenderer.setForeground(Color.BLUE);

 DefaultTableCellRenderer redRenderer = new DefaultTableCellRenderer();
 redRenderer.setHorizontalAlignment(JLabel.RIGHT);
 redRenderer.setForeground(Color.RED);

 tablePaidSales.setShowGrid(true);
 tablePaidSales.setGridColor(Color.LIGHT_GRAY);
 tablePaidSales.setShowHorizontalLines(false);
 tablePaidSales.getColumnModel().getColumn(0).setPreferredWidth(28);
 tablePaidSales.getColumnModel().getColumn(1).setPreferredWidth(230);
 tablePaidSales.getColumnModel().getColumn(2).setPreferredWidth(140);
 tablePaidSales.getColumnModel().getColumn(3).setPreferredWidth(57);
 tablePaidSales.getColumnModel().getColumn(4).setPreferredWidth(70);
 tablePaidSales.getColumnModel().getColumn(5).setPreferredWidth(120);
 tablePaidSales.getColumnModel().getColumn(6).setPreferredWidth(82);
 tablePaidSales.getColumnModel().getColumn(7).setPreferredWidth(25);
 tablePaidSales.getColumnModel().getColumn(3).setCellRenderer(rightRenderer);
 tablePaidSales.getColumnModel().getColumn(4).setCellRenderer(redRenderer);
 }

这篇关于无法在JTable中创建带有复选框的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆