2011-08-25 5 views
8

Windows 7에서 JDK6과 함께 Netbeans 7.0을 사용하여 Java 응용 프로그램의 사용자 인터페이스를 설계했습니다. 시스템 룩앤필을 적용합니다. 그러나 그것은 내가 Windows에서 원하는 방식으로 보이지만 MacOS와 다르며 심지어 Linux (LXDE, GNOME, KDE, XFCE)의 다른 창 관리자에서 다르게 보입니다.Swing의 어떤 글꼴이 모든 OS에서 동일하게 보입니까?

다른 말로하면 글꼴 모양과 크기를 의미합니다. Windows에서 레이블이 "v 1.23"으로 보이면 다른 OS에서 "v ..."처럼 보입니다. 그 이유는 해당 OS에서 글꼴이 커지고 JLabel에 표시 할 공간이 충분하지 않기 때문입니다. 이것은 여러 장소에서 발생합니다.

레이블 폭을 늘리고 싶지 않습니다. 모든 OS에서 레이블이 주어진 너비로 동일하게 보이길 바란다. 기본적으로 Netbeans은 내 PC의 Tahoma 11pt 글꼴을 사용합니다. 다른 운영체제에서는 다른 글꼴을 사용하기 때문에 모든 OS에서 사용할 수있는 것은 아닙니다.

Arial은 일반적인 글꼴입니까?

모든 요소의 글꼴을 Arial로 수동으로 변경해야합니까? 아니면 다른 옵션?

+2

짧은 대답은 당신이 할 수 없다거나 할 필요가 없다는 것입니다. 폰트 (모든 것 - 윈도우가 좌상단에 머무를 것을 요구할 것인가?) 또는 텍스트가 약간 변경 될 때 깨지지 않도록 UI를 디자인하십시오. i18n 또는 단순히 디자이너가 좋은 아이디어를 가지고 있다고 생각하십시오. – delnan

+0

[물리 및 논리 글꼴] (http://download.oracle.com/javase/6/docs/api/java/awt/Font.html) 및 [레이아웃 관리자 사용] (http://download.oracle.com/)을 참조하십시오. com/javase/tutorial/uiswing/layout/using.html). – trashgod

답변

5

윈도우 관리자의 경우 글꼴 크기보다 더 많은 것이 있습니다. 예를 들어, 2 개의 컨트롤 사이의 너비는 그놈 & KDE에서 다르게 처리됩니다. 모든 플랫폼에서 동일한 글꼴 크기를 사용하게되면 Sans Serif 글꼴을 사용할 수 있습니다.이 글꼴은 내가 사용 해본 모든 OS에서 사용할 수 있습니다.

(응용 프로그램을 실행하려는 OS에서 serif를 찾을 수없는 경우) 글꼴을 다운로드 할 수 있습니다 (GNU Free Fonts에서 무료로 다운로드 할 수 있음).

는 글꼴 설정에 관해서

는 & 당신이 테마를 변경하려면 UIManager.setLookAndFeel() 방법을 사용할 수있다 글꼴 ... 를 설정 테마를 사용하지 않는 이유 & 글꼴, 크기. 여기 대신 Look & Feel

+1

Serif는 글꼴이 아닙니다. 글꼴 범주입니다. Serif를 사용하도록 Java에 지시하면 컴퓨터에서 특정 serif 글꼴을 선택합니다. OS마다 다양 할 것입니다. –

+0

나는 그것을 놓쳤다, 나는 지금 나의 대답을 업데이트했다. thanks @ 스티브 –

+0

@Anantha Sharma 대답 해줘서 고마워. Nimbus Theme를 사용할 계획입니다. – Vigneshwaran

0

Lucida Sans Regular는 항상 Java와 번들로 제공되지만 일부 텍스트/레이블이 형식을 벗어나는 문제는 해결되지 않을 것이라고 생각합니다. 이는 사용자의 화면 재현에도 달려 있습니다.

8

의 링크가하는 layout managerlogical font family 사용합니다. 이 exampleFont은 24 점 기울임 꼴 체리 텍스트를 (기본값) BorderLayout의 중심에 추가하여 서로 다른 플랫폼에서 만족스러운 결과를 얻습니다.

ta.setFont(new Font("Serif", Font.ITALIC, 24)); 

맥 OS X :

Mac

윈도우 7 :

Windows

우분투 리눅스 :

Linux

+1

슬프게도, 나는 우분투의 "Serif"개념이 혼란스럽게 "SansSerif"처럼 보였습니다. :-) – trashgod

+1

"Serif"문자열 변경에 대해 걱정이된다면,'Font.SERIF' 또한 옵션입니다. – Starwarswii

0

낡은 질문이지만 솔루션을 찾고 있었으므로 찾았습니다. 내 솔루션 : DejaVu 글꼴을 사용하십시오. 자바 대화 글꼴은 Linux와 Windows에서 다르게 보이지만 DejaVuSans 12는 Linux의 대화 글꼴과 매우 유사하며 Windows (Windows 8.1 이상)에서도 동일하게 보입니다. 내 코드 : DejaVuSans.ttf이 jar 파일에 포함되어 있지 않은 경우 물론

... 
static Font dejaVuSans; 
static final String resPath = "<classpath>/resources/"; // no leading "/" 
... 
public static void main(String[] args) { 
    /* See: 
    * https://stackoverflow.com/questions/7434845/setting-the-default-font-of-swing-program 
    * https://stackoverflow.com/questions/8361947/how-to-get-getclass-getresource-from-a-static-context 
    */ 
    dejaVuSans = null; 
    Font f; 
    try { 
     InputStream istream = <ClassName>.class.getClassLoader().getResourceAsStream(
      resPath + "DejaVuSans.ttf"); 
     dejaVuSans = Font.createFont(Font.TRUETYPE_FONT, istream); 
     f = dejaVuSans.deriveFont(Font.PLAIN, 12); 
    } catch (Exception e) { 
     System.err.println(e.getMessage()); 
     f = null; 
    } 
    if (f == null) 
     f = new Font("Dialog", Font.PLAIN, 12); 
    java.util.Enumeration keys = UIManager.getDefaults().keys(); 
    while (keys.hasMoreElements()) { 
     Object key = keys.nextElement(); 
     Object value = UIManager.get (key); 
     if (value != null && value instanceof javax.swing.plaf.FontUIResource) 
      UIManager.put (key, f); 
    } 
    ... 
} 

, 당신은 런타임에 가져올 수 있습니다. How do you import a font?을 참조하십시오.

관련 문제