如何在JavaSwing应用程序中实现JTables的扩展/折叠特性
在我的应用程序中,我显示了一个包含大量数据的表列表。所有的表格可能都不适合该窗口,我们需要滚动查看底部的表格。在这里,我需要扩展/折叠表。用户可以在所有表中选择要查看的表。这是我的应用程序示例屏幕截图。 我该怎么做呢。如有任何建议,将不胜感激如何在JavaSwing应用程序中实现JTables的扩展/折叠特性,java,swing,jtable,expand,collapse,Java,Swing,Jtable,Expand,Collapse,在我的应用程序中,我显示了一个包含大量数据的表列表。所有的表格可能都不适合该窗口,我们需要滚动查看底部的表格。在这里,我需要扩展/折叠表。用户可以在所有表中选择要查看的表。这是我的应用程序示例屏幕截图。 我该怎么做呢。如有任何建议,将不胜感激 你可以试试看 或者您可以切换jtable的可见性以产生展开/折叠效果。首先,当它是可见的并且使用时,选择塌陷使用setVisible(false)并在展开中执行反向操作。[不确定这是否有效。] 如前所述,这是一个很有吸引力的替代方案。基于可见性的扩展/折
setVisible(false)代码>并在展开中执行反向操作。[不确定这是否有效。]
如前所述,这是一个很有吸引力的替代方案。基于可见性的扩展/折叠效果,如Harry提出的第二个选项,如果您使用: 对
面板中的每个表重复上述代码(在“…
”之后)
使用上面的代码,每个标签都会替换为一个复选框,如果未选中该复选框,则会隐藏下面的表
您可以在“动态布局”部分下查看DesignGridLayout示例应用程序(在主页上作为WebStart提供)。另一种选择是使用SwingX的JXTaskPane
JXTaskPaneContainer container = new JXTaskPaneContainer();
forEach table:
JXTaskPane pane = new JXTaskPane(tableTitle);
pane.add(table);
container.add(pane);
somePanel.add(new JScrollPane(container);
已编辑(忘记了代码段中的任务窗格,在咖啡之前从不发布;-)
将面板(panel1、panel2..)添加到“主布局”以获得所需的外观对于第2点,它可能会起作用,具体取决于使用的LayoutManager。有些LayoutManager能够处理组件的动态可见性,而有些则不能。@jfpoilpret:是的。这就是为什么我不确定这一点,因为我们不知道layout manager OP使用的是哪一个
JXTaskPaneContainer container = new JXTaskPaneContainer();
forEach table:
JXTaskPane pane = new JXTaskPane(tableTitle);
pane.add(table);
container.add(pane);
somePanel.add(new JScrollPane(container);
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();}