-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,它的isCellEditable方法返回 false。不应该决定单元格JTable是否可编辑,模型有责任决定它:实际上 isCellEditable 方法JTable只是询问其模型单元格是否可编辑。显示内容,仅此JTable而已,它是决定和包含数据的模型。

由于您似乎只使用了 JTable 的基本功能,因此您不需要滚动自己的表模型,aDefaultTableModel将为您工作,您可以覆盖它的isCellEditable方法。

于 2013-10-01T16:02:27.150 回答
2

你离得并不远。

实际的方法isCellEditable有两个参数,所以你的方法实际上并没有覆盖任何东西。

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

为正确的方法。

于 2013-10-01T16:01:02.213 回答