ここに私のコードがあります -
class ButtonCellRenderer extends AbstractCellEditor
implements TableCellRenderer,TableCellEditor,MouseListener{
JTable table;
JLabel rendererLabel ;
JButton editButton ;
String text = "BAKRA";
public ButtonCellRenderer(JTable table, int column) {
this.table = table;
rendererLabel = new JLabel("value.png");
//rendererBut.setToolTipText("BUNTHAAAAAAAAAAAAAA");
rendererLabel .addMouseListener(this);
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(column).setCellRenderer( this );
columnModel.getColumn(column).setCellEditor( this );
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row
, int column) {
// TODO Auto-generated method stub
rendererLabel.setOpaque(true);
if(isSelected)
rendererLabel.setBackground( table.getSelectionBackground());
else
rendererLabel.setBackground(Color.WHITE);
return rendererLabel ;
}
public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column)
{
return rendererLabel ;
}
public Object getCellEditorValue() {
// TODO Auto-generated method stub
return text;
}
public void mousePerformed(ActionEvent ev) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null, "UOBS BUTTON PRESSED",
"BUTTON PRESSED"
,JOptionPane.ERROR_MESSAGE);
}
}
これではすべて正常に動作していますが、実際には JTable ウィンドウが開いて JLabel (画像) ベースの Column を直接クリックすると、画像がしばらく消え、テーブルは選択された行を -1 として返します。もう1つのポイントは、行の選択も前の列に制限されていることです。
正確には、テーブルに 4 列があり、Image(JLabel) が列番号 4 にある場合、画像または列 4 を直接クリックすると、3 列目まで行選択が行われ、行選択が -1 として返されます。 . しかし、他の列を選択すると、すべてが適切で正常に動作します。