2017-08-04 51 views
1

是否可以從Internet Download Manager創建一個JTable,如下所示:如何創建一個類似Internet Download Manager應用程序中使用的表的JTable?

正如您所看到的,它顯示圖片中的最後一列是添加日期,右側是空列,右側行的網格不是行,而列它不屬於具有標題的實際列,因爲所選行在Data Added列處結束,當我嘗試table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);時,我得到了此結果。

所以現在我希望表填滿UPS空的空間,如第一張圖片,仍然會創建一個水平滾動條時,表的列達到最大寬度像下面。

編輯: Marco13說 - 「?你有沒有考慮增加一個空列」

是的,看看看看這個

空列的所有列的一部分,並且在底部水平滾動條,因爲它是在幀展開,有什麼我想要做的是...

  1. 所有的列都不會自動調整大小,除了調整幀大小時的空列。
  2. 空列固定在框架的右側,因此在調整大小時不會留下空白窗格。
  3. 當標題的所有列在整個框架中都可見時,不應出現水平滾動條。
  4. 無法選擇其中的空列和行。
+0

當然。你需要JTable + JScrollBar – Blasanka

+0

問題的核心點是如何在右側創建行的網格(而不是隻留下空間)? – Marco13

+0

@ Marco13 - 確實如此。如您所見,右側的那些行網格不是行,並且它的列不屬於具有標題的實際列,因爲所選行在「已添加數據」列中結束。 –

回答

1

你需要下面的代碼使用垂直和水平滾動條:

scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
scrollPane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_AS_NEEDED); 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

要調整表時JFrame調整大小。您需要覆蓋getScrollableTracksViewportWidth()

完整代碼:

import java.awt.CardLayout; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.TableColumn; 
public class TableExample { 
    JFrame frame; 
    JTable table; 
    JScrollPane scrollPane; 

    public TableExample(){ 
     initComp(); 
    } 

    public void initComp(){ 
     frame = new JFrame(); 
     frame.setSize(500, 400); 
     frame.setLayout(new CardLayout()); 

     table = new JTable(100, 5){ 
       public boolean getScrollableTracksViewportWidth(){ 

        return getPreferredSize().width < getParent().getWidth(); 

       } 
      }; 

     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     //table.setFillsViewportHeight(true); 
     //table.setPreferredScrollableViewportSize(new Dimension(300, 200)); 

     scrollPane = new JScrollPane(table); 
     scrollPane.setOpaque(true); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_AS_NEEDED); 


     frame.add(scrollPane); 

     //-----this part from doc 
     TableColumn column = null; 
     for (int i = 0; i < 5; i++) { 
      column = table.getColumnModel().getColumn(i); 
      if (i == 4) { 
       column.setPreferredWidth(200); //third column is bigger 
      } else { 
       column.setPreferredWidth(100); 
      } 
     } 
     //---- 

     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new TableExample(); 
    } 
} 

輸出:

enter image description here

你可以得到一些想法:How to make JTable both AutoResize and horizontall scrollable?this question @camickr answer可能會有幫助。

最後,如果你想adjest列大小對其內容的寬度(該值的長度),則需要使用Table Column Adjuster

+0

仍然不符合我第一個問題的要求。你的代碼就像我的第二個示例圖像。 –

+0

@MangKanor我忘了添加代碼來調整大小。現在我已經更新了答案, – Blasanka

相關問題