2

基本的な GUI アプリケーションを作成しようとしています。これは、テキスト ボックスといくつかのボタンを備えたスクロール可能なウィンドウです。JFrameandJScrollPaneを次のように設定しました。

public class MainFrame extends JFrame {
    public MainFrame() {
        this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS));
        JScrollPane scrollPane = new JScrollPane();
        JPanel contentPanel = new JPanel(); contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.PAGE_AXIS));

        contentPanel.setPreferredSize(new Dimension(600,1600));
        scrollPane.setViewportView(contentPanel);
        this.setContentPane(scrollPane);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        scrollPane.getViewport().add(new PCData());
        scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
        scrollPane.getViewport().add(new PCData());

        this.validate();
        this.setSize(625,800);
        this.setVisible(true);
    }

    public static void main(String[] args) {new MainFrame();}
}

クラスPCDataは次のとおりです。

public class PCData extends JPanel {
    public PCData() {
        this.setSize(new Dimension(600,300));
        this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        this.add(new JTextField());

        JPanel nameData = new JPanel();
        nameData.setLayout(new BoxLayout(nameData, BoxLayout.LINE_AXIS));
        nameData.add(new JTextField());
        nameData.add(Box.createRigidArea(new Dimension(5, 0)));
        nameData.add(new JTextField());
        this.add(nameData);
    }
}

ただし、PCData好みのサイズにもかかわらず、2 つの領域のうちの 1 つしか表示されません。コンテンツ ペインはスクロールできません。ただし、次の 3 行を削除すると、次のようになります。

//scrollPane.getViewport().add(new PCData());
//scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
//scrollPane.getViewport().add(new PCData());

JScrollPane再びスクロール可能になります。これはなぜですか? また、両方のPCDataパネルを表示するにはどうすればよいですか? (注:方法だけでなく、理由と方法の両方を探しています。)

4

1 に答える 1

4
scrollPane.getViewport().add(new PCData());
scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
scrollPane.getViewport().add(new PCData());

ビューポートに追加できるコンポーネントは 1 つだけです。

そのため、パネルを作成する必要があります。3 つのコンポーネントをパネルに追加します。次に、パネルをビューポートに追加します。

于 2013-05-23T05:28:29.040 に答える