2016-10-29 50 views
-1

我爲我的JTable添加了JScrollPane。它出現了,但不可滾動。JScrollPane不屬於JTable

public class AddDepartment extends JFrame { 
    private static JPanel contentPane; 
    private Connection DBConnection; 
    static Connection conn = new DBConnection().connect(); 
    static PreparedStatement pstmt = null; 
    static ResultSet rs = null; 
    static DefaultTableModel model = null; 
    private static JTable tableDepartments; 
    private static JScrollPane scrollPane; 

    public AddDepartment() throws SQLException { 
     model = new DefaultTableModel(); 
     tableDepartments = new JTable(model); 
     tableDepartments.setRowSelectionAllowed(false); 
     tableDepartments.setEnabled(false); 
     tableDepartments.setSize(new Dimension(197, 66)); 
     tableDepartments.setLocation(161, 34); 
     tableDepartments.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

     updateDepartments(); 
    } 

    private static void updateDepartments() throws SQLException { 
     try { 
      String sql = "SELECT Name FROM Departments"; 
      pstmt = conn.prepareStatement(sql); 
      rs = pstmt.executeQuery(); 

      model.addColumn("Name"); 
      while (rs.next()) { 
       String departmentName = rs.getString("Name"); 
       model.addRow(new Object[] { departmentName }); 
      } 
      if (tableDepartments.getRowCount() > 5) { 
       scrollPane = new JScrollPane(tableDepartments); 
       scrollPane.setSize(new Dimension(10, 50)); 
       scrollPane.setLocation(360, 34); 
       scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
       contentPane.add(scrollPane); 
      } 
      contentPane.add(tableDepartments); 
     } catch (Exception ex) { 
      JOptionPane.showMessageDialog(null, ex); 
     } finally { 
      rs.close(); 
      pstmt.close(); 
     } 
    } 
} 

部門表:

Departments table

This is how it looks like

上圖爲它的樣子。我不能scrolldown。

+1

(1)這不是一個SSCCE。有多少次你必須被告知我們不能執行這段代碼,因爲我們沒有訪問你的數據庫!你的問題是關於滾動,這與從數據庫獲取數據完全無關。您已被告知多次發佈您的SSCCE硬編碼數據,以便我們可以執行您的代碼以查看到底發生了什麼。如果你需要幫助而不是在同一主題上提問4個問題。通過適當的SSCCE,這將在第一個問題中得到解決。 – camickr

回答

2

通過限制你的JTable大小:

tableDepartments.setSize(new Dimension(197, 66)); 

你阻止它需要上漿,從而防止它滾動。不要這樣做,而是讓它擴展到所需的大小。如果這不能解決您的問題,那麼您將需要創建併發布有效的sscce,這是一個沒有數據庫代碼的程序,沒有與問題無關的代碼,並且可以向我們展示您的問題。

的其他問題包括過度使用static修飾符的毛,和你設置絕對大小和位置(可能使用空佈局),不過那是另外一個問題


編輯
你'將您的JTable 兩次添加到GUI中,一次添加到JScrollPane(好),再次添加到contentPane(壞),這會讓您感到困惑,因爲您只能將組件添加到一個容器中。第二個添加是從jscrollpane中移除jtable。解決方案:不要這樣做。將jscrollpane添加到contentPane,而不是 JTable。

因此擺脫:

contentPane.add(tableDepartments); 
+0

但是,如果我刪除你寫的行,表消失。你能否解釋你最後一段想說的話? – Munchmallow

+0

@Munchmallow:然後創建併發布[mcve] a [sscce](http://sscce.org)。請檢查鏈接。回顧最後一條語句,如果使用空佈局,並設置組件的大小,則可以創建幾乎不可能調試或增強的剛性gui。過度使用靜態代碼會增加代碼的連通性,從而增加錯誤的風險。 –

+0

@Munchmallow:狗屎,你添加JTable **兩次**到GUI,一次到jscrollpane(好),然後再次到contentpane(壞)。不要這樣做! –