我有一个具有Checkboxes的JTable。 此表实现了侦听器tableChanged,如果选中了复选框,则会触发事件selectionChanged为true或false。
在selectionChanged中,有一个计数器可以知道检查了多少个复选框。但这不能正常工作。如果我点击复选框上的任意位置,它也会增加计数器。
这就是它的样子:
@Override
public void tableChanged(TableModelEvent P_evt)
{
.....
listener.selectionChanged(F_newValue);
@Override
public void selectionChanged(boolean P_selected)
{
if (P_selected)
{
nextButton.setEnabled(true);
selectedBundles++;
System.out.println("Selected Bundles: " + selectedBundles);
}
if(!P_selected)
{
nextButton.setEnabled(false);
selectedBundles--;
System.out.println("Selected Bundles: " + selectedBundles);
}
if (selectedBundles > 0)
{
nextButton.setEnabled(true);
}
else
{
nextButton.setEnabled(false);
}
答案 0 :(得分:0)
@seriously
也许这会对你有所帮助。
public class TableModel extends AbstractTableModel {
private List<CheckboxValues> checkbox = new ArrayList<CheckboxValues>();
public void assignData( List<CheckboxValues> checkbox ) {
this.checkbox = checkbox;
fireTableDataChanged();
}
//Fill Model with Data
@Override
public Object getValueAt(int row, int col) {
switch( col ) { // Es wird die Spalte ausgewählt
case 0:
return checkbox.row0;
case 1:
return checkbox.row1;
}
@Override
public void setValueAt( Object value, int row, int col ) {
int columnFromCheckboxes;
int numberOfselectedCheckboxes;
if(col == columnFromCheckboxes ){
if(value == true){
columnFromCheckboxes++;
}
}
}
}
答案 1 :(得分:0)
焦点的更改并不一定意味着用户更改了值。
您应该使用TableModelListener来监视基础数据的实际更改。
这是一个TableModelListener的简单示例,它将计算复选框的数量。
//Setup a listener for changes in the table
table.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
int selectedBundles= 0;
//Count all checked boxes
for(int i=0; i<table.getRowCount(); i++){
if(table.getValueAt(i, COLUMN_NUMBER).equals(Boolean.TRUE)){
selectedBundles++;
}
}
System.out.println("Selected Bundles: " + selectedBundles);
}
});