我正在尝试使用 SceneBuilder 和 FXML 构建一个简单的概念验证程序,该程序由两个屏幕组成。第一个屏幕只是一个文本字段和一个将您带到第二个屏幕的按钮,第二个屏幕只有一个标签,理想情况下,该标签将显示按下按钮时文本字段内的任何内容。每个屏幕都有自己的 FXML 文件和自己的控制器。我已经阅读了有关 FXMLLoader 的内容,因为我的研究表明这是完成此任务的理想方式,但我似乎仍然无法辨别如何正确使用它。最终,我想在角色扮演游戏的一种“角色创建”游戏前屏幕中实现这一点,其中玩家统计滚动/库存选择从初始屏幕移动到用于计算/处理的模型,
问问题
2521 次
1 回答
-1
好的,这是一个答案,请耐心等待,我找到了一个 Sahil Huseynzade 的视频,我认为它最终为我做了这个点击。我在想我可以将 FXMLLoader 用作几乎某种导入,我可以在创建控制器期间以某种方式使用它以便随意访问其他控制器。我在下面复制了一些我使用 FXMLLoader 工作的代码,其中一些评论与我认为 FXMLLoader 的工作方式有关。抱歉,如果从技术角度来看,这些解释是迟钝的或措辞不佳,或者我在所有这些过程中都是一个普通的新手/笨蛋。不过,我确实有一个进一步的问题,我希望在答案中问它是不好的形式,有没有办法让它跨窗口动态更新信息?就像我可以让一个窗口有一个骰子滚动按钮,谁'
package twoscreentest;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class Screen1Controller implements Initializable {
@FXML
public Label label;
@FXML
public Button button;
@FXML
private TextField textCharName;
public String testtext;
@Override
public void initialize(URL url, ResourceBundle rb) {
label.setText(Byte.toString((byte) (Math.floor(Math.random()*6)+1)));
}
@FXML
private void btnSend(ActionEvent event) throws IOException {
PlayerInfo player = new PlayerInfo(textCharName.getText(), Double.parseDouble(label.getText())); // Creating the temporary container.
//((Node)event.getSource()).getScene().getWindow().hide(); This is to close the previous window, for testing it was easier to disable it.
FXMLLoader loader = new FXMLLoader(); // Creating a the FXMLLoader
loader.setLocation(getClass().getResource("Screen2.fxml")); // Telling it to get the proper FXML file.
loader.load(); // Loading said FXML.
Parent p = loader.getRoot(); // Setting up the window, I think I get how this works,
//probably...
Stage stage = new Stage();
stage.setScene(new Scene(p));
Screen2Controller screen2controller = loader.getController(); // This right here I
//don't entirely get, I know that I'm using the loader to get the controller, but
//what's with the "NameofControllerClass variablename"?
screen2controller.setCurrentInfo(player); // Setting the empty container in
// the second class' variables to the ones in the the temporary container that
// I created earlier.
screen2controller.testlabel.setText(testtext); // An additional test, setting a label
// on the second screen to a variable I set in this controller with a separate button.
stage.show(); // Create the second screen.
}
@FXML
private void btnSend2(ActionEvent event) {
testtext = "Hello world";
}
}
于 2015-05-31T20:03:50.637 回答