チェックボックスレンダリング用のカスタム 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