2012-04-13 4 views
5

Có thể tìm thấy hộp giới hạn thực của một chuỗi trong Java không? tức là hình chữ nhật nhỏ nhất bao gồm các điểm ảnh thực sự được vẽ?Cách tìm kích thước hiển thị đúng của chuỗi văn bản trong Java

Tôi đã xem xét FontMetrics và LineMetrics và mặc dù chúng cho phép chuỗi được chuyển vào, chúng dường như không tính đến các ký tự, eh "a", "p" và "P" tất cả trở lại cùng chiều cao.

Cụ thể, chúng dường như bao gồm độ gốc trong chiều cao chuỗi ngay cả khi ký tự thực không xuống dưới đường cơ sở. Có các số liệu khác mà tôi có thể truy cập để trả lại một hộp giới hạn thực sự không?

Ngoài ra, có cách nào để biết liệu một ký tự cụ thể có dấu xuống không?

+1

Bạn đã kiểm tra các phương thức getAscent(), getDescent() và charWidth() chưa? Kiểm tra trang [FontMetrics] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/FontMetrics.html) để biết chi tiết –

Trả lời

4

Xem điều này tutorial on measuring text, được tập trung nhiều vào số FontMetrics.

Các phép đo nâng cao hơn (để lấy hộp giới hạn của một chuỗi cụ thể), sau đó TextLayout là bạn của bạn, as explained here.

Ngoài hướng dẫn trên TextLayout, javadoc chứa các ví dụ về việc sử dụng nó.

+0

Tôi đã xem xét FontMetrics, vấn đề là chiều cao() giá trị luôn luôn có vẻ bao gồm gốc, ngay cả đối với một ký tự như "a". Vì vậy, hộp của tôi xung quanh "a" có thêm không gian bên dưới bức thư. – Martin

+0

Đã thêm liên kết vào hướng dẫn TextLayout, mà tôi tin rằng sẽ xử lý việc này. – daveb

+0

Cụ thể TextLayout.getBounds – daveb

0

Bạn có thể sử dụng javax.swing.SwingUtilities.layoutCompoundLabel. Không được ngăn cản bởi nhiều tham số. Có hai phiên bản, phiên bản với JComponent (có thể là null) có nhiều cờ hơn. Nó được sử dụng cho JLabel, vì vậy khá linh hoạt và tạo ra một hình chữ nhật.

BTW Điều đó thậm chí trên "a" một giải nén có thể được thêm vào giới hạn, cũng có khả năng xảy ra ở đây. Bạn có thể lấy GlyphVector và tính toán một hộp giới hạn ở đó, nhưng khi gợi ý phông chữ được bật, vì vậy vị trí pixel hơi tắt, lỗi nào có thể tích luỹ qua nhiều ký tự?