4

HTML div タグを使用して JLabel の幅を設定しようとしています。

次のコードを検討してください。

import javax.swing.*;

public class Xyzzy extends JFrame{
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Xyzzy frame = new Xyzzy();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

                String s = "x ";
                for (int i=0; i<200; ++i)
                    s += "x ";

                JLabel jl = new JLabel("<html><div style=\"width: 300px;\">" + s + "</div></html>");

                frame.add(jl);

                frame.setSize(600, 600);
                frame.setVisible(true);
            }
        });
    }
}

JLabel は 300 ピクセル幅であると予想していましたが、実際には約 390 ピクセル幅です。幅の仕様を 200px に変更すると、結果のラベルの幅は約 260 ピクセルになります。

私は何を間違っていますか?

4

3 に答える 3

5

この HTML コードは JLabel には複雑すぎます (HTML 仕様の一部のみをサポートします) http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JLabel.html
コンポーネントのサイズはレイアウトによって異なります. 私は MigLayout http://www.miglayout.comの 簡単なチュートリアルを好む

編集: JLabel の HTML は非常に時代遅れです

于 2012-05-21T14:28:05.417 に答える
2

の幅ではなく、HTML のテキストの幅を設定していますJLabel

メソッドを使用してsetPreferredSize、 の幅を設定しJLabelます。

frame.pack();

Dimension d = label.getSize();
d.width = width;
label.setPreferredSize(d);

JLabelあなたが見たように、テキストが収まるようにサイズ自体を許可する方が良いですが.

于 2012-05-21T14:30:50.453 に答える
0

ギルバート、私はあなたのコードを追加し、これで終わります:

import javax.swing.*;
import java.awt.*;

public class Xyzzy extends JFrame{
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Xyzzy frame = new Xyzzy();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

                String s = "x ";
                for (int i=0; i<200; ++i)
                    s += "x ";

                JLabel jl = new JLabel("<html>" + s + "</html>");

                frame.add(jl);
                frame.pack();

                Dimension d = jl.getSize();
                d.width = 200;
                jl.setPreferredSize(d);

                frame.setSize(600, 600);

                frame.setVisible(true);
            }
        });
    }
}

これは単に機能しません。また、HTML タグと frame.setSize(600,600) を削除しようとしましたが、どちらも探しているものを生成しません: 幅 200 ピクセルで高さを調整した JLabel。

于 2012-05-21T16:39:03.517 に答える