Как реализовать расширение / свертывание природы для JTables в Java-приложении Swing - PullRequest
6 голосов
/ 10 мая 2011

В моем приложении я отображаю список таблиц с огромными данными.Все таблицы могут не помещаться в окне, нам нужно прокрутить, чтобы увидеть нижние таблицы.Здесь мне нужно развернуть / свернуть природу к таблицам.Пользователь может выбрать, какие таблицы он хотел бы видеть среди всех таблиц.Это мой пример снимка экрана приложения.enter image description here

Как я могу это сделать.Любые предложения будут с благодарностью.

Ответы [ 5 ]

3 голосов
/ 10 мая 2011
  1. Вы можете попробовать JXTreeTable или TreeTable

  2. или вы можете переключить видимость jtable, чтобы сделать расширение /эффект коллапса.Сначала, когда он виден и использует выбор, сверните, используйте setVisible(false); и сделайте обратное в расширении.[Не уверен, что это будет работать или нет.]

2 голосов
/ 12 мая 2011
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, чтобы получить желаемый вид

2 голосов
/ 10 мая 2011

Еще одна альтернатива - использовать SwingX 'JXTaskPane

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

Отредактировано (забыл панель задач во фрагменте, никогда не публиковать перед кофе; -)

2 голосов
/ 10 мая 2011

Эффект расширения / свертывания, основанный на видимости, предложенный Гарри как второй вариант, может быть легко достигнут, если вы используете 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.

. При использовании кода выше каждая метка заменяется флажком, который, если он не выбран, скрывает таблицу под ним.

Вы можете посмотреть пример приложения DesignGridLayout (доступно как WebStart на домашней странице) в разделе « Динамические макеты ».

2 голосов
/ 10 мая 2011

org.netbeans.swing.outline.Outline является привлекательной альтернативой, как обсуждено здесь и здесь .

...