2013-08-20 30 views
5

Cách tính chiều rộng String bằng pixel trong Java? Ví dụ: tôi có chuỗi có nội dung "Hello World!". Chiều dài của nó tính bằng pixel, cũng xem xét gia đình và kích thước phông chữ của nó là bao nhiêu?Làm cách nào để tính chiều rộng của một chuỗi theo pixel?

+0

Vâng, bạn có một phông chữ đặc biệt và kích thước phông chữ trong tâm trí? – Matthias

+0

Có thể tùy ý bất cứ ai. – user2550754

+0

Đã chỉnh sửa định dạng của bạn để xóa đánh dấu mã cho độ dài cụ thể. –

Trả lời

1

Có một số cách để đạt được những gì bạn muốn, dựa trên những gì nó là bạn muốn đạt được, ví dụ ...

BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2d = img.createGraphics(); 
FontMetrics fm = g2d.getFontMetrics(); 
System.out.println(fm.stringWidth("This is a simple test")); 
g2d.dispose(); 

Nhưng điều này chỉ có relevence cho BufferedImage và nó Graphics bối cảnh, nó sẽ không dịch lại để nói, một cái gì đó giống như một màn hình hoặc máy in.

Tuy nhiên, miễn là bạn có ngữ cảnh Graphics, bạn có thể đạt được kết quả tương tự.

Ví dụ này, rõ ràng, sử dụng phông chữ mặc định cài đặt cho Graphics bối cảnh mà bạn có thể thay đổi nếu bạn cần phải ...

+0

Tôi chỉ có một' Chuỗi'. Tôi biết chiều dài của nó, họ phông chữ, cỡ chữ. Tôi muốn tính toán kích thước của nó theo pixel. – user2550754

+0

Tốt, sau đó bạn có thể sử dụng một cái gì đó như ở trên. Chiều rộng và chiều cao phụ thuộc vào ngữ cảnh 'Graphics' mà bạn đang hiển thị. Mặc dù bạn có họ phông chữ, kích thước phông chữ và văn bản, bạn thiếu phần tử khóa – MadProgrammer

+0

+1 nhưng TextLayout/SwingUtilities.computeStringWidth – mKorbel

4

Tóm lại: câu hỏi phụ thuộc vào khung bạn đang sử dụng. Ví dụ, nếu bạn đang sử dụng AWT, và có một đối tượng Graphicsgraphics, và một đối tượng Fontfont bạn có thể làm như sau:

FontMetrics metrics = graphics.getFontMetrics(font); 
int width = metrics.stringWidth("Hello world!"); 

Check-out this để biết thêm thông tin.

1

Bạn có thể thử một cái gì đó như thế này

Graphics2D g2d = ... 
Font font = ... 
Rectangle2D r = font.getStringBounds("hello world!", g2d.getFontRenderContext()); 
System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")"); 

Tham khảo doc này, có thể giúp bạn.

+0

Có vẻ như một chút đã được cân nhắc khi bạn có thể sử dụng 'Graphics # getFontMetrics', nhưng tôi sẽ cho bạn một cuộc bỏ phiếu cho sự khác biệt;) – MadProgrammer

0

có vài cách để làm điều đó, bạn có thể thử label.getElement().getClientWidth(); nếu văn bản là trong một lable, nếu bạn đang sử dụng AWT bạn có thể sử dụng Graphics.getFontMetrics sau đó FontMetrics.stringWidth

0

Bạn có thể sử dụng FontMetrics. Lớp FontMetrics định nghĩa đối tượng chỉ số phông chữ, bao gồm thông tin về hiển thị phông chữ cụ thể trên màn hình cụ thể.

Bạn có thể làm một cái gì đó như dưới đây

Font font = new Font("Verdana", Font.PLAIN, 10); 
    FontMetrics metrics = new FontMetrics(font) { 
    }; 
    Rectangle2D bounds = metrics.getStringBounds("Hello World!", null); 
    int widthInPixels = (int) bounds.getWidth(); 
+0

Tôi có một cảm giác khá tốt rằng điều này sẽ không hoạt động. Kích thước pixel sẽ phụ thuộc vào ngữ cảnh 'Graphics', mà bạn đang chuyển' null' cho ... – MadProgrammer

+0

Không chắc chắn làm thế nào để vượt qua xác minh kết quả nhưng khi tôi chạy nó tôi nhận được 67 là đầu ra cho chuỗi Hello World ! –

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