繁体   English   中英

JTable Checkbox侦听器无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM