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。还有一点是,行选择也仅限于前一列。

准确地说,如果我的表有 4 列并且 Image(JLabel) 位于第 4 列,那么如果我直接单击图像或第 4 列,则行选择将发生到第 3 列,并将行选择返回为 -1 . 但是,如果我选择任何其他列,则一切正常并且工作正常。

4

1 回答 1

4

无需创建自定义渲染器来显示图像。JTable 已经支持图标的默认渲染器。只需将 ImageIcon 添加到模型中。然后,您需要重写该getColumnClass()方法以返回该列的 Icon.class,并且将使用正确的渲染器。

如果您正在尝试创建某种可点击按钮,那么您可以使用也支持图标的表格按钮列。

于 2011-11-22T04:33:30.147 回答