2011-05-10 40 views
6

在我的應用程序中,我顯示了包含大量數據的表的列表。所有的表格可能都不適合在窗口中,我們需要滾動查看底部表格。在這裏,我需要展開/摺疊自然的表格。用戶可以在所有表​​格中選擇他希望看到的表格。這是我應用程序的示例屏幕截圖。 enter image description here如何在java swing應用程序中爲JTables實現展開/摺疊本質

我該怎麼做。任何建議將不勝感激。

回答

1
public DesignGridTest(){ 

     JFrame frame = new JFrame("Example 1"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel masterpanel = new JPanel(); 
     DesignGridLayout masterlayout = new DesignGridLayout(masterpanel); 

     JCheckBox chk1 = new JCheckBox("Check Box1"); 
     masterlayout.row().left().add(chk1);  

     JPanel panel1 = new JPanel(); 
     JTable table1 = new JTable(); 
     table1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {null, null, null, null}, 
       {null, null, null, null}, 
       {null, null, null, null}, 
       {null, null, null, null} 
      }, 
      new String [] { 
       "Title 1", "Title 2", "Title 3", "Title 4" 
      } 
     )); 
     panel1.add(table1); 
     final IRow row1 = masterlayout.row().grid().add(panel1); 
     chk1.setSelected(true); 
     chk1.addItemListener(new ItemListener() 
     { 
      @Override public void itemStateChanged(ItemEvent event) 
      { 
       if (event.getStateChange() == ItemEvent.SELECTED) 
        row1.show(); 
       else 
        row1.hide(); 
       frame.pack(); 
      } 
     });  
     frame.add(masterpanel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
    public static void main(String a[]){new DesignGridTest();} 

添加面板(PANEL1,是Panel2 ..)到'masterlayout'以獲得您想要的外觀

3
  1. 您可以嘗試JXTreeTableTreeTable

  2. ,或者你可以切換JTable中的知名度作展開/摺疊效果。首先,當它是可見的並且使用選擇摺疊使用setVisible(false);並且在展開中進行反轉。 [不知道這將工作或沒有。]

+0

對於第2點,它可能會工作,具體取決於使用的LayoutManager。一些LayoutManager能夠處理組件的動態可見性,而其他的不能。 – jfpoilpret 2011-05-10 06:43:35

+0

@jfpoilpret:是的。這就是爲什麼我寫了不確定的關鍵點,因爲我們不知道OP使用哪個佈局管理器。 – 2011-05-10 06:45:57

2

展開/基於可視性崩潰效應,提出由哈利第二個選項,可以很容易實現,如果你使用DesignGridLayout

DesignGridLayout layout = new DesignGridLayout(panel); 
... 
JCheckBox expand1 = newCheckBox("First"); 
layout.row().left().add(expand1); 
final IRow row = layout.row().grid().add(table1); 
expand.setSelected(true); 
expand.addItemListener(new ItemListener() 
{ 
    @Override public void itemStateChanged(ItemIvent event) 
    { 
     if (event.getStateChanged() == ItemIvent.SELECTED) 
      row.show(); 
     else 
      row.hide(); 
    } 
}; 

重複上面的代碼(在「...」)爲每在你的panel表中。

隨着上面的代碼,每個標籤將被一個複選框取代,當未選中時,將隱藏下面的表格。

您可以查看「Dynamic Layouts」部分下的DesignGridLayout示例應用程序(在主頁上以WebStart的形式提供)。

+0

感謝您的快速回復 – 2011-05-10 13:04:45

2

另一種替代方案是使用SwingX」 JXTaskPane

JXTaskPaneContainer container = new JXTaskPaneContainer(); 
    forEach table: 
    JXTaskPane pane = new JXTaskPane(tableTitle); 
    pane.add(table); 
    container.add(pane); 
    somePanel.add(new JScrollPane(container); 

編輯(忘了taskPane在片段中,從來沒有發佈之前,咖啡;-)

+0

我在哪裏可以找到這個jar文件以及如何將它與Netbeans IDE一起使用 – 2011-05-11 04:26:39