6

私のアプリケーションでは、膨大なデータを含むテーブルのリストを表示しています。すべてのテーブルがウィンドウに収まらない場合があります。下のテーブルを表示するにはスクロールする必要があります。ここでは、自然をテーブルに展開/折りたたむ必要があります。ユーザーは、すべてのテーブルの中から表示したいテーブルを選択できます。これは、アプリケーションのサンプル スクリーン ショットです。 ここに画像の説明を入力

どうすればできますか。どんな提案でも大歓迎です。

4

5 に答える 5

3
  1. JXTreeTableまたはTreeTableを試すことができます

  2. または、jtableの表示を切り替えて、展開/折りたたみ効果を作成することもできます。最初にそれが表示され、使用が折りたたみ使用を選択しsetVisible(false);、展開で逆になります。[これが機能するかどうかはわかりません。]

于 2011-05-10T06:22:40.057 に答える
3
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」に追加して、目的の外観を取得します

于 2011-05-12T09:23:20.733 に答える
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 を忘れたので、ビフォア コーヒーを投稿しないでください ;-)

于 2011-05-10T08:29:46.177 に答える
2

Harry によって 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

上記のコードでは、各ラベルがチェックボックスに置き換えられ、選択を解除すると下のテーブルが非表示になります。

「ダイナミック レイアウト」セクションで、DesignGridLayout サンプル アプリケーション (ホームページの WebStart として入手可能) を参照できます。

于 2011-05-10T07:12:43.280 に答える