我在显示循环中包含的所有标签时遇到问题。在提供的代码中,他只接收最后一个查询结果。在我看来,其余的都被覆盖了。有什么想法吗?
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();
}
}
答案 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为您提供了更多定位组件的可能性。