5

私は次のコードを持っています:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

for(int xx =0; xx < 3; xx++)
{
    JLabel label = new JLabel("String");
    label.setPreferredSize(new Dimension(300,15));
    label.setHorizontalAlignment(JLabel.RIGHT);

    panel.add(label);
}

これは私がテキストをどのように見せたいかです:

[                         String]
[                         String]
[                         String]

これはそれがどのように見えるかです

[String]
[String]
[String]

何らかの理由で、ラベルが指定した希望のサイズに設定されません。このため、ラベルのテキストが正しく配置されていないと思います。確信はないけど。どんな助けでもいただければ幸いです。

4

9 に答える 9

13
JLabel label = new JLabel("String", SwingConstants.RIGHT);

:)

于 2013-02-27T14:06:26.523 に答える
5

使用しているレイアウトにもよると思いますが、XY(JBuilderではある種のレイアウトだったのを覚えています)では機能するはずですが、他の場合は問題になる可能性があります。最小サイズを希望のサイズに変更してみてください。

于 2011-06-06T19:48:35.183 に答える
5

setPreferredSize / MinimumSize / MaximumSizeメソッドは、親コンポーネント(この場合はパネル)のレイアウトマネージャーに依存します。

最初に、setPreferredSizeの代わりにsetMaximumSizeを試してください。問題がなければ、BoxLayoutで動作するはずです。

さらに:おそらく接着剤を使用して遊んでみる必要があります:

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());

Y_AXIS BoxLayoutが必要な場合は、ネストされたパネルを使用することもできます。

verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));    
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());
verticalPanel.add(panel);
于 2011-06-06T19:54:09.167 に答える
3

これは少し面倒ですが、グリッドレイアウトよりも配置の柔軟性を高めたい場合は、ボックスレイアウトでネストされたJPanelsを使用できます。

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));


    for (int xx = 0; xx < 3; xx++) {
        JPanel temp = new JPanel();
        temp.setLayout(new BoxLayout(temp,BoxLayout.LINE_AXIS));

        JLabel label = new JLabel("String");
        temp.add(Box.createHorizontalGlue());

        temp.add(label);
        panel.add(temp);
    }

サイズに関係なく水平方向の接着剤を使用して適切な位置に保ちましたが、特定の距離にするために剛性のある領域に配置することができます。

于 2011-06-06T20:16:00.730 に答える
2

LayoutManagerターゲット領域を埋めるためにラベルのサイズを設定していることを確認する必要があります。おそらくJLabel、テキストの長さに正確に合わせたサイズで、レイアウト内で左揃えになっているコンポーネントがあります。

于 2011-06-06T19:56:08.003 に答える
2
myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
于 2011-06-06T20:09:38.043 に答える
1

使用するのではなく

label.setHorizontalAlignment(JLabel.RIGHT);

使用する

label.setHorizontalAlignment(SwingConstants.RIGHT);

したがって、あなたは持っています:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int xx =0; xx < 3; xx++)
{
    JLabel label = new JLabel("String");
    label.setPreferredSize(new Dimension(300,15));
    label.setHorizontalAlignment(SwingConstants.RIGHT);
    panel.add(label);
}
于 2012-07-14T20:20:55.590 に答える
1

以下を使用できませんでしたか?

Jlabel label = new JLabel("String");
label.setBounds(x, y, width, height); // <-- Note the different method used.
label.setHorizontalAlignment(JLabel.RIGHT);

これはJFrame、少なくともコンテナ内で機能します。についてはよくわかりませんJPanel

于 2012-09-29T22:49:43.667 に答える
0

皆さんからの回答により、BoxLayoutは必要なテキストの配置をサポートしていないと判断できたので、次のように変更しました。

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1,0,0);

そして、すべてがうまくいきました。

于 2011-06-06T19:59:56.030 に答える