3

私の現在の問題は、2x2 GridLayout を持つ JFrame があることです。正方形の 1 つの中に、グリッドを表示する JPanel があります。私は Java スイング ライブラリを使ってフィールド デーを行っています... 見てみましょう

画像

Java は、画面に合わせて各 JLabel を自動的に拡張します。灰色のスペースではなく、青い四角(水)と黒い境界線だけにしたいのです。グレースペースが消えるように正確な寸法を取得する前に JFrame のサイズを何百万回も変更する必要がないように、その JPanel のサイズを永続的に設定する方法はありますか?

また、これらのボタンのサイズを設定して、それほど大きくならないようにしたいと思います (BorderLayoutボタンと TextField に使用されています)。

4

4 に答える 4

3

GridBagLayoutは、本当に使用したいものです。GridLayoutは、どのようなサイズ制約を設定しても、レイアウト内の各コンポーネントに同じサイズを強制します。GridBagLayoutは、はるかに強力で、はるかに複雑です。そのためのAPIページで調べてください。を使用するGridBagLayoutと、コンポーネントが必要ない場合、コンポーネントはグリッドスペース全体を埋めることはなく、要求したサイズを維持することもできます。コンポーネントのサイズが変更されないようにするために、使用可能な3つのサイズ制約すべてを設定します。

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

ブライアンが言っているように、ボタンには間違いなくインナーパネルを使用します。すべてのボタンを同じサイズにしたくない場合は、彼が提案するようなGridLayoutまたはFlowLayoutのいずれかを使用できます。メインパネルではなく、すべてのボタンをその内側のパネルに追加します。

于 2008-12-10T23:30:12.260 に答える
2

2 つのチェッカーボードを同じサイズのままにしたい場合は、それぞれを独自の に含める必要がありますJPanel。これらの親 JPanel のそれぞれにレイアウト タイプを設定しGridBagLayoutます。チェッカーボード コンポーネントごとに preferredSize を設定し、それぞれのコンテナーに追加します。GridBagLayout は、デフォルトで各ボードを親 JPanel の中央に配置する必要があります。したがって、ウィンドウのサイズが変更されると、JPanel の親領域は拡大または縮小されますが、内部のチェッカーボード コンポーネントは同じサイズのままです。

または、各チェックボードの四角形をJPanelレイアウトBorderLayoutマネージャーで配置JLabelし、その場所に (背景色が青の) を追加することで、ウィンドウのサイズが変更されたときに、青い四角形を適切なサイズにスケーリングすることができますBorderLayout.CENTER

ボタンに関しては、次のようにしてみてください。

JPanel theButtonPanel = new JPanel(new BorderLayout());
JButton button1 = new JButton("Fire");
JButton button2 = new JButton("Pass");
JButton button3 = new JButton("Forfiet");

JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
innerButtonContainer.add(button1);
innerButtonContainer.add(button2);
innerButtonContainer.add(button3);

theButtonPanel.add(innterButtonContainer);

最後に、Swing ユーザー インターフェイスの設計ツールを使用することを検討してください。Netbeans には優れた UIデザイナーが組み込まれています。ここからNetbeans をダウンロードしてください。

于 2008-11-25T06:24:36.750 に答える
1

setResizeable( false )最上位のフレームで可能であれば、レイアウト マネージャーを null に設定し、setBounds を介して各場所とサイズをハード コーディングできます。これが私が行う方法です(もちろんサイズ変更を条件とします)。

于 2008-11-25T05:46:33.800 に答える
0

TableLayoutサードパーティのレイアウト マネージャーを使用して、このような問題を解決することに成功しました。ダウンロードしてチュートリアルを読む必要がありますが、重要なのは、レイアウト内の位置に JButton を追加するときに位置揃えを CENTER に設定することです。

于 2008-11-26T19:17:11.043 に答える