在我的應用程序中,我顯示了包含大量數據的表的列表。所有的表格可能都不適合在窗口中,我們需要滾動查看底部表格。在這裏,我需要展開/摺疊自然的表格。用戶可以在所有表格中選擇他希望看到的表格。這是我應用程序的示例屏幕截圖。 如何在java swing應用程序中爲JTables實現展開/摺疊本質
我該怎麼做。任何建議將不勝感激。
在我的應用程序中,我顯示了包含大量數據的表的列表。所有的表格可能都不適合在窗口中,我們需要滾動查看底部表格。在這裏,我需要展開/摺疊自然的表格。用戶可以在所有表格中選擇他希望看到的表格。這是我應用程序的示例屏幕截圖。 如何在java swing應用程序中爲JTables實現展開/摺疊本質
我該怎麼做。任何建議將不勝感激。
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'以獲得您想要的外觀
您可以嘗試JXTreeTable或TreeTable
,或者你可以切換JTable中的知名度作展開/摺疊效果。首先,當它是可見的並且使用選擇摺疊使用setVisible(false);
並且在展開中進行反轉。 [不知道這將工作或沒有。]
org.netbeans.swing.outline.Outline
是一個有吸引力的替代,如所討論here和here。
展開/基於可視性崩潰效應,提出由哈利第二個選項,可以很容易實現,如果你使用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的形式提供)。
感謝您的快速回復 – 2011-05-10 13:04:45
另一種替代方案是使用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在片段中,從來沒有發佈之前,咖啡;-)
我在哪裏可以找到這個jar文件以及如何將它與Netbeans IDE一起使用 – 2011-05-11 04:26:39
對於第2點,它可能會工作,具體取決於使用的LayoutManager。一些LayoutManager能夠處理組件的動態可見性,而其他的不能。 – jfpoilpret 2011-05-10 06:43:35
@jfpoilpret:是的。這就是爲什麼我寫了不確定的關鍵點,因爲我們不知道OP使用哪個佈局管理器。 – 2011-05-10 06:45:57