こんにちは、私はJavaスイングが初めてです。ボタンを動的に追加する必要があります。これらのボタンを動的に追加しようとすると、フリー レイアウトのときにパネルに追加されません。null レイアウトや gridbaglayout などの任意のレイアウトを受け入れます。
自由なレイアウトでコンポーネントを動的に追加する他の方法はありますか?
こんにちは、私はJavaスイングが初めてです。ボタンを動的に追加する必要があります。これらのボタンを動的に追加しようとすると、フリー レイアウトのときにパネルに追加されません。null レイアウトや gridbaglayout などの任意のレイアウトを受け入れます。
自由なレイアウトでコンポーネントを動的に追加する他の方法はありますか?
「フリーレイアウト」とは、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 に追加することもできます。