Tôi đang sử dụng Netbeans 7.2 với Trình tạo cảnh 1.0 để phát triển một ứng dụng JavaFX. Tôi đã thiết lập màn hình chính của mình và tôi muốn có nó vì vậy tôi nhấp vào một nút và nó sẽ đóng cửa sổ chính và mở cửa sổ khác. Đối tượng Stage chính nằm trong lớp chính, nhưng lớp điều khiển là riêng biệt, và không thể truy cập nó vì nó không tĩnh và trong một lớp khác. Làm cách nào để thay đổi cảnh hoặc giai đoạn?JavaFX cách thay đổi giai đoạn
Trả lời
Download JavaFX samples tìm dự án FXML-LoginDemo, đó là những gì bạn cần. Để tham khảo nhanh chóng tôi sao chép dán lớp java chính ở đây;)
/*
* Copyright (c) 2008, 2011 Oracle and/or its affiliates.
* All rights reserved. Use is subject to license terms.
*
* This file is available and licensed under the following license:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the distribution.
* - Neither the name of Oracle Corporation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package demo;
import demo.model.User;
import demo.security.Authenticator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
/**
* Main Application. This class handles navigation and user session.
*/
public class App extends Application {
private Stage stage;
private User loggedUser;
private static App instance;
public App() {
instance = this;
}
public static App getInstance() {
return instance;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@Override public void start(Stage primaryStage) {
try {
stage = primaryStage;
gotoLogin();
primaryStage.show();
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
public User getLoggedUser() {
return loggedUser;
}
public boolean userLogging(String userId, String password){
if (Authenticator.validate(userId, password)) {
loggedUser = User.of(userId);
gotoProfile();
return true;
} else {
return false;
}
}
public void userLogout(){
loggedUser = null;
gotoLogin();
}
private void gotoProfile() {
try {
replaceSceneContent("profile.fxml");
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void gotoLogin() {
try {
replaceSceneContent("login.fxml");
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
private Parent replaceSceneContent(String fxml) throws Exception {
Parent page = (Parent) FXMLLoader.load(App.class.getResource(fxml), null, new JavaFXBuilderFactory());
Scene scene = stage.getScene();
if (scene == null) {
scene = new Scene(page, 700, 450);
scene.getStylesheets().add(App.class.getResource("demo.css").toExternalForm());
stage.setScene(scene);
} else {
stage.getScene().setRoot(page);
}
stage.sizeToScene();
return page;
}
}
Bạn có thể làm theo cách này quá:
Sửa controller.java bạn theo cách này
Stage thisStage;
public void setStage (Stage stage){
thisStage = stage;
}
public void showStage(){
thisStage.setTitle("Titel in der MainController.java geändert");
thisStage.show();
}
Điều quan trọng đó là bạn không sử dụng thisStage trong phương thức khởi tạo.
Sửa Mainclass bạn theo cách này:
@Override
public void start(Stage stage) throws Exception {
URL location = getClass().getResource("Main.fxml");
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(location);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
Parent root = (Parent) fxmlLoader.load(location.openStream());
Scene scene = new Scene(root);
stage.setScene(scene);
MainController mainController = fxmlLoader.getController();
mainController.setStage(stage);
mainController.showStage();
}
Bạn có thể tải về một ví dụ Projekt (netbeans) here.
liên kết bị hỏng, bạn có thể cung cấp liên kết khác không? – ConquerorsHaki
Tôi có thể nói điều gì đó tương tự ở đây, nhưng đây là cách tôi làm điều đó:
(Trong ví dụ này, tôi đang chuyển từ Login.fxml để Home.fxml).
Bên trong lớp LoginController.fxml, tôi đã tạo ra các phương pháp sau đây:
@FXML
private void login(javafx.event.ActionEvent event) throws IOException
{
if(pwf1.getText().equals("dolphin"))
{
Parent blah = FXMLLoader.load(getClass().getResource("Home.fxml"));
Scene scene = new Scene(blah);
Stage appStage = (Stage) ((Node) event.getSource()).getScene().getWindow();
appStage.setScene(scene);
appStage.show();
}
else
{
label1.setText("Password is incorrect. Please Try Again");
}
}
Và đó là nó .;)
Dựa trên câu hỏi của bạn, Gần đây tôi đã làm việc trên đang phát triển một iOS tương đương NavigationController cho JavaFX, sử dụng ý tưởng đơn giản nhất về chế độ xem đẩy và loại bỏ.
Hãy để tôi chia sẻ mã với cộng đồng: https://github.com/jalopezsuarez/javafx-screens
Ý tưởng, là để có một môi trường rất rất dễ dàng để giúp bạn thay đổi giữa các màn hình.
Hy vọng nó sẽ giúp bạn.
- 1. Làm cách nào để tạo hoạt ảnh Thay đổi kích thước cho giai đoạn JavaFX?
- 2. JavaFX 2.0: Đóng một giai đoạn (cửa sổ)
- 3. tạo giai đoạn chưa được trang trí trong javafx 2.0
- 4. thay đổi giai đoạn trong git dựa trên regex
- 5. Đặt Chiều cao và Chiều rộng của Giai đoạn và Cảnh trong javafx
- 6. Làm cách nào để đóng tất cả các giai đoạn khi giai đoạn chính bị đóng?
- 7. JavaFx 2.0: Kiểm soát thứ tự Z của các phần tử Giai đoạn
- 8. Làm thế nào để giải phóng bộ nhớ sau khi đóng Giai đoạn JavaFX?
- 9. API giai đoạn âm lịch
- 10. Hoạt ảnh hai giai đoạn và Hoạt ảnh hai giai đoạn cho ứng dụng iPhone?
- 11. Cách tạo hộp thoại JavaFX?
- 12. Cách nghe các sự kiện thay đổi kích thước trong JavaFX
- 13. git: giai đoạn chỉ tập tin mới
- 14. lỗi phân đoạn haskell với giai thừa
- 15. MySql - chậm gửi dữ liệu giai đoạn
- 16. giai đoạn Perl vs dấu phẩy hành
- 17. PVR texturetool xây dựng giai đoạn
- 18. Embedded Linux - Các giai đoạn khởi động
- 19. kích thước của giai đoạn swf nạp
- 20. javafx css thay đổi khi chạy
- 21. Ứng dụng javafx có thể hiển thị các giai đoạn khác nhau trên các màn hình khác nhau không?
- 22. Xây dựng Tab Giai đoạn Ẩn hoặc Thiếu
- 23. Trình nghe cho một Giai đoạn giảm thiểu, tối đa hóa, v.v.
- 24. Xác định giai đoạn thực hiện Maven trong một plugin
- 25. Sửa đổi một chạy kịch bản xây dựng giai đoạn trong XCode
- 26. cách thay đổi lớp của phân đoạn động
- 27. Android - Cách tự động thay đổi bố cục đoạn
- 28. Giai đoạn Git và cam kết với một lệnh
- 29. Porter Liferay và JSF: Chuyển hướng trong giai đoạn Render
- 30. Không thể thay đổi thẻ phân đoạn
Cảm ơn đây chính xác là những gì tôi đang tìm kiếm! –
cập nhật liên kết bị hỏng :) – invariant
là ngày này đúng không? tôi có nghĩa là, tôi có thể sử dụng này và gọi bên ngoài lớp App .replaceSceneContent? hoặc hôm nay (năm 2015) có cách nào để thực hiện thay đổi giữa các giai đoạn? thanks =) – user2582318