gpt4 book ai didi

java - 在jTable中添加复选框

转载 作者:行者123 更新时间:2023-12-01 08:04:30 26 4
gpt4 key购买 nike

我正在使用 swing 来创建桌面应用程序。我已经创建了从数据库提供数据并将其插入到 Jtable 中的功能。现在我想使用提供附加功能,其中包括带有复选框的附加列和用于删除该特定列的按钮(已选中)当单击按钮时。我使用了netbeans,它提供了最大的拖放选项。我无法弄清楚在当前代码中如何以及在何处插入复选框的实例,以便为每一行插入复选框。为了提供每行的复选框,必须生成复选框的多个实例

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

java.sql.Connection con = new DBConnection().getConnection();
PreparedStatement pst;
String Q;
Q = "select * from userregister ";
try {
pst = con.prepareStatement(Q);

ResultSet rs = null;
rs = pst.executeQuery();
String a, b, c, d;
int x = 0;
// DefaultTableModel dt = new DefaultTableModel(data, columnNames);
JCheckBox c1 = new JCheckBox();
for (int i = 0; rs.next(); i++) {
a = rs.getString(1);
b = rs.getString(2);
c = rs.getString(3);
d = rs.getString(4);
jTable2.setValueAt(a, i, 0);
jTable2.setValueAt(b, i, 1);
jTable2.setValueAt(c, i, 2);
jTable2.setValueAt(d, i, 3);
jTable2.setValueAt(, i,4);
}


//jTable1.setAutoscrolls(rootPaneCheckingEnabled);
// TODO add your handling code here:
} catch (SQLException ex) {
Logger.getLogger(NewJFrame1.class.getName()).log(Level.SEVERE, null, ex);
}
}

这是将数据插入表的方法。我还想知道如何才能找出选中了哪个复选框以及如何使用变量来响应多个删除的请求。请帮忙

最佳答案

您必须查看Concepts: Editors and Renderers How to Use Tables 部分教程。

您正在寻找的这个JCheckBoxBoolean类的默认渲染器/编辑器。话虽如此JTable利用 TableModel.getColumnClass()决定合适的渲染器/编辑器。如果您使用DefaultTableModel上述方法的实现始终返回 Object.class,因此您必须重写它才能返回 Boolean.class。例如,假设第一列将包含 boolean 值:

DefaultTableModel model = new DefaultTableModel() {
@Override
Class<?> getColumnClass(int columnIndex) {
return columnIndex == 0 ? Boolean.class : super.getColumnClass(columnIndex);
}
};

链接教程中对此进行了很好的解释。

附录

本问答中展示了另一种方法:Checkbox in only one JTable Cell 。当给定列可能包含不同类型的值( boolean 值、数字、字符串...)时,这非常有用,因此覆盖 getColumnClass() 不可行。不要以为这不是你的情况,但它可能会有所帮助。

<小时/>

also i want to know that how do i be able to find out that which check box is checked and how to use the variable to respond the request of the multiple deletes

只需迭代询问列值的行(true/false)。如果它被“选中”(true),则将其删除:

TableModel model = table.getModel();
for(int i = 0; i < model.getRowCount(); i++) {
if((Boolean)model.getValueAt(i, 0)) {
// delete the row
}
}
<小时/>

离题

数据库调用是一项耗时的任务,可能会阻塞 Event Dispatch Thread (又名 EDT)导致 GUI 变得无响应。 EDT 是一个单独的特殊线程,Swing 组件在其中进行创建和更新。为了避免阻塞此线程,请考虑使用 SwingWorker在后台线程中执行数据库调用并在 EDT 中更新 Swing 组件。查看更多Concurrency in Swing踪迹。

关于java - 在jTable中添加复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22685423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com