在java swing中使用jTable的论坛主题视图

时间:2012-12-24 06:20:45

标签: java sql swing jtable listselectionlistener

我试图在java swing中创建一个论坛。目前我有不同的类别。主题由topicId区分。当我点击某些类别中的某一行时,我会尝试这样做,然后应用程序将重定向到topicId过滤的某些线程内容。

例如,我有一个帖子。该线程处于Disscussion类别,topidId为5.当我点击论坛主页上的“讨论”部分时,它会将我重定向到按数据库中的类别过滤的表。然后当我点击jTable第3行的线程时,它会在数据库中显示topicId 5的数据。

我知道有一些方法可以通过在jTable中使用getSelectedRow方法来实现。所以这是我的代码:

    jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    int viewRow = jTable.getSelectedRow();
                    if (viewRow >= 0) {
                        topicId = jTable.convertRowIndexToModel(viewRow);
                        System.out.println(topicId);
    }
                }
            }
        });

    jTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent e) {                      
    eForumTopics topics = new eForumTopics(topicId);
                topics.retrieveThread();
                getJFrame().dispose();
                eForumThreadContent myWindow = new eForumThreadContent(topicId);
                myWindow.getJFrame().setVisible(true);
            }
        });

这是我的retrieveThread方法:

    public boolean retrieveThread(){
    boolean success = false;
    ResultSet rs = null;
    DBController db = new DBController();
    db.setUp("IT Innovation Project");
    String dbQuery = "SELECT topic_title,topic_description,topic_by FROM forumTopics WHERE topic_id = " + topicId
            + "";
    rs = db.readRequest(dbQuery);
    db.terminate();
    return success;
}

}

我在jTable的第0列有一个Id列。因此,每当用户单击某一行时,该行的Id将存储到topicId中并执行以下操作。但是,即使我点击不同的行,这个应用程序仍然返回第0行。那么有没有其他方法可以在java swing中显示论坛的主题视图?我的意思是如果不使用getSelectedRow方法来获取topicId。提前谢谢。

1 个答案:

答案 0 :(得分:2)

而不是MouseListener上的JTable,您可以确定How to Use Tables中显示的所选行。 ListSelectionListener,图示为herehere,是对选择更改做出反应的好方法。

由于您的主题本质上是分层的,因此请考虑Outline视图,显示为here。它使用相同的选择监听器,显示为here