2011-08-18 4 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 내부의 텍스트는 꼭대기에 정렬해야합니다. FontMetrics에 설명 된대로 내 레이블, 문양의 공칭 상승최대 상승의 차이에 다이어그램 포인트 enter image description hereJLabel의 수직 정렬이 예상대로 작동하지 않습니다.

+0

한 줄을 깜빡입니다. 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); 

여전히 그 차이가 있습니다.

문제는 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

관련 문제