JTable Checkbox侦听器无法正常工作

时间:2015-09-18 08:48:00

标签: java swing checkbox

我有一个具有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);
        }

2 个答案:

答案 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);
    }
});
相关问题