-1

jTableから行を選択し、その値をtopicIdに格納しようとしています。これが私のコードです。

    jTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent e) {
            if (jTable.getSelectedRow() >= 0 && jTable.getValueAt(jTable.getSelectedRow(), 0) != null) {
                    topicId = (Integer)jTable.getValueAt(jTable.getSelectedRow(), 0);}

            System.out.println(topicId);
                eForumTopics topics = new eForumTopics(topicId);
                topics.retrieveThread();
                getJFrame().dispose();
                eForumThreadContent myWindow = new eForumThreadContent(topicId);
                myWindow.getJFrame().setVisible(true);
            }
        });
    }

これがスクロールペインの私のコードです。

    private JScrollPane getJScrollPane() {
    if (jScrollPane == null) {
        jScrollPane = new JScrollPane();
        jScrollPane.setBounds(new Rectangle(75, 220, 800, 450));
        jScrollPane.setViewportView(getJTable());
    }
    return jScrollPane;
}

そして、これがjTableのコードです。

    private JTable getJTable() {
    if (jTable == null) {
        Vector columnNames = new Vector(); // Vector class allows dynamic
                                            // array of objects
        Vector data = new Vector();
        try {
            DBController db = new DBController();
            db.setUp("IT Innovation Project");
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
            String dsn = "IT Innovation Project";
            String s = "jdbc:odbc:" + dsn;
            Connection con = DriverManager.getConnection(s, "", "");
            String sql = "Select topic_title,topic_description,topic_by from forumTopics WHERE topic_category = '"+category+"'";
            java.sql.Statement statement = con.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            ResultSetMetaData metaData = resultSet.getMetaData();
            int columns = metaData.getColumnCount();
            for (int i = 1; i <= columns; i++) {
                columnNames.addElement(metaData.getColumnName(i));
            }
            while (resultSet.next()) {
                Vector row = new Vector(columns);
                for (int i = 1; i <= columns; i++) {
                    row.addElement(resultSet.getObject(i)); 
                }
                data.addElement(row);
            }
            resultSet.close();
            ((Connection) statement).close();
        } catch (Exception e) {
            System.out.println(e);
        }
        jTable = new JTable(data, columnNames);
        TableColumn column;
        for (int i = 0; i < jTable.getColumnCount(); i++) {
            column = jTable.getColumnModel().getColumn(i);
            if (i == 1) {
                column.setPreferredWidth(400); // second column is bigger
            }else {
                column.setPreferredWidth(200);
            }
        }
        String header[] = { "Title", "Description", "Posted by" };

        for (int i = 0; i < jTable.getColumnCount(); i++) {
            TableColumn column1 = jTable.getTableHeader().getColumnModel()
                    .getColumn(i);

            column1.setHeaderValue(header[i]);
        }
        jTable.getTableHeader().setFont( new Font( "Dialog" , Font.PLAIN, 20 ));
        jTable.getTableHeader().setForeground(Color.white);
        jTable.getTableHeader().setBackground(new Color(102, 102, 102));
        jTable.setEnabled(false);
        jTable.setRowHeight(100);
        jTable.getRowHeight();
        jTable.setFont( new Font( "Dialog" , Font.PLAIN, 18 ));
        jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

テーブルとスクロールペインのどちらに問題があるのか​​わかりません。たとえば、4、5、6など、jTableの行を選択すると、結果は行0を返し続けます。誰かが助けてくれますか?前もって感謝します。

4

1 に答える 1

4

選択した行をフィールドに格納するためにマウスリスナーを追加しても意味がありません。テーブルは選択された行を認識しており、さらに、マウスを使用せずに選択を変更できます。

選択が変更されるたびに何か(選択した行の詳細のロードなど)を実行する場合は、選択リスナーを追加します。

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
            int viewRow = table.getSelectedRow();
            if (viewRow >= 0) {
                int modelRow = table.convertRowIndexToModel();
                Integer topicId = tableModel.getTopicIdAtRow(modelRow);
                // todo load the details for topicId
            }
        }
    }
}); 
于 2012-12-23T13:32:35.597 に答える