2

これは以前に回答されたことを知っていますが、まだ初心者であることを考えると、アクションを実行してセルの編集をブロックする方法がわかりません。いくつかの方法で試しましたが、ボタンをクリックするとボタンを正常にレンダリングできますボタンを押す代わりにセルを編集します。セルの編集を避けるために、抽象テーブルを作成してこのメ​​ソッドをオーバーライドする必要があることを知っています。

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);

このスレッドに基づいて、テーブル内のボタンをレンダリングするには: データと共に JTable のセル内にボタンを追加しますか?

私の質問は非常に簡単です。行の編集を無効にして (isCellEditable() メソッドの使用と同じように)、ボタンにアクションを与えるにはどうすればよいですか? ここでの助けは大歓迎です。まだ初心者なので、詳細な情報やサンプルが必要な場合は考慮してください! よろしく、 ロムロ・ロメロ

4

1 に答える 1

1

この例に示すように、レンダラーエディターの両方が必要です。詳細については、テーブルの使用方法: エディターとレンダラー参照してください。接線的には、 を拡張するのではなく、メソッドをオーバーライドする必要があります。isCellEditable()TableModelJTable

于 2013-05-29T06:48:39.127 に答える