-2

クリック可能なテーブルがありますが、ダブルクリックすると、指示されたことを実行する代わりに、編集モードになります。isCellEditable() メソッドを試しましたが成功しませんでした。多分私は何か間違ったことをしていますか?

コードは次のとおりです。

public AllResultsFromDB(GUI x) {
   final Vector columnNames = new Vector();
   final Vector data = new Vector();


        for (int i = 1; i <= columns; i++) {
            columnNames.addElement(metad.getColumnName(i));
        }


        //  This loop gets the data inside the rows

        while (rset.next()) {
            final Vector row = new Vector(columns);


            for (int i = 1; i <= columns; i++) {
                row.addElement(rset.getObject(i));

            }

            data.addElement(row);
            //data.addElement(b);
        }

        rset.close();
        stmt.close();
        connection.close();


        //  Create table with results

      final JTable  table = new JTable(data, columnNames) {


            public boolean isCellEditable() {
                           return false;
                       }



            public Class getColumnClass(int column) {

                for (int row = 0; row < getRowCount(); row++) {


                    Object obj = getValueAt(row, column);




                    if (obj != null) {

                        return obj.getClass();

                    } 
                } 

                return Object.class;
            }


        };


        JScrollPane scroll = new JScrollPane(table);
        getContentPane().add(scroll);


        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.SOUTH);


        table.addMouseListener(new MouseListener() {

            public void mousePressed(MouseEvent e) {

                //System.out.println(table.getSelectedRow());

            }

            public void mouseReleased(MouseEvent e) {
                //System.out.println(table.getSelectedRow());

            }

            public void mouseEntered(MouseEvent e) {
                //System.out.println(table.getSelectedRow());

            }

            public void mouseExited(MouseEvent e) {
                //System.out.println(table.getSelectedRow());
            }

            public void mouseClicked(MouseEvent e) {

                if(e.getClickCount()==2){


                System.out.println(table.getSelectedRow());
            }

            }
        });
4

2 に答える 2

3

isCellEditableオーバーライドしようとしたメソッドには、次のような異なるシグネチャがあります:

public boolean isCellEditable(int row, int column) 

そうでなければ、特定のセルをどのように指定できますか? 次回@Override注釈を追加すると、これを見つけるのに役立ちます。

いずれにせよ、これはJTable編集不可にする正しい方法ではありません。正しい方法は、そのメソッドAbstractTableModelで false を返すカスタムを提供することです。isCellEditableセルが編集可能かどうかを決定するべきではありません。JTableそれを決定するのはモデルの義務です。実際、 isCellEditable メソッドはJTable、セルが編集可能かどうかをそのモデルに尋ねるだけです。はJTableコンテンツを表示するだけで、データを決定して格納するのはモデルです。

JTable の基本的な機能だけを使用しているように見えるので、独自のテーブル モデルをロールする必要はありませんDefaultTableModel。a が機能し、そのisCellEditableメソッドを上書きできます。

于 2013-10-01T16:02:27.150 に答える
2

あなたはそれほど遠くない。

実際のメソッドisCellEditableは 2 つのパラメーターを受け取るため、メソッドは実際には何もオーバーライドしていません。

参照: http://docs.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html#isCellEditable%28int,%20int%29

正しい方法のために。

于 2013-10-01T16:01:02.213 に答える