1

たとえば、グリッド レイアウトに 3x3 コンポーネントがあり、それらすべてをラベルにしたいのですが、パディングがあるため、ラベルをセルの中央に配置したいと考えています。でも、なかなか手が出せない…。

関連するコードの一部:

panel = new JPanel();
GridBagLayout gridBag = new GridBagLayout();
panel.setLayout(gridBag);
panel.setSize(new Dimension(30, 400));
GridBagConstraints c = new GridBagConstraints()     

JLabel lab = new JLabel("proba"); 
lab.setBorder(outline);
c.fill = GridBagConstraints.BOTH;
c.gridx =2; c.gridy=2; c.ipady = 10; c.ipadx=10;

c.ipadx=100; panel.add(lab,c);
4

1 に答える 1

1

[アップデート]

あなたは本当にSSCCEを投稿するべきです。そうすれば、私たち全員がそれを試すことができ、問題がどこにあるかを推測する必要がなくなります。私の最後の推測-そしてこれはあなたの現在の問題を解決するかどうかに関係なくあなたがしなければならないことです-は

    label.setHorizontalAlignment(JLabel.CENTER);

ラベルが中央に配置され、グリッドセル全体を埋めている場合でも、テキストはデフォルトで左揃えのままになります。上記の変更により、テキストはラベルの中央に配置されます。

ただし、ラベルがセルを埋めていない場合、これは役に立ちません。

[オリジナル]

これは完全なプログラムではないため、何が悪いのかを正確に言うのは難しいですが、ここにあなたを正しい軌道に乗せるかもしれないいくつかのコメントがあります。

まず、setSizeの代わりにsetPreferredSizeを使用する必要があります(Java:コンポーネントのsetPreferredSize()メソッドとsetSize()メソッドの違いを参照) 。

この変更を行うと、パネルが希望どおりではないことがわかります。とても背が高くて薄いです。(300,400)おそらくタイプミス-の代わりに意味しましたか(30,400)

今、あなたのすべてのラベルが一緒にまとめられると思います。それらを取得するにspread outは、以下を追加する必要があります。

c.weightx = .5;
c.weighty = .5;

(実際には、ゼロ以外の値はすべて機能します)。これについては、http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.htmlで説明されています。

weightxまたはweightyにゼロ以外の値を少なくとも1つ指定しない限り、すべてのコンポーネントはコンテナーの中央に集まります。これは、重みが0.0(デフォルト)の場合、GridBagLayoutがセルのグリッドとコンテナーのエッジの間に余分なスペースを配置するためです。

これはあなたを近づけるはずです(r)..。

于 2012-11-16T19:27:05.193 に答える