Java 表标题中的Jcheckbox给出了一个异常
我已经创建了一个Java 表标题中的Jcheckbox给出了一个异常,java,swing,jtable,jcheckbox,Java,Swing,Jtable,Jcheckbox,我已经创建了一个JTable。有一个名为“导出”的列标题,带有一个复选框。当我们选中标题的复选框时,所有行中的复选框也应该被选中 这是我的密码: private void initializeTable() { tableModel = (DefaultTableModel) locationJTable.getModel(); locationJTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); t
JTable
。有一个名为“导出”的列标题,带有一个复选框。当我们选中标题的复选框时,所有行中的复选框也应该被选中
这是我的密码:
private void initializeTable() {
tableModel = (DefaultTableModel) locationJTable.getModel();
locationJTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableModelListener = new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
processTableChange(e);
}
};
locationJTable.getModel().addTableModelListener(tableModelListener);
tableSelectionListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
//processSelection(e);
}
};
locationJTable.getSelectionModel().addListSelectionListener(tableSelectionListener);
Map<String, TableColumn> columns = new HashMap<String, TableColumn>() {
{
put("Export", locationJTable.getColumnModel().getColumn(INDEX_OF_THE_EXPORT_COLUMN));
}
};
for (Map.Entry<String, TableColumn> entry : columns.entrySet()) {
TableColumn column = entry.getValue();
ItemListener itemListener = (ItemEvent e)
-> {
Object source = e.getSource();
if (source instanceof AbstractButton == false) {
return;
}
boolean checked = e.getStateChange() == ItemEvent.SELECTED;
for (int x1 = 0, y1 = locationJTable.getRowCount(); x1 < y1; x1++) {
**if ((boolean) locationJTable.getValueAt(x1, column.getModelIndex()) != checked)** {
locationJTable.setValueAt(checked, x1, column.getModelIndex());
}
}
};
boolean selected = true;
if (entry.getKey().equals("Export")) {
selected = false;
}
CheckBoxHeader header = new CheckBoxHeader(itemListener, selected, entry.getKey(), column.getModelIndex());
locationJTable.getTableHeader().setBackground(new Color(255, 255, 255));
column.setHeaderRenderer(header);
checkBoxHeaders.put(header, itemListener);
}
}
private void initializeTable(){
tableModel=(DefaultTableModel)locationJTable.getModel();
locationJTable.setSelectionMode(ListSelectionModel.SINGLE_选择);
tableModelListener=新的tableModelListener(){
@凌驾
公共作废表已更改(TableModelEvent e){
可处理的变更(e);
}
};
locationJTable.getModel().addTableModelListener(tableModelListener);
tableSelectionListener=新建ListSelectionListener(){
@凌驾
public void值已更改(ListSelectionEvent e){
//工艺选择(e);
}
};
locationJTable.getSelectionModel().addListSelectionListener(tableSelectionListener);
Map columns=newhashmap(){
{
put(“导出”,locationJTable.getColumnModel().getColumn(导出列的索引));
}
};
对于(Map.Entry:columns.entrySet()){
TableColumn column=entry.getValue();
ItemListener ItemListener=(ItemEvent e)
-> {
对象源=e.getSource();
if(抽象按钮的源实例==false){
返回;
}
选中布尔值=e.getStateChange()==ItemEvent.SELECTED;
对于(int-x1=0,y1=locationJTable.getRowCount();x1
我在构造函数中调用这个函数。当我勾选标题中的复选框而不是勾选其他复选框时,它会显示NullPointerException
。但是,如果我先勾选一行中的复选框,然后勾选表头复选框,它会按预期选中表行中的所有其他复选框<代码>locationJTable.getValueAt(x1,column.getModelIndex()在异常发生时进行调试时显示null
为什么?1)“显示以下异常”。。什么例外?始终复制/粘贴错误和异常输出!2) 为了更快地获得更好的帮助,请发布一个or。为什么要删除异常屏幕截图?这有助于读者更好地理解问题。当您发布mcve(包括测试数据)和完整的异常错误消息时,不要忘记标记导致异常的行。