簡體   English   中英

JTable 的滾動條

[英]Scrollbar for JTable

所以我實際上有幾個問題需要幫助。

1.)實際上我可以將 SQL 結果顯示到 jList 中,到目前為止有效。 我實際上缺少的是列的名稱。 它只顯示了 MySQL 條目。

jList 中的數據庫結果

2.) 第二個問題是,我的數據庫實際上包含更多信息。 我還想在 jList 中展示這一點,但為了防止有一個巨大的 window 我想添加一個水平和垂直滾動條。

我嘗試添加一個,但每當我這樣做時,列表突然消失了。 將滾動條添加到列表實際上是什么樣子的?

我的 Java 程序的下一步將是 MySQL 操作。 我想更改接收到的數據集的值並將其發回。 我想我會用某種 getSelectedRow 來做到這一點,對嗎?

非常感謝您的幫助

public class aPanel extends JFrame{

    private JTable jt;
    

    
    public aPanel() {
        
        getContentPane().setLayout(null);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(0, 0, 780, 450);
        JPanel contentPane = new JPanel();
        contentPane.setBackground(new Color (51,51,51));
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JPanel leftTitle = new JPanel();
        leftTitle.setBackground(new Color (51,153,255));
        leftTitle.setBounds(0, 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);
        }
        
    }
}
  1. 不要使用 null 布局(擺脫該代碼)
  2. 不要使用 setBounds(...) (擺脫該代碼)

Swing 旨在與布局管理器一起使用。 布局管理器將根據布局管理器的規則給組件一個大小/位置。

我實際上缺少的是列的名稱。

為了使列名出現,必須將表添加到JScrollPane的視口中,並將滾動窗格添加到框架中。

所以基本的變化是:

//contentPane.setLayout(null);
contentPane.setLayout(new BorderLayout());

//contentPane.add(jt);
contentPane.add(new JScrollPane(jt), BorderLayout.CENTER);

這將允許表格填充框架中的可用空間。 滾動條將根據需要出現。 閱讀有關布局管理器的 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, 52, 251,167);
JScrollPane scrollPane = new JScrollPane(jt);
// contentPane.add(jt);
jt.setModel(tableModel);
contentPane.add(scrollPane);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM