0

チェックボックスレンダリング用のカスタム TableCellRenderer で奇妙な問題が発生しています。これは最初の行では正しく動作しますが、他の行では、最初のクリックと 2 番目のクリックの間のすべてのチェックボックスを未選択/選択に設定します。コードは次のとおりです。

/*This Class is meant to be the Concrete Aspect*
*              of CheckBox in JTable           */

public class CheckItem{
private String label;
private boolean isSelected=false;

public CheckItem(String label){
    this.label=label;
}

public boolean isSelected(){
    return isSelected;
}

public void setSelected(boolean isSelected){
    this.isSelected=isSelected;
}

@Override
public String toString(){
    return label;
}
}

そして今、私が使用するレンダラー:

/*This Class is a renderer simulating a CheckBox in JTable Column(s)*/

public class CheckTableRenderer extends JCheckBox
    implements TableCellRenderer{

@Override
public Component getTableCellRendererComponent(JTable table,
        Object value, boolean isSelected, boolean hasFocus, 
        int row, int column) {
    if(value==null){
        return null;
    }

    if (isSelected) {
            setForeground(table.getSelectionForeground());
            setBackground(table.getSelectionBackground());
    } 
    else {
            setForeground(table.getForeground());
            setBackground(table.getBackground());
    }

    CheckItem prov=(CheckItem)value;

    if(!prov.toString().equals("")){
        this.setText(prov.toString());
    }       
    else 
        setHorizontalAlignment(CENTER);

    this.setSelected(prov.isSelected());

    return this;
} 
}

そして最後に値を変更する mouseListener は、クラス Listeners に含まれています。

public static MouseListener createCheckMouseListener(final JTable table,final int column){

    MouseListener m=new MouseAdapter() {
        public void mouseClicked(MouseEvent e){
            final int x=table.getSelectedRow();
            final int y=table.getSelectedColumn();

            if((y==column || column==-1)&& y==table.columnAtPoint(e.getPoint())){
                try{
                    CheckItem item=(CheckItem)table.getValueAt(x,y);
                    item.setSelected(!item.isSelected());
                    table.repaint(table.getCellRect(x,y,false));
                }catch(java.lang.NullPointerException e2){
                    System.out.println("ERREUR!!!!");
                }
            }
        }
    };

    return m;
}

とその関連 : mytable.addMouseListener(Listeners.createCheckMouseListener);

このコードはすべて正しいようですが、行に関しては結果が良くありません。最初の 1 つを除きます。CheckItem の代わりにブール値を使用して動作しますが、チェックボックスに文字列を入れる必要があります。私はそれを修正することができず、問題がこれらの部分にあるのかどうかさえ疑問に思っています... 助けてもらえますか?

ありがとう。

ここに例があります:SSCCE

4

0 に答える 0