Dường như không có lệnh gọi API để tính chiều rộng (tính bằng pixel) của chuỗi văn bản trong Java FX 2.2. Đã có đề xuất giải pháp trên các diễn đàn khác, nhưng những nỗ lực của tôi để tạo hoặc tìm bất kỳ mã nào trả về chiều rộng của chuỗi, hoặc sử dụng phông chữ mặc định hoặc cách khác, đã thất bại. Bất kỳ trợ giúp sẽ được đánh giá cao.Cách tính chiều rộng pixel của một String trong JavaFX?
Trả lời
Nếu bạn chỉ đo phông chữ mặc định mà không CSS:
- Đặt String để được đo bằng một đối tượng văn bản.
- Nhận chiều rộng của giới hạn bố cục của đối tượng Văn bản.
Nếu bạn cần phải áp dụng CSS:
- Đặt String để được đo bằng một đối tượng văn bản.
- Tạo cảnh quay và đặt đối tượng Text trong Scene.
- Chụp nhanh Bản văn (nếu bạn đang sử dụng Java 7) hoặc gọi applyCss cho Java 8.
- Lấy chiều rộng của giới hạn bố cục của đối tượng Văn bản.
Điều này có tác dụng vì nó buộc phải vượt qua bố cục trên Văn bản tính giới hạn bố cục của nó. Cảnh trong bước 2 là bắt buộc vì đó chỉ là cách xử lý CSS hoạt động (nó cần một nút được đặt trong một cảnh để có thể thực hiện công việc của mình). Chắc chắn đọc javadoc được liên kết cho applyCss nếu bạn muốn hiểu thêm về xử lý.
Mẫu Mã
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;
// displays the width in pixels of an arbitrary piece of text.
public class MeasureText extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) throws Exception {
final Text text = new Text("XYZZY");
new Scene(new Group(text));
// java 7 =>
// text.snapshot(null, null);
// java 8 =>
text.applyCss();
final double width = text.getLayoutBounds().getWidth();
stage.setScene(new Scene(new Label(Double.toString(width))));
stage.show();
}
}
chương trình mẫu đầu ra (hiển thị chiều rộng bằng pixel của một mảnh tùy ý các văn bản):
thế nào (nếu có) sẽ sự thay đổi này nếu văn bản được in vào một đồ họa với một phông chữ được thiết lập?
Áp dụng phông chữ cho đối tượng văn bản chứa cùng một thông báo bạn sẽ vẽ với canvas. Không giống như khi bạn đang đo văn bản được vẽ biểu đồ cảnh, các mục được vẽ vào khung vẽ không có CSS áp dụng cho chúng, do đó bạn không cần phải đặt đối tượng Văn bản trong một cảnh và đã áp dụng CSS cho nó trước khi đo văn bản. Bạn có thể đo các giới hạn bố trí của đối tượng văn bản của bạn và nó sẽ giống như giới hạn của văn bản được vẽ trong canvas với cùng một phông chữ.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.*;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.*;
import javafx.stage.Stage;
// displays the width in pixels of an arbitrary piece of text (which has been plotted on a canvas).
public class MeasureText extends Application {
@Override
public void start(Stage stage) throws Exception {
final String msg = "XYZZY";
final Text text = new Text(msg);
Font font = Font.font("Arial", 20);
text.setFont(font);
final double width = text.getLayoutBounds().getWidth();
Canvas canvas = new Canvas(200, 50);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFont(font);
gc.fillText(msg, 0, 40);
stage.setScene(new Scene(
new VBox(new Label(Double.toString(width)), canvas))
);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
gì về điều này:
float width = com.sun.javafx.tk.Toolkit.getToolkit().getFontLoader().computeStringWidth("", gc.getFont());
float height = com.sun.javafx.tk.Toolkit.getToolkit().getFontLoader().getFontMetrics(gc.getFont()).getLineHeight();
Điều này cũng có thể được sử dụng trong các bài kiểm tra đơn vị và ở nơi khác, bởi vì (trái với ảnh chụp nhanh) nó không yêu cầu mã được thực hiện trên một chuỗi ứng dụng FX. –
Đáng buồn thay đây là một truy cập nản lòng ... Nó không phải là trên api như của Java 8.25 – msj121
'gc' ... là gì? – Supuhstar
Tôi cố gắng này:
Text theText = new Text(theLabel.getText());
theText.setFont(theLabel.getFont());
double width = theText.getBoundsInLocal().getWidth();
và có vẻ như là làm việc tốt.
- 1. Đo chiều rộng pixel của một chuỗi
- 2. Làm cách nào để tính chiều rộng của một chuỗi theo pixel?
- 3. Cách tìm chiều rộng của chuỗi (tính bằng pixel) trong WIN32
- 4. Làm cách nào để đặt chiều rộng (tính bằng pixel) của thanh trượt đầu vào?
- 5. Cách tính chiều rộng của thanh cuộn?
- 6. Cách tính chiều rộng của phông chữ?
- 7. Tại sao chiều rộng Javascript của một ô trong một pixel quá ngắn?
- 8. Qt - Lấy chiều dài pixel của một chuỗi trong QLabel
- 9. Đặt Chiều cao và Chiều rộng của Giai đoạn và Cảnh trong javafx
- 10. Làm thế nào để tìm chiều rộng chuỗi trong C# (tính bằng pixel)
- 11. Tôi có thể trộn chiều rộng phần trăm và chiều rộng pixel trong tiêu đề bảng html của mình không?
- 12. Không thể tính chiều rộng của một div ẩn
- 13. Chuyển đổi chiều rộng từ phần trăm pixel
- 14. CSS: chiều rộng của một liên kết không thay đổi bằng cách thiết lập thuộc tính chiều rộng
- 15. C# tính chiều cao của một chuỗi với chiều rộng đã cho
- 16. Độ dài của một chuỗi theo pixel
- 17. Cách lấy chiều rộng và chiều cao của phần tử được tính trong YUI3?
- 18. Cách tính chiều cao và chiều rộng của đối tượng bằng camera chỉ trong iOS?
- 19. Tôi làm cách nào để databind Chiều rộng của Chiều rộng hoặc Độ rộng của hàngDefID?
- 20. Đo chiều rộng của một AttributedString trong J2ME
- 21. tính toán động của chiều rộng UILabel trong UITableViewCell
- 22. Cắt bớt một chuỗi độc đáo để vừa với chiều rộng pixel nhất định
- 23. Cách tính kích thước của một UIFont khi văn bản trong nhãn bị hạn chế để vừa với chiều rộng?
- 24. Làm cách nào để nhận được chiều cao của đối tượng GWT tính bằng pixel?
- 25. Hỗ trợ trình duyệt thuộc tính chiều rộng và chiều cao của getBoundingClientRect?
- 26. Tại sao vải Tkinter yêu cầu 4 pixel phụ cho chiều rộng và chiều cao?
- 27. Đo chiều rộng văn bản trong Qt
- 28. Độ rộng điều khiển lạ trong JavaFX 2?
- 29. Cách nhận hoặc tính toán chiều rộng/chiều cao của chế độ xem được tăng cao
- 30. Xác định chiều rộng/chiều cao css trong các đơn vị độc lập của thiết bị?
là công cụ này tính chiều rộng của chuỗi theo hệ điều hành hoạt động trên nếu tôi muốn tính chiều rộng văn bản trên Windows và Mac OX? –
Có, chiều rộng chính xác sẽ được trả lại, bất kể hệ điều hành được sử dụng. – jewelsea
Giải pháp này cũng có tính đến văn bản được tạo kiểu nếu kiểu được áp dụng cho văn bản trước khi chụp nhanh không? – Brendan