- Tôi phát triển một ứng dụng javafx.
- Trong ứng dụng của tôi có hai cảnh và một giai đoạn.
- Trong ứng dụng, chiều cao và chiều rộng cho cả hai cảnh đều giống nhau hoặc không đổi.
- vì vậy theo nghiên cứu của tôi chiều cao và chiều rộng cho cảnh vẫn không đổi mà đề cập đến trong các nhà xây dựng nhưng cảnh điều chỉnh chính nó với chiều cao và chiều rộng của sân khấu.
- khi tôi áp dụng bữa trưa với chiều cao và chiều rộng của giai đoạn khác với chiều cao và chiều rộng không đổi của cảnh rồi cảnh điều chỉnh theo giai đoạn.
nhưng khi ở thời gian chạy khi tôi áp dụng cảnh thứ 2 thì cảnh không được điều chỉnh với chiều cao và chiều rộng của sân khấu. Chiều cao và chiều rộng của cảnh vẫn không đổi.Đặt Chiều cao và Chiều rộng của Giai đoạn và Cảnh trong javafx
để giải pháp nào?
Trả lời
Khi tôi hiểu vấn đề ở trên được đăng. Tôi nghĩ rằng giai đoạn là đủ tốt để thiết lập chiều cao và chiều rộng ưa thích theo người nghe nhận được yêu cầu mới hơn để áp dụng trên kích thước cửa sổ. Nhưng nó có một số hạn chế, nếu bạn tối đa hóa hoặc thu nhỏ màn hình javaFX và sẽ cố gắng điều hướng đến màn hình khác thì màn hình khác sẽ có cùng kích thước cửa sổ nhưng nội dung cảnh sẽ bị biến dạng thành chiều cao và chiều rộng mặc định, ví dụ như đăng nhập và cảnh nhà trong javafx (tất cả các cảnh được screated với fxml). Login.fxml được khởi tạo bởi bộ điều khiển của nó. Như bạn đã đề cập cảnh đó được khởi tạo trong hàm khởi tạo, vì vậy nó phải là bộ điều khiển của fxml liên quan (hiện tại FXML được kết hợp chặt chẽ với bộ điều khiển). Bạn sẽ thiết lập kích thước khung cảnh (chiều cao & chiều rộng) trong bản thân hàm tạo.
1.) LoginController cho login.fxml
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
class LoginController {
private Stage stage;
private Scene scene;
private Parent parent;
@FXML
private Button gotoHomeButton;
public LoginController() throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/login.fxml"));
fxmlLoader.setController(this);
try {
parent = (Parent) fxmlLoader.load();
// set height and width here for this login scene
scene = new Scene(parent, 1000, 800);
} catch (IOException ex) {
System.out.println("Error displaying login window");
throw new RuntimeException(ex);
}
}
// create a launcher method for this. Here I am going to take like below--
public void launchLoginScene(Stage stage) {
this.stage = stage;
stage.setScene(scene);
stage.setResizable(true);
stage.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
setCurrentWidthToStage(number2);
}
});
stage.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
setCurrentHeightToStage(number2);
}
});
//Don't forget to add below code in every controller
stage.hide();
stage.show();
}
@FXML
public void authenticateUser(ActionEvent actionEvent) {
// write your logic to authenticate user
//
new HomeController().displayHomeScreen(stage);
}
private void setCurrentWidthToStage(Number number2) {
stage.setWidth((double) number2);
}
private void setCurrentHeightToStage(Number number2) {
stage.setHeight((double) number2);
}
}
2.) Tương tự cho HomeController -
public class HomeController {
private Parent parent;
private Stage stage;
private Scene scene;
public HomeController(){
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/home.fxml"));
fxmlLoader.setController(this);
try {
parent = (Parent) fxmlLoader.load();
// set height and width here for this home scene
scene = new Scene(parent, 1000, 800);
} catch (IOException e) {
// manage the exception
}
}
public void displayHomeScreen(Stage stage){
this.stage = stage;
stage.setScene(scene);
// Must write
stage.hide()
stage.show();
}
}
3.) lớp Main
import javafx.application.Application;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
new LoginController().launchLoginScene(primaryStage);
}
public static void main(String[] args) {
launch(args);
}
}
Chỉ cần cố gắng đưa Stage.hide() trước Stage.show() trong mọi bộ điều khiển. Tôi mong rằng nó giúp ích được cho bạn.
Đó là bởi vì các giai đoạn điều chỉnh kích thước của nó đến hiện trường, trừ khi chỉ dẫn rõ ràng diferently ...
Để đây là một giải pháp:
stage.setScene(scene2);
stage.setHeight(1000);
stage.setWidth(1000);
Và một ứng dụng mẫu:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(final Stage stage) throws Exception {
AnchorPane anchor1 = new AnchorPane();
final Scene scene1 = new Scene(anchor1, 250, 250);
Button boton1 = new Button();
anchor1.getChildren().add(boton1);
AnchorPane anchor2 = new AnchorPane();
final Scene scene2 = new Scene(anchor2, 500, 500);
Button boton2 = new Button();
anchor2.getChildren().add(boton2);
boton2.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
// TODO Auto-generated method stub
stage.setScene(scene1);
stage.setHeight(1000);
stage.setWidth(1000);
}
});
boton1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
// TODO Auto-generated method stub
stage.setScene(scene2);
stage.setHeight(1000);
stage.setWidth(1000);
}
});
stage.setScene(scene1);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Mẫu được đăng bởi bạn là đúng khái niệm áp dụng chiều cao và chiều rộng cho giai đoạn cũng đúng. Nhưng nếu bạn áp dụng hình nền cho cả cảnh và thay đổi kích thước của giai đoạn (thử kích thước khác) trên sự kiện nhấp của cả hai nút thì bạn sẽ tìm ra vấn đề thực tế. Lần thứ hai cảnh sẽ không nhận được điều chỉnh với giai đoạn .......... vì vậy tôi cần một cách để làm mới sân khấu. – Anvay
bạn đã cố gắng sử dụng: stagePropio.sizeToScene(); ? – Magcus
Stage.sizeToScene() là khái niệm đúng nhưng tôi muốn cảnh để có được điều chỉnh với sân khấu. – Anvay
Tôi biết đây là chủ đề cũ, nhưng lỗi này (lỗi?) Vẫn tồn tại trong Java7u75.
Tôi đã gặp sự cố tương tự ...các giải pháp được cung cấp bởi bé cho ở trên không làm việc, nhưng kết quả trong một có thể nhìn thấy "chuyển đổi cửa sổ" có hiệu lực:
stage.hide();
stage.show();
tôi thấy rằng đoạn mã sau giải quyết vấn đề (được sân khấu để "làm mới") mà không bất kỳ tác dụng có thể nhìn thấy:
final boolean resizable = stage.isResizable();
stage.setResizable(!resizable);
stage.setResizable(resizable);
- 1. Đặt chiều rộng và chiều cao của cảnh
- 2. Bắt thực chiều rộng đoạn video HTML5 và chiều cao
- 3. Nhận chiều rộng và chiều cao của các thành phần trong chế độ xem Phân đoạn
- 4. Đặt chiều rộng và chiều cao DIV trong JavaScript
- 5. Chiều rộng và chiều cao của giao diện người dùng jQuery dựa trên chiều rộng và chiều cao màn hình
- 6. Đặt chiều rộng và chiều cao trên thẻ A
- 7. Đặt chiều cao và chiều rộng Div (#Map) thành 100%
- 8. Chiều rộng và chiều cao thời gian chạy của Usercontrol
- 9. XNA: lấy chiều rộng và chiều cao của màn hình
- 10. Chiều rộng và chiều cao của Menu Tùy chọn?
- 11. Cách lấy chiều rộng và chiều cao của hình ảnh?
- 12. Chỉ định Chiều rộng và Chiều cao của Lô
- 13. Tăng chiều rộng và chiều cao của đầu ra gnuplot
- 14. MKPinAnnotationView: Chiều rộng và chiều cao của pin
- 15. Chiều rộng và chiều cao tùy chỉnh trong DOMPDF
- 16. Chiều cao và chiều rộng trên iPhone (/ iPad)
- 17. Tự động đặt chiều rộng và chiều cao của TextView trong Android
- 18. cách đặt chiều rộng và chiều cao của biểu mẫu trong delphi
- 19. GetSupportedPreviewSize trả về chiều rộng và chiều cao ngược
- 20. Chiều rộng và chiều cao phần web SharePoint động
- 21. Cách đặt cùng chiều rộng và chiều cao của một nút
- 22. không thể đặt chiều cao và chiều rộng của hình dạng tài nguyên theo kiểu
- 23. Đặt chiều cao và chiều rộng của phần tử canvas thành window.innerHeight/innerWidth tạo thanh cuộn
- 24. Đặt chiều rộng và chiều cao của ImageView theo cách lập trình trên tiện ích
- 25. Kích thước trình duyệt (chiều rộng và chiều cao)
- 26. Chiều rộng và chiều cao đầy đủ SVG
- 27. Chiều cao và chiều rộng hình ảnh không hoạt động?
- 28. Đặt chiều rộng và chiều rộng DIV Vùng chứa của Google Maps 100%
- 29. Lấy chiều cao và chiều rộng hình ảnh PHP
- 30. sử dụng Fancybox thiết lập chiều cao và chiều rộng
Giai đoạn cần phải làm mới nhưng làm cách nào? – Anvay