2012-06-13 43 views
10

Tôi muốn tạo một đầu ra giống như bàn điều khiển bằng cách sử dụng JTextPane. Vì vậy, tôi đang sử dụng một phông chữ đơn cách:Phông chữ/biểu tượng Monospaced cho JTextPane

textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); 

này làm việc tốt cho tất cả các loại alphanum (như az, 0-9, vv) ký tự, nhưng khi nói đến biểu tượng như ' \ u2588' (█), phông chữ không còn đơn điệu nữa.

Tôi đã quên gì đó chưa? Hay không có một phông chữ đơn điệu bao gồm các ký hiệu?

Trả lời

10

Ok, trước hết, có vẻ như tôi đang cố gắng giải quyết một vài điều khác nhau ở đây, vì vậy tôi sẽ cố gắng giải quyết chúng một cách riêng biệt.

1. Bạn cần một phông chữ đơn cách cho tất cả các ký tự unicode, ký hiệu hoặc cách khác.

Theo trang this, có 12886 ký tự chữ và số và ký hiệu "được xác định theo tiêu chuẩn Unicode 3.2. Unicode bây giờ là 6.0, vì vậy chúng tôi có thể giả định rằng số lượng lớn hơn bây giờ. Tôi cũng giả định ở đây rằng "chữ và số" có nghĩa là các ký tự tiếng Anh, bởi vì Unicode hỗ trợ hơn 100000 ký tự bao trùm nhiều ngôn ngữ. Dù sao đi nữa, 12886 ký tự và biểu tượng được công nhận bằng tiếng Anh vẫn là A LOT, và tôi nghi ngờ rằng có rất nhiều phông chữ miễn phí hỗ trợ tất cả chúng.

Điều đó nói rằng, tôi kết thúc bằng cách sử dụng Courier New cho hầu hết các ứng dụng Java của tôi cần một phông chữ đơn cách có hỗ trợ ký tự. Nó hỗ trợ ký tự '\ u2588' mà bạn đã đề cập ở trên cũng như nhiều ký tự quan trọng khác như ký hiệu "độ".

2. phông chữ mono-spaced này cần phải được "cross-platform"

Tôi biết chắc chắn rằng Mac OS X và tất cả hương vị của Windows hỗ trợ Courier New, và các phiên bản của Linux Tôi chạy trên làm (RedHat ... không thể nhớ số phiên bản), mặc dù không phải tất cả các phiên bản Linux đều có phông chữ này. Dù sao ... bạn có thể thử Courier New và xem nó có phù hợp với bạn hay không. Nếu không, bạn có thể tìm thấy các công cụ trực tuyến miễn phí để thử nghiệm hỗ trợ phông chữ/ký tự.

suy nghĩ cuối cùng

Tôi ghét phải nói điều đó, nhưng tôi nghi ngờ rằng có rất nhiều phông chữ lên đó, hỗ trợ tất cả ký tự chữ và/biểu tượng xác định bởi các tiêu chuẩn Unicode, ít nhất của tất cả là mono-spaced, chéo -nền tảng và miễn phí. Nếu có thể, bạn nên dành thời gian để cố gắng tìm ra biểu tượng nào bạn cần, sau đó chọn phông chữ hỗ trợ các biểu tượng đó và lần lượt được hỗ trợ bởi các nền tảng bạn biết bạn sẽ chạy ứng dụng của mình. Nếu bạn hoàn toàn cần phải có hỗ trợ cho tất cả các biểu tượng Unicode, thật không may, nó có thể sẽ không đến miễn phí.

+0

Với các ký tự chữ và số tôi có nghĩa là a-Z, 0-9 vv Chuyển phát nhanh Mới hoạt động tốt cho tôi. – user28061

+0

Tôi khuyên bạn nên sử dụng mã nguồn chuyên nghiệp để có phông chữ nền tảng chéo miễn phí đẹp mắt. Bạn sẽ cần phải gói nó trong trình cài đặt của bạn hoặc yêu cầu người dùng của bạn cài đặt nó theo cách thủ công. https://github.com/adobe-fonts/source-code-pro/releases – Appak

3

Phông chữ đơn cách hoạt động trên OS X chứ không phải Windows. Điều kỳ lạ là monospaced được cấu hình để sử dụng Courier New trên Windows thông qua fontconfig.properties.

Tôi đã thực sự ghi nhật ký này dưới dạng lỗi với Oracle; đây là một số mã mẫu hiển thị chính xác trên OS X nhưng phông chữ đơn cách tạo ra các hộp vuông trên Windows.

import java.awt.BorderLayout; 
import java.awt.Font; 

import javax.swing.JEditorPane; 
import javax.swing.JFrame; 

public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame("editor test"); 
     f.getContentPane().setLayout(new BorderLayout()); 
     f.add(pane("monospaced"), BorderLayout.NORTH); 
     f.add(pane("Courier New"), BorderLayout.SOUTH); 
     f.pack(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 

    private static JEditorPane pane(final String name) { 
    JEditorPane p = new JEditorPane(); 
    final Font currFont = p.getFont(); 
    p.setFont(new Font(name, currFont.getStyle(), currFont.getSize())); 
    p.setText(name + " - 8\u1d00.\u1d0d."); 
    return p; 
    } 
} 

Tôi đã thử thêm \ u2588 vào nó và có vẻ tốt trên OS X đơn lẻ quá.