2

我再次在显示来自 mysql 数据库的数据时遇到 JList 问题,我使用了下面给出的代码,但它没有在屏幕上显示任何内容..

JFrame f8 = new JFrame("Schedule");
f8.setVisible(true);
f8.setSize(1000, 1000);
JPanel jpa1 = new JPanel(new GridBagLayout());

String query = "SELECT * FROM Location";
DefaultListModel model = new DefaultListModel();
DefaultListModel model1 = new DefaultListModel();
try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Statement stmt = null;
    ResultSet rs;
    Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/SPL", "root", "PWD");
    stmt = (Statement) conn.createStatement();
    rs = stmt.executeQuery(query);
    while (rs.next()) {
        String stadium = rs.getString("Stadium");
        String city = rs.getString("City");
        model.addElement(stadium);
        model1.addElement(city);
    }
    JList list = new JList(model);
    JList list1 = new JList(model1);
    f8.add(jpa1);
    jpa1.add(list);
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
    list.setVisibleRowCount(1);
    JScrollPane listScroller = new JScrollPane(list);
} catch (SQLException e) {
    System.out.println("Message   : " + e.getMessage());
}

你能告诉我我哪里错了吗?

4

2 回答 2

7

根据代码片段很难说是什么问题,更不用说有点难以阅读的无格式代码,但是……

  • 您将一个列表添加到 JPanel,然后将相同的列表添加到 JScrollPane 并忽略 JScrollPane。
  • 您正在使用没有任何 GridBagConstraints 的 GridBagLayout
  • 您在 Swing 事件线程上执行了大量 JDBC 代码,这可能会锁定该线程。
  • 您创建了一个 JList,list1,但不要将它添加到任何内容中。

你应该考虑:

  • 在 GUI 之外测试您的数据库代码。划分问题以解决它,否则您将有太多变量会影响您的结果,从而很难知道是什么导致了什么。
  • 在代码中放置调试语句或使用调试器首先找出错误所在。
  • 在请求志愿者帮助时只发布格式正确的代码。理解别人的代码已经够难了,你应该努力不让它变得更难。我们非常感谢您的努力!
于 2012-08-27T21:21:36.353 回答
5

充满鳗鱼的气垫船几乎一针见血,但我原谅他,因为直到我开始把你的代码的整个部分都拿出来我没有看到它。

代码的最后一行是

JScrollPane listScroller = new JScrollPane(list);

您永远不会将此滚动窗格添加到您的 UI。它的效果是list从它的前一个父级 ( jpa1) 中删除 并添加到滚动窗格中,这样就不会在屏幕上显示任何内容。

我会遵循所有充满鳗鱼的气垫船的建议,然后弄清楚如何解决最后一个问题......

jpa1.add(new JScrollPane(list));

应该做

于 2012-08-27T21:33:58.320 回答