[英]JTable Checkbox listener doesnt work properly
我有一个带有复选框的JTable。 该表实现了侦听器tableChanged,该表将触发一个true或false的事件selectionChanged,无论是否选中Checkbox。
在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);
}
@认真
也许这对您有帮助。
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++;
}
}
}
}
焦点的改变并不一定意味着用户改变了一个值。
您应该使用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);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.