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?
Trả lời
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 ...
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
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
+1 nhưng TextLayout/SwingUtilities.computeStringWidth – mKorbel
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 Graphics
graphics
, và một đối tượng Font
font
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.
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.
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
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
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();
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
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 ! –
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
Có thể tùy ý bất cứ ai. – user2550754
Đã chỉnh sửa định dạng của bạn để xóa đánh dấu mã cho độ dài cụ thể. –