如何将所有结果从JLabel显示到JFrame

时间:2018-01-06 16:13:22

标签: java swing

我在显示循环中包含的所有标签时遇到问题。在提供的代码中,他只接收最后一个查询结果。在我看来,其余的都被覆盖了。有什么想法吗?

public static void ViewTable(Connection con) throws SQLException {
    java.sql.Statement stmt = null;
    JFrame submenu = new JFrame("View");
    submenu.setSize(500, 500);
    submenu.setVisible(true);
    JLabel text = new JLabel("Lista przystankow: ");
    submenu.add(text, BorderLayout.NORTH);
    String query = "SELECT * FROM Stacja";
    try {
        stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        while (rs.next()) {
            String idStacja = rs.getString("idStacja");
            String nazwa = rs.getString("nazwa");
            JLabel input = new JLabel(" " + idStacja + " " + nazwa);
            submenu.add(input, BorderLayout.CENTER);
            System.out.println(" " + idStacja + " " + nazwa);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

2 个答案:

答案 0 :(得分:2)

  

...仅收到最后一个查询结果

因为你在while循环中使用相同的变量填充JLabel,而是可以使用全局变量来组合所有结果,然后在最后显示它,你可以使用StringBuilder例如:

StringBuilder message = new StringBuilder();
while (rs.next()) {
    message.append(space)
        .append(rs.getString("idStacja"))
        .append(" ")
        .append(rs.getString("nazwa"))
        .append(" ");
}
JLabel input = new JLabel(message.toString());
submenu.add(input, BorderLayout.CENTER);

答案 1 :(得分:0)

您将所有内容放在面板的CENTER中。我建议添加另一个具有例如的FlowLayout:

public static void ViewTable(Connection con) throws SQLException {
    java.sql.Statement stmt = null;
    JFrame submenu = new JFrame("View");
    submenu.setSize(500, 500);
    submenu.setVisible(true);
    JLabel text = new JLabel("Lista przystankow: ");
    submenu.add(text, BorderLayout.NORTH);
    String query = "SELECT * FROM Stacja";
    JPanel labelpanel = new JPanel();
    labelpanel.setLayout(new FlowLayout());
    try {
       stmt = con.createStatement();
       ResultSet rs = stmt.executeQuery(query);
       while (rs.next()) {
            String idStacja = rs.getString("idStacja");
            String nazwa = rs.getString("nazwa");              
            labelpanel.add( new JLabel(" " + idStacja + " " + nazwa));
            System.out.println(" " + idStacja + " " + nazwa);
        }
        submenu.add(labelpanel, BorderLayout.CENTER);
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

可能FlowLayout不是您期望的。还有其他可能性,例如GridBagLayout为您提供了更多定位组件的可能性。