2011-08-25 36 views
8

Tôi sử dụng Netbeans 7.0 với JDK6 trong Windows 7 để thiết kế giao diện người dùng của ứng dụng Java của tôi. Tôi áp dụng giao diện và cảm nhận của Hệ thống. Nhưng có vẻ như cách tôi muốn trong Windows nhưng khác với MacOS và thậm chí tệ hơn, nó trông khác nhau trong các trình quản lý cửa sổ khác nhau trong Linux (LXDE, GNOME, KDE, XFCE).Phông chữ nào trong Swing trông giống nhau trong mọi hệ điều hành?

Khác nhau, tôi có nghĩa là phông chữ trông và kích thước của chúng. Trong Windows, nếu một nhãn trông "v 1.23", có vẻ như "v ..." trong các hệ điều hành khác vì phông chữ trở nên lớn hơn trong hệ điều hành đó và JLabel không có đủ chỗ để hiển thị. Điều này xảy ra ở nhiều nơi.

Tôi không muốn tăng chiều rộng nhãn. Tôi muốn các nhãn để trông giống nhau trong chiều rộng nhất định trong tất cả các hệ điều hành. Theo mặc định, Netbeans sử dụng font Tahoma 11pt trên máy tính của tôi. Tôi nghĩ rằng nó không có sẵn trong tất cả các hệ điều hành để các hệ điều hành khác sử dụng phông chữ khác nhau.

Arial có phải là phông chữ chung không?

Tôi có nên thay đổi phông chữ của mọi thành phần thành Arial theo cách thủ công không? Hoặc bất kỳ tùy chọn nào khác?

+2

Câu trả lời ngắn gọn là bạn không thể và không cần phải làm như vậy. Thiết kế giao diện người dùng của bạn sao cho nó không bị vỡ khi phông chữ (của tất cả mọi thứ - tiếp theo bạn sẽ yêu cầu cửa sổ vẫn ở góc trên bên trái?) Hoặc văn bản thay đổi một chút. Hãy suy nghĩ về i18n hoặc đơn giản là một nhà thiết kế có ý tưởng hay. – delnan

+0

Xem [Phông chữ Vật lý và Hợp lý] (http://download.oracle.com/javase/6/docs/api/java/awt/Font.html) và [Sử dụng Trình quản lý Bố cục] (http://download.oracle). com/javase/tutorial/uiswing/layout/using.html). – trashgod

Trả lời

5

Khi nói đến người quản lý cửa sổ, có nhiều thứ hơn kích thước phông chữ, ví dụ chiều rộng giữa 2 điều khiển được xử lý khác nhau trong gnome & KDE. khi nó đi xuống để sử dụng cùng một kích thước phông chữ trên tất cả các nền tảng bạn có thể sử dụng phông chữ Sans Serif, điều này có sẵn trong tất cả các hệ điều hành mà tôi đã làm việc với.

nó cũng sẽ tốt hơn (nếu bạn không thể tìm thấy serif trong hệ điều hành nơi bạn muốn chạy ứng dụng của mình), bạn có thể tải xuống phông chữ (miễn phí từ GNU Free Fonts).

khi nói đến thiết lập các cỡ phông chữ & các phông chữ, tại sao bạn không thử sử dụng một chủ đề & thiết lập font có ... bạn có thể sử dụng phương pháp UIManager.setLookAndFeel() để thay đổi chủ đề. đây là liên kết trên Look & Feel

+1

Serif không phải là phông chữ. Nó là một loại phông chữ. Khi bạn yêu cầu Java sử dụng Serif, nó sẽ chọn một phông chữ serif cụ thể trên máy tính của bạn. Chắc chắn sẽ có sự đa dạng từ hệ điều hành đến hệ điều hành. –

+0

Tôi đã bỏ lỡ điều đó, bây giờ tôi đã cập nhật câu trả lời của tôi cảm ơn @Steve –

+0

@Anantha Sharma Cảm ơn bạn đã trả lời. Tôi dự định sử dụng Nimbus Theme. – Vigneshwaran

0

Lucida Sans Thường xuyên luôn đi kèm với Java nhưng tôi không nghĩ rằng nó sẽ giải quyết được vấn đề rằng một số văn bản/nhãn bị mất định dạng. Điều đó cũng phụ thuộc vào sự hồi sinh màn hình của người dùng.

8

Thay vào đó, hãy sử dụng layout managerlogical font family. Điều này example với các Font dưới đây cho biết thêm 24 điểm italic serif văn bản đến trung tâm của một (mặc định) BorderLayout để đạt được một kết quả dễ chịu trên nền tảng khác nhau.

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

Mac OS X:

Mac

Windows 7:

Windows

Ubuntu Linux:

Linux

+1

Đáng buồn thay, tôi chỉ nhận thấy rằng khái niệm "Serif" của Ubuntu trông có vẻ phiền phức "SansSerif". :-) – trashgod

+1

Nếu bạn lo lắng về chuỗi "Serif" đang thay đổi, 'Font.SERIF' cũng là một tùy chọn. – Starwarswii

0

Một câu hỏi cũ, nhưng tôi đã tìm thấy nó bởi vì tôi đang tìm kiếm một giải pháp. Và giải pháp của tôi là: sử dụng phông chữ DejaVu. Phông chữ Java trông khác nhau trong Linux và Windows, nhưng DejaVuSans 12 rất giống với phông chữ trong Linux và trông giống nhau trong Windows (trong Windows 8.1 ít nhất). Mã của tôi:

... 
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); 
    } 
    ... 
} 

Tất nhiên, nếu DejaVuSans.ttf không được nhúng trong file jar bạn có thể nhập nó khi chạy. Xem How do you import a font?.

Các vấn đề liên quan