问题描述
所以我实际上有几个问题需要帮助。
1.) 实际上我可以将 sql Result 显示到 jList 中,到目前为止还可以。 我实际上缺少的是列的名称。它只是向我显示 MysqL 条目。
2.) 第二个问题是,我的数据库实际上包含更多信息。我也想在 jList 中显示它,但为了防止出现一个巨大的窗口,我想添加一个水平和垂直滚动条。
我尝试添加一个,但每当我这样做时,列表就会突然消失。将滚动条添加到列表实际上会是什么样子?
我的 Java 程序的下一步将是 MysqL 操作。我想更改接收到的数据集的值并将其发回。我想我会用某种 getSelectedRow 来做到这一点,对吗?
非常感谢您的帮助
public class aPanel extends JFrame{
private JTable jt;
public aPanel() {
getContentPane().setLayout(null);
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
setBounds(0,780,450);
JPanel contentPane = new JPanel();
contentPane.setBackground(new Color (51,51,51));
contentPane.setBorder(new EmptyBorder(5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel leftTitle = new JPanel();
leftTitle.setBackground(new Color (51,153,255));
leftTitle.setBounds(0,230,450);
contentPane.add(leftTitle);
leftTitle.setLayout(null);
String[] columnNames = {"ID","First_Name","Last_Name"};
DefaultTableModel tableModel = new DefaultTableModel(columnNames,0);
try {
// Establishment of JDBC Connection
String url = "jdbc:MysqL://localhost:3306/eHealthDB?serverTimezone=UTC";
Connection con = DriverManager.getConnection(url,"root","root");
String sql = "SELECT ID,First_Name,Last_Name FROM patient;";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next() )
{
String pID = rs.getString("ID");
String vName = rs.getString("First_Name");
String nName = rs.getString("Last_Name");
String[] data = {pID,vName,nName};
tableModel.addRow(data);
}
jt = new JTable();
jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jt.setCellSelectionEnabled(false);
jt.setRowSelectionAllowed(true);
jt.setBorder(new LineBorder(Color.WHITE));
jt.setForeground(Color.WHITE);
jt.setBackground(new Color (59,59,59));
jt.setBounds(370,52,251,167);
contentPane.add(jt);
jt.setModel(tableModel);
} catch (Exception e1) {
System.out.println(e1);
}
}
}
解决方法
- 不要使用空布局(去掉那些代码)
- 不要使用 setBounds(...)(去掉那个代码)
Swing 旨在与布局管理器一起使用。布局管理器将根据布局管理器的规则为组件指定大小/位置。
我实际上缺少的是列的名称。
为了显示列名称,必须将表格添加到 JScrollPane
的视口中,并将滚动窗格添加到框架中。
所以基本的变化是:
//contentPane.setLayout(null);
contentPane.setLayout(new BorderLayout());
和
//contentPane.add(jt);
contentPane.add(new JScrollPane(jt),BorderLayout.CENTER);
这将允许表格填充框架中的可用空间。滚动条将根据需要出现。阅读关于 Layout Managers 的 Swing 教程中的部分,了解更多信息和工作示例。
,你的问题是“JList”,但你的代码显示了一个 JTable——这有点令人困惑
话虽如此,您这里有一个大问题:
jt.setBounds(370,52,251,167);
永远不要限制扩展组件(如 JTable 或 JTextArea)的大小,因为这会阻止它在 JScrollPane 中正常显示,因为它人为地限制了它的大小。如果你要限制任何东西的大小,它应该是 JScrollPane 的视口,并且只能非常小心地做到这一点。
接下来,您要将 JTable 本身添加到 GUI,并且应该将 JTable 添加到 JScrollPane,实际上是添加到 JScrollPane 的视口,然后将包含的 JScrollPane 添加到 GUI。
例如
jt = new JTable();
jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jt.setCellSelectionEnabled(false);
jt.setRowSelectionAllowed(true);
jt.setBorder(new LineBorder(Color.WHITE));
jt.setForeground(Color.WHITE);
jt.setBackground(new Color (59,59,59));
// jt.setBounds(370,167);
JScrollPane scrollPane = new JScrollPane(jt);
// contentPane.add(jt);
jt.setModel(tableModel);
contentPane.add(scrollPane);