【问题标题】:How to add buttons inside a cell of jtable and give it action如何在 jtable 的单元格内添加按钮并赋予其操作
【发布时间】:2013-05-28 19:11:33
【问题描述】:

我知道这个问题之前已经回答过了,但考虑到我还是个新手,我想不出一种方法来执行操作并阻止单元格编辑,我已经尝试了多种方法,但是当我点击时,我可以成功呈现按钮它,它编辑单元格而不是按下按钮,我知道为了避免单元格编辑我应该创建一个抽象表并覆盖这个方法:

public boolean isCellEditable(int row, int col) {
        //Note that the data/cell address is constant,
        //no matter where the cell appears onscreen.
        if (col < 3) {
            return false;
        } else {
            return true;
        }
    }

但是我使用默认的 JTable,所以这是我用于面板和单元格渲染器的代码:

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer {

    public Component getTableCellRendererComponent(
                        final JTable table, Object value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column) {


            if(column < 3)
            {
             JLabel campo =   new JLabel(value.toString());


            this.add(campo);

            }
            if(column > 2)
            {

                 //this is a button
                 this.add(botaoteste);





            materialtable.revalidate();
            materialtable.repaint();


            }
            return this;

    }

这是我用来从 sql 检索数据到 Jtable 的代码(我自定义了 DefaultJTable 代码)

String[] columnNames={"teste","abc","def"};                 
     Object[][] data = new Object[1][4];
            if(createConnection())
            {
                try {
                    Statement statemt = conLogin.createStatement();
                    ResultSet rs = statemt.executeQuery("SELECT * FROM Materiais");
                    //ResultSet rs = statemt.executeQuery("SELECT * FROM Materiais");
                    rsmtdata = rs.getMetaData();

                    //int columns = rsmtdata.getColumnCount();
                     columnNames = new String[]{rsmtdata.getColumnName(1),rsmtdata.getColumnName(2),rsmtdata.getColumnName(3),"Deletar"};
                     if(rs.next())
                     {
                        data[0][0] = rs.getString(1);
                        data[0][1] = rs.getString(2);
                        data[0][2] = rs.getString(3);
                        data[0][3] = new Boolean(false);
                     }
                     while (rs.next())
                     {

                        Object[][] temp = new Object[data.length+1][4];
                        for(int i=0;i < data.length;i++)
                        {
                            for(int j = 0;j < 4;j++)
                            {
                                temp[i][j] = data[i][j];
                            }

                        }
                        temp[data.length][0] = rs.getString(1);
                        temp[data.length][1] = rs.getString(2);
                        temp[data.length][2] = rs.getString(3);
                        temp[data.length][3] = new Boolean(false);
                        data = temp;



                     }
materialtable = new javax.swing.JTable(data, columnNames);
materialtable = new javax.swing.JTable(data, columnNames){ 
            public TableCellRenderer getCellRenderer( int row, int column ) {
                return new PlusMinusCellRenderer();
            }
         };

materialtable.setRowHeight( 32 );

                } catch (SQLException ex) {
                    Logger.getLogger(ProfessorForm.class.getName()).log(Level.SEVERE, null, ex);
                }

                 }

//Create the scroll pane and add the table to it.
materialtable.setBackground(new java.awt.Color(153, 255, 51));

materialtable.setSelectionBackground(new java.awt.Color(255, 255, 51));

materialtable.setSelectionForeground(new java.awt.Color(255, 102, 0));



jScrollPane3.setViewportView(materialtable);

所以要根据这个线程在表格中呈现按钮: Adding Buttons inside cell of JTable along with data?

我的问题非常直接,我如何禁用行编辑(就像 isCellEditable() 方法的用法一样)并对按钮进行操作? 非常感谢这里的任何帮助,请考虑一下我还是新手,所以请提供详细信息或样品! 亲切的问候, 罗慕洛·罗梅罗

【问题讨论】:

  • 对于example,您需要both 渲染器 和编辑器。
  • 你似乎很乐意覆盖你的JTable 的方法getCellRenderer,那么为什么不isCellEditable
  • 哇,伙计,很好的参考,非常感谢您的帮助,这确实完成了这项工作,现在我有一个带有按钮的表格,并且按钮触发操作:D 再次感谢我真的很感激!!!一切顺利,
  • 我如何“评价”用户,比如给他们点赞,因为当人们帮助我时我感到非常感激,然后我想给他们点赞......谢谢

标签: java swing button jtable action


【解决方案1】:

你需要both渲染器和编辑器,如example所示。对于details,请参阅如何使用表格:编辑器和渲染器。切线,您应该覆盖 isCellEditable() 中的 TableModel 方法,而不是扩展 JTable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多