2013-03-19 49 views
5

Tôi có một ứng dụng Java trên máy tính để bàn mà tôi đang làm việc và đã sử dụng JDK 6 để phát triển thông qua IDE. Tôi sử dụng gợi ý kết xuất VALUE_FRACTIONALMETRICS_ON cùng với các gợi ý khác để hiển thị văn bản tốt hơn trong JLabels. Những gợi ý này hoạt động tốt trên JVM 1.6 nhưng gần đây tôi đã nhận thấy rằng dường như bỏ qua hoàn toàn VALUE_FRACTIONALMETRICS_ON khi tôi chạy ứng dụng với JRE 1.7 Có điều gì tôi đang làm sai ở đây khiến Java 7 bỏ qua những gợi ý này?Cách hiển thị văn bản bằng FRACTIONALMETRICS trong Java 7

lblDate = new ATimeLabel(ATimeLabel.DATE_LETTERS) { 
    private static final long serialVersionUID = 1L; 

    @Override 
    protected void paintComponent(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 

     g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
       RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
     g2d.setRenderingHint(RenderingHints.KEY_RENDERING, 
       RenderingHints.VALUE_RENDER_QUALITY); 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 
       RenderingHints.VALUE_FRACTIONALMETRICS_ON); 

     super.paintComponent(g2d); 
    } 
}; 

FRACTIONALMETRICS có hiệu ứng hình ảnh đáng chú ý nhất trên văn bản để làm việc đó là những gì tôi đang tìm kiếm.

đây là một ảnh chụp so sánh màn hình của những gì nó trông giống như khi tôi chạy ứng dụng từ IDE của tôi (Left) trong đó sử dụng Java 6 và khi tôi nhấp đúp chuột file Jar tự của nó (Ngay) trong đó sử dụng của tôi hệ thống JRE, Java 7. (tôi cũng tạm thời bổ sung thêm đường viền màu đỏ để chứng minh rằng phương pháp sơn làm việc)

Bất kỳ trợ giúp sẽ được rất nhiều đánh giá cao.

Trả lời

2

Thông thường không cần thiết lập VALUE_FRACTIONALMETRICS_ON. Hãy thử sử dụng gợi ý cho máy tính để bàn được cung cấp. Bạn cũng có thể kiểm tra lại đề xuất chống răng cưa Swing từ FontRenderContext. Ví dụ sử dụng được hiển thị dưới đây.

Nếu bạn muốn in đậm văn bản, đó là tác dụng phụ của các chỉ số phân số, tôi muốn sử dụng phông chữ đậm hơn hoặc hiển thị đầu ra thành hình ảnh và làm mờ nó. Điều đó sẽ đảm bảo một giải pháp hệ thống độc lập.

import java.awt.*; 
import java.awt.event.*; 
import java.util.Map; 
import javax.swing.JLabel; 

public class TextHints { 
    public static void main(String[] args) { 
     Frame frame = new Frame(); 
     frame.addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 
     JLabel label = new JLabel("Sunday, March 17") { 
      @Override 
      protected void paintComponent(Graphics g) { 

       Graphics2D g2d = (Graphics2D) g; 

       Map desktopHints = (Map) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints"); 
       if (desktopHints != null) { 
        g2d.addRenderingHints(desktopHints); 
        System.out.println("Desktop: " + desktopHints); 
       } 
       java.awt.FontMetrics fm = getFontMetrics(getFont()); 
       Object swingHint = fm.getFontRenderContext().getAntiAliasingHint(); 
       System.out.println("Swing AntiAliasingHint: " + swingHint); 

       super.paintComponent(g2d); 
      } 
     }; 
     label.setBackground(Color.BLACK); 
     label.setForeground(Color.LIGHT_GRAY); 
     label.setOpaque(true); 

     label.setFont(label.getFont().deriveFont(Font.BOLD, 14f)); 

     frame.add(label); 
     frame.setSize(new Dimension(160, 100)); 
     frame.setVisible(true); 
    } 
} 
+0

Điều này dường như không hoạt động. Tôi không tìm cách để làm cho nó dày hơn tôi đang tìm kiếm để làm cho nó sắc nét và sạch hơn. Điều này làm cho trông giống như hình ảnh bên phải. Tôi đang tìm kiếm để làm cho nó trông giống như hình ảnh bên trái, đó là hơi mỏng hơn –

+0

Tôi đang tìm hình ảnh phụ của phông chữ. Nhưng đó dường như chỉ là Java 6 ... –

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