0

ここに私のコードがあります -

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 として返されます。 . しかし、他の列を選択すると、すべてが適切で正常に動作します。

4

1 に答える 1

4

画像を表示するためにカスタム レンダラーを作成する必要はありません。JTable は、アイコンのデフォルトのレンダラーをすでにサポートしています。モデルに ImageIcon を追加するだけです。次に、getColumnClass()メソッドをオーバーライドして、その列の Icon.class を返す必要があり、適切なレンダラーが使用されます。

ある種のクリック可能なボタンを作成しようとしている場合は、アイコンもサポートするテーブルボタン列を使用できます。

于 2011-11-22T04:33:30.147 に答える