3

こんにちは、私はJavaスイングが初めてです。ボタンを動的に追加する必要があります。これらのボタンを動的に追加しようとすると、フリー レイアウトのときにパネルに追加されません。null レイアウトや gridbaglayout などの任意のレイアウトを受け入れます。

自由なレイアウトでコンポーネントを動的に追加する他の方法はありますか?

4

1 に答える 1

4

「フリーレイアウト」とは、Netbeans によって開発された GroupLayout とも呼ばれるフリーデザインレイアウトを指していると思います。このレイアウトの背後にある基本的な考え方は、インタラクティブに設計し、GUI ビルダーを使用してシンプルなビジュアル サポートでコンポーネントを追加するときに提供される利便性です。

GUI ビルダーは、コンポーネントの正しい配置をサポートするために必要なコードを生成します。以下は、Free Design Layout を使用して JPanel に 2 つの JButton を配置するために自動生成されたコードです。

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jButton1)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(0, 217, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addGap(96, 96, 96))))
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addComponent(jButton1)
        .addGap(100, 100, 100)
        .addComponent(jButton2)
        .addContainerGap(140, Short.MAX_VALUE))
);

ご覧のとおり、簡単なインタラクティブな配置のコストは、結果のコードに渡されます。これにより、このレイアウトは動的コンポーネントの処理にはあまり適していません。

一方、FlowLayout または GridLayout を使用すると、動的コンポーネントをプログラムでより適切に処理できます。両方のレイアウトを最大限に活用するために、いつでも FlowLayout JPanel を GroupLayout JPanel に追加することもできます。

于 2012-05-04T08:26:19.570 に答える