Mục đích duy nhất của lớp học này là cho phép Window undecorated được kéo. Nó cũng thực hiện nhiệm vụ để đảm bảo TaskBar vẫn hiển thị với FullScreen, và đảm bảo cửa sổ undecorated không được kéo ra khỏi màn hình. Cuối cùng, nó cung cấp sửa lỗi cho lỗi "không tìm thấy tài nguyên css". Chỉ cần dán mã bên dưới vào lớp chính trong phương thức start() được ghi đè chỉ là khi Stage là ABOUT READY được hiển thị hoặc sau đó.
WindowStyle.allowDrag(root, stage);
WindowStyle.stageDimension(stage.getWidth(), stage.getHeight());
LƯU Ý: Dán ở trên khi Giai đoạn là GIỚI THIỆU S READN SÀNG được hiển thị hoặc sau đó. Đối với sử dụng đầy đủ cửa sổ màn hình:
WindowStyle.fullScreen(Stage stage);
Để thay đổi kích thước trở lại sử dụng theo thời gian:
WindowStyle.restoreScreen(Stage stage);
Để thêm stylesheets tùy chỉnh để cảnh của bạn, Đơn giản chỉ cần dán bên dưới mã trong lớp chính trong khi bắt đầu ghi đè() sau khi xác định cảnh của bạn.
scene.getStylesheets().add(WindowStyle.addStyleSheet(String css));
Tên của css được sử dụng để tạo kiểu tóc có thể theo hình thức: main.css
hoặc styles/main.css
import javafx.geometry.Rectangle2D;
import javafx.scene.Parent;
import javafx.scene.input.MouseEvent;
import javafx.stage.Screen;
import javafx.stage.Stage;
/**
* @author: BENJAH
*/
public class WindowStyle {
private static final Rectangle2D SCREEN_BOUNDS= Screen.getPrimary()
.getVisualBounds();
private static double[] pref_WH, offset_XY;
private static String styleSheet;
private WindowStyle(String css) {
styleSheet= getClass().getResource(css).toString();
}
protected static void allowDrag(Parent root, Stage stage) {
root.setOnMousePressed((MouseEvent p) -> {
offset_XY= new double[]{p.getSceneX(), p.getSceneY()};
});
root.setOnMouseDragged((MouseEvent d) -> {
//Ensures the stage is not dragged past the taskbar
if (d.getScreenY()<(SCREEN_BOUNDS.getMaxY()-20))
stage.setY(d.getScreenY() - offset_XY[1]);
stage.setX(d.getScreenX() - offset_XY[0]);
});
root.setOnMouseReleased((MouseEvent r)-> {
//Ensures the stage is not dragged past top of screen
if (stage.getY()<0.0) stage.setY(0.0);
});
}
//Sets the default stage prefered width and height.
protected static void stageDimension(Double width, Double height) {
pref_WH= new double[]{width, height};
}
protected static void fullScreen(Stage stage) {
stage.setX(SCREEN_BOUNDS.getMinX());
stage.setY(SCREEN_BOUNDS.getMinY());
stage.setWidth(SCREEN_BOUNDS.getWidth());
stage.setHeight(SCREEN_BOUNDS.getHeight());
}
protected static void restoreScreen(Stage stage) {
stage.setX((SCREEN_BOUNDS.getMaxX() - pref_WH[0])/2);
stage.setY((SCREEN_BOUNDS.getMaxY() - pref_WH[1])/2);
stage.setWidth(pref_WH[0]);
stage.setHeight(pref_WH[1]);
}
protected static String addStyleSheet(String css) {
new WindowStyle(css);
return styleSheet;
}
}
Nguồn
2017-12-21 17:27:16
Liệu các tài sản trên ẩn thanh tiêu đề tất cả lại với nhau? Làm thế nào để bạn có kế hoạch kéo cửa sổ? – SoulMan
Có NeilGhosh, thuộc tính trên ẩn toàn bộ thanh tiêu đề. –