我有一个JTable,有一列是文本,不可编辑,第二列是一个显示布尔值的复选框....现在我想要的是,当用户选择多行并取消选中任何一行时选中复选框,然后选中下面的所有复选框都应取消选中,反之亦然.
我不明白prepareEditor是如何工作的,我无法使用prepareEditor中的Action设置prepareRenderer的可见性规则,正如我在附图中捕获的那样
第 1 行的规则按我的预期工作,如果未选择 JCheckBox(也使用 JTable 选择荧光笔),其他 TableCell 是不可见的,但如果我在第 1.st TableColumn 中选择 JCheckBox,则我无法仅显示规则+ Mail TableColumn,仅显示TableRow中的所有组件,我怎样才能实现这一点
import java.awt.Component;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableWithCheckBoxOrBlank {
private Object[] columns = new Object[]{
"Select", "Name", "Rule", "Mail", "Include", "Phone"};
private Object[][] data = {
{false, "Bill", false, "Blabla@bla", false, "00 000 000"},
{false, "Edd", false, "Blabla@bla", false, "00 000 000"},
{false, "Paul", false, "Blabla@bla", false, "00 000 000"},
{false, "ZOO", false, "Blabla@bla", false, "00 000 000"}};
public void makeUI() { …Run Code Online (Sandbox Code Playgroud) 我创建了一个JTable,最后一列(第6列)是带有复选框的“选择”列。通过覆盖getColumnClass方法以返回Boolean.class来添加复选框。
DefaultTableModel dtm = new DefaultTableModel(data, header){
@Override
public Class<?> getColumnClass(int col) {
if(col == 5){
return Boolean.class;
}
return super.getColumnClass(col);
}
};
Run Code Online (Sandbox Code Playgroud)
现在,我必须使用这些复选框选择一些行,并将这些选定行中的一些值添加到数据库中。这是我使用的代码。
DefaultTableModel model = (DefaultTableModel) tblInvoiceList.getModel();
for(int i=0; i<model.getRowCount();i++) {
if ((Boolean)model.getValueAt(i, 5))
paydao.updateInvoiceWithPayment(model.getValueAt(i, 0).toString());
}
Run Code Online (Sandbox Code Playgroud)
当我遍历时,选中的复选框返回true。未选中的将抛出NullPointerException。该异常发生在(Boolean)model.getValueAt(i,5)部分中。如何使未经检查的返回false?
我想补充jRadioButton到jTable.我用了给定的代码
private class CustomCellRenderer extends DefaultTableCellRenderer {
/* (non-Javadoc)
* @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
return new javax.swing.JRadioButton();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行这个时,我会得到jTable一个不同颜色的列,当我点击单选按钮时没有任何反应.我正在使用netbeans.如果我尝试自定义,jTable则不会出现任何内容jTable.给我一个适当的指导.
我有两个关于jtable和默认表模型的问题
JTable table = new JTable();
TableModel model = new DefaultTableModel(colNames,rowcount);
table.setModel(model);
Run Code Online (Sandbox Code Playgroud)