组合两个不同的jTable并将按钮添加到jTable中

时间:2013-01-17 13:07:44

标签: sql swing jtable defaulttablemodel

我尝试使用java swing进行论坛。这是我的表格代码:

    public void SetUpJTable() {
    DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
    String[] data = new String[4];
    db.setUp("IT Innovation Project");
    String sql = "Select topic_title,topic_description,topic_by from forumTopics WHERE topic_id = "
            + topicId + "";
    ResultSet resultSet = null;
    resultSet = db.readRequest(sql);
    try {
        while (resultSet.next()) {
            data[0] = resultSet.getString("topic_title");
            data[1] = resultSet.getString("topic_description");
            data[2] = resultSet.getString("topic_by");
            tableModel.addRow(data);        
        }
        resultSet.close();
    } catch (Exception e) {
        System.out.println(e);
    }
}

我设置此表以检索用户从主页面选择某个主题的主题详细信息。我设置了另一个表来存储用户的回复。这是它:

    public void SetUpJTableComment() {
    DefaultTableModel tableModel1 = (DefaultTableModel) jTableComment
            .getModel();
    String[] data = new String[3];
    db.setUp("IT Innovation Project");
    String sql = "Select reply_content,reply_by from forumReplies WHERE reply_topic = "
            + topicId + "";
    ResultSet resultSet = null;
    resultSet = db.readRequest(sql);
    try {
        while (resultSet.next()) {
            data[0] = resultSet.getString("reply_content");
            data[1] = resultSet.getString("reply_by");
            tableModel1.addRow(data);
        }
        resultSet.close();
    } catch (Exception e) {
        System.out.println(e);
    }
}

这就是我设置表格的方式:

    private JTable getJTableComment() {
    String header[] = { "Comment", "Reply By" };
    if (jTableComment == null) {
        jTableComment = new JTable() {
            public boolean isCellEditable(int nRow, int nCol) {
                return false;
            }
        };
    }
    DefaultTableModel tableModel1 = (DefaultTableModel) jTableComment
            .getModel();
    tableModel1.setColumnIdentifiers(header);

    jTableComment.getColumnModel().getColumn(0).setMinWidth(700);
    jTableComment.getColumnModel().getColumn(0).setMaxWidth(800);

    jTableComment.getColumnModel().getColumn(1).setMinWidth(97);
    jTableComment.getColumnModel().getColumn(1).setMaxWidth(100);

    jTableComment.getTableHeader().setFont(
            new Font("Dialog", Font.PLAIN, 20));
    jTableComment.getTableHeader().setForeground(Color.white);
    jTableComment.getTableHeader().setBackground(new Color(102, 102, 102));
    jTableComment.setRowHeight(50);
    jTableComment.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    jTableComment.setFont(new Font("Dialog", Font.PLAIN, 18));
    return jTableComment;
}

它与两个分离表完美配合。我想知道是否有办法将这两个表组合成一个表?我如何自定义表格使其看起来不太受欢迎,因为我当前的表格只是...固定表格,我的老师让我改进它,但我不知道这样做。我尝试在表中添加按钮,但我意识到我无法从try语句添加它,因为那是直接从数据库中检索数据。任何指南?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用SQL join构造,并使一个表包含更多列:

select topic_title,topic_description,topic_by,
       reply_content,reply_by 
         from forumTopics join forumReplies 
           on (forumTopics.topic_id=forumReplies.topic_id)  WHERE topic_id = 1234

然后按照您已经在的五列结果集构建模型。

但是,如果对论坛主题的回复不止一个,主题部分将在表格中重复。

要使表格看起来不像桌子,可以试试JTreeTable中的Swing Labs,它允许有类似树状的子部分,完全是必需的。它不是系统库的一部分,但是您需要下载它。有关如何只使用JTreeTable的一些源代码可以找到here

关于JTreeTable的外观是Swing Labs,你可以在他们web-startable demo中看到。它还会自动显示代码示例。