2011-08-18 12 views
15
Font font = Font("Arial", Font.BOLD, 35); 

JLabel label = new JLabel("57"); 
JPanel panel = new JPanel(); 
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS)); 
panel.add(label); 

これにより、上下に余分なスペースがあるJLabelが作成されます。私はsetVerticalAlignment(SwingConstants.TOP)を試しましたが、動作しません。繰り返しますが、JLabelを一番上に揃えたいのではなく、JLabel内のテキストを一番上に配置する必要があります。ここJLabelの垂直方向の配置が期待通りに機能しない

FontMetricsで説明したように、私のラベルは、グリフの名目上昇最大アセントとの差にダイアグラムポイントの矢印 enter image description here

+0

1行を忘れました。 label.setFont(font); – arpanoid

+0

その理由は、いくつかの記号が数字よりも上に伸び、ラベルのサイズと組み合わせたラベル内のテキストの位置合わせが、複数のフォントメトリックを考慮に入れなければならないことが考えられます。 http://upload.wikimedia.org/wikipedia/commons/3/39/Typography_Line_Terms.svg質問に対する回答ではありませんが、役立つかもしれません。 –

+0

+1の画像を含む。 「RenderingHints」(http://download.oracle.com/javase/6/docs/api/java/awt/RenderingHints.html)の価値を見落とさないように注意してください。 – trashgod

答えて

19

ラベル内のテキストは、実際には上部に既に配置されています。

label.setVerticalAlignment(JLabel.TOP); 
label.setVerticalTextPosition(JLabel.TOP); 
panel.setAlignmentY(TOP_ALIGNMENT); 

の3つを設定しても、そのギャップが見つかるはずです。

問題はfont-metricsに関連しています。フォントには発音区別のためのスペースがあり、英数字や偶数文字には大文字の区別記号は含まれませんが、Arialにはドイツ語のウムラウト(ÜØÜ)や文字などの大文字よりも大きな文字を含む幅広い国際文字が含まれていますポルトガル語の発音区別符(ÁÂ)を含む。

ハックであり、フォントやプラットフォーム全体でうまく調整できない、すばやく簡単なソリューションが必要な場合は、境界線で負の値を使用してフォントメトリックを補正できます。

label.setBorder(BorderFactory.createEmptyBorder(-3 /*top*/, 0, 0, 0)); 

あなたはそれを修正したい場合は、テキストの実際の高さと位置を計算に役立つ可能性が多くの機能を持っているとして、「右」あなたは、FontMetricsパッケージについての学習になっているはずですが、そのようなことを、表示されています適切なピクセル数で文字列全体を移動することができます。

+0

+1この回避策の相対的な安全性にコメントできますか? – trashgod

+0

+1、素敵なハック。私はあなたが負の値を使うことができることに気づいていませんでした。 :D – mre

+0

ありがとうございました。おかしい....... – arpanoid

5

どのように見えるかです。あなたはsetBorder(null)で微妙に変わることができます。絶対コントロールの場合は、hereのように、グリフを自分でレンダリングする必要があります。幸いにも、ほとんどのフォントの数字グリフは、の予告アシストを持っています。

+2

あなたがしても\t 'FontMetrics fontMetrics = label.getFontMetrics(font); int offset = fontMetrics.getMaxAscent() - fontMetrics.getAscent(); System.out.println(offset); 'Arialに設定されたフォントでサンプルコードを使用すると、ゼロの差が得られます。これは実際には既知のバグです(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6623223)、後方互換性が損なわれ、そのような低い優先度でマークされているため、修正されない可能性があります。 –

+0

良いリファレンス、ありがとう!更新しました。 – trashgod

関連する問題