JTable 单元格不可编辑,但可单击



我想在有人单击单元格时放置一个操作。 例如,打开另一个 GUI。但是如何使单元格可单击但不可编辑?这些是 sql 查询的结果。不过,我无法使表格无法编辑。我需要听众还是什么?如果是,我应该把它放在哪里?

这是我的代码:

public class AllResultsFromDB extends JFrame
{
    GUI ins = new GUI();
    public AllResultsFromDB(GUI x)
    {
        Vector columnNames = new Vector();
        Vector data = new Vector();
        this.ins = x;
        try
        {   
            // Initializing GUI class in order to call getSelectedTable() method.
//            GUI ins = new GUI();
            //System.out.println(ins.getSelectedTable());
            Login sgui = new Login();
            String dburl = "jdbc:oracle:thin:@localhost:1521:ORCL";
            Connection connection = DriverManager.getConnection( dburl, sgui.getUsername(), sgui.getPassword() );

            //  Fetch data from table specified by user
            String query = "SELECT * FROM "  + ins.getSelectedTable() + " ORDER BY id";
            System.out.println(query);
            Statement stmt = connection.createStatement();
            ResultSet rset = stmt.executeQuery(query);   
            ResultSetMetaData metad = rset.getMetaData();
            int columns = metad.getColumnCount();

            //  This loop gets the names of the columns
            for (int i = 1; i <= columns; i++)
            {
                columnNames.addElement( metad.getColumnName(i) );
                //columnNames.addElement("PROFILES");
            }


            //  This loop gets the data inside the rows
            while (rset.next())
            {
                Vector row = new Vector(columns);
                //Vector b = new Vector((Collection)button);
                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
        JTable table = new JTable(data, columnNames)
        { 
            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 );
        //table.addMouseListener(l);
        //table.setEnabled(false);
        //table.setDragEnabled(true);

        JPanel panel = new JPanel();
        getContentPane().add( panel, BorderLayout.SOUTH );
    } catch (SQLException e) {
        }

    }
}

首先看看如何使用表格

TableModel确定单元格isCellEditable方法是否可编辑。 此方法应返回false

直接向JTable提供列/数据信息时,JTable会在内部创建DefaultTableModel。 默认情况下,此类的 isCellEditiable 方法将返回true

通过使用类似 DefaultTableModel 的东西,您可以毫不费力地覆盖此方法,并将模型直接设置为表。

接下来,您需要将MouseListener附加到表

看看如何编写鼠标侦听器

然后,您可以使用getSelectedColumn,getSelectedRow来获取选定的单元格。

您还需要使用 convertRowIndexToModel 和 convertColumnIndexToModel 在视图索引和模型索引之间进行转换

相关内容

  • 没有找到相关文章

最新更新