2011-08-15 38 views
5

Tôi cần tìm chiều rộng của văn bản được vẽ trên màn hình. This thread gợi ý rằng FontMetrics.stringWidth() đôi khi sẽ không chính xác như FontMetrics.getStringBounds().Sự khác nhau giữa FontMetrics.stringWidth() và FontMetrics.getStringBounds() là gì?

Có ai biết nếu điều này là chính xác không và nếu có thì sự khác biệt này có thể nhìn thấy được không? FontMetrics.stringWidth() dường như được sử dụng thường xuyên hơn, bao gồm trong SwingUtilities.computeStringWidth(). Ngoài ra, lợi thế rõ ràng là nó không đòi hỏi đối tượng đồ họa, nhưng chính nó kết hợp với thực tế là các biện pháp chống răng cưa và tương tự được xác định trong đối tượng Graphics có thể giải thích tại sao FontMetrics.getStringBounds() có thể chính xác hơn.

+2

Xem thêm [Hỏi & Đáp] (http://stackoverflow.com/questions/5979795/how-to-calculate-the-number-of-rows-and-columns-in-each-row-a- text-take-in-aj/5998117 # 5998117). – trashgod

Trả lời

5

getStringBounds có thêm thông tin để làm việc, kể từ khi được truyền Đồ họa. Nó có thể sử dụng điều này để tính toán vị trí glyph phụ pixel và tính đến các tác động của việc chống răng cưa trên kích thước glyph. Từ tài liệu cho số FontRenderContext:

Chống răng cưa và phân số được chỉ định bởi ứng dụng cũng có thể ảnh hưởng đến kích thước của ký tự do làm tròn ranh giới pixel.

4

Tôi nghĩ câu trả lời nằm trong câu hỏi của bạn. Từ javadocs:

stringWidth

Lưu ý rằng tổng chiều rộng trước trở về từ phương pháp này không đưa vào tài khoản bối cảnh vẽ. Do đó, các gợi ý chỉ số chống răng cưa và phân số có thể ảnh hưởng đến giá trị của tiền tạm ứng. Khi kích hoạt các chỉ số chống răng cưa và phân số, hãy sử dụng getStringBounds (String, Graphics) thay vì phương thức này. Sự tiến bộ của một String không nhất thiết là tổng các tiến bộ của các ký tự của nó.

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