2011-10-03 8 views
7

Windows LookAndFeel gốc trong Java 6 dường như không đúng kích thước một số phông chữ.Tại sao Windows LookAndFeel tạo phông chữ quá nhỏ?

chương trình thử nghiệm:

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

public class Test { 
    public static void main(String[] arg) throws Exception { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     try { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

     final JMenuBar mb = new JMenuBar(); 

     final JMenu file = new JMenu("File"); 
     file.setMnemonic(KeyEvent.VK_F); 
     mb.add(file); 

     final JToolBar toolbar = new JToolBar(); 
     final JButton button = new JButton("Button"); 
     toolbar.add(button); 

     final JLabel label = new JLabel("Basic Colors"); 

     final JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(toolbar, BorderLayout.PAGE_START); 
     panel.add(label, BorderLayout.CENTER);  

     final JFrame frame = new JFrame(); 
     frame.setJMenuBar(mb); 
     frame.add(panel); 

     frame.setTitle("Test"); 
     frame.setSize(400,200); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     } 
    }); 
    } 
} 

Output, so với ứng dụng gốc Windows trên Vista:

comparison

Trong khi các văn bản trong thanh kiểm tra trình đơn ứng dụng có kích thước chính xác, phần còn lại của văn bản nhỏ hơn trong ứng dụng gốc bên cạnh văn bản. Phóng to, bạn có thể thấy rằng văn bản trong ứng dụng thử nghiệm JLabel là 1px ngắn hơn trong ứng dụng bản địa:

zoomed in

Đây có phải là một lỗi trong Windows LAF, hay chúng ta đang lạm dụng nó? Nếu đó là lỗi, có cách giải quyết nào không?

+0

Với tôi, có vẻ như Swing L & F sử dụng phông chữ khác. –

+1

+1 Câu hỏi được chuẩn bị tốt. –

Trả lời

4

Java 6 sử dụng trình kết xuất phông chữ của riêng nó, bao gồm cả việc triển khai tính năng khử răng cưa/gợi ý subpixel. Mặc dù đầu ra có nghĩa là tương tự như hiển thị của Windows, hoặc đầu B ở ranh giới pixel, hoặc nó được làm tròn, hoặc cả hai, ném trình kết xuất đồ họa Java ra. Trình kết xuất phông chữ của Windows quyết định đặt đầu của chữ cái phía trên ranh giới, trong khi chữ cái Java đặt nó bên dưới. Chữ 'l' trông giống như nó ở cùng chiều cao trong cả hai mẫu, vì vậy nó không giống như trình kết xuất lấy chiều cao của mỗi chữ cái sai. Có thể thử so sánh với một số chữ cái ở trên cùng là một đường thẳng, giống như chữ T hoặc chữ E?