我知道有很多关于传递参数的线程,但我仍然不明白。
我有Main.fxml
阶段与MainController
类。在这个类中,我创建了例如变量int x=5
。然后我单击此阶段上的按钮,它使用秒控制器
创建新阶段,我可以在其中修改此值。在MainController
中是x
值的setter和getter方法。在秒控制器
中,我可以从MainController
中获取x
值并对其进行编辑,但最后当我关闭第二阶段时,我尝试通过MainController
中的setter方法将此编辑后的值设置为新数字。然后我关闭它,然后像第一次一样再次打开它。但是我看不到新的编辑值,我再次看到默认创建的相同值。
这是我的主控制器,名为FirstController:
public class FirstController {
private int x = 5;
@FXML
private Label label;
@FXML
void click(ActionEvent event) {
SecondController secondController = new SecondController();
secondController.startSecondController(new Stage());
}
@FXML
public void initialize()
{
label.setText(Integer.toString(x));
}
//constructor
public FirstController() {
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
这是我的第二控制器
:
public class SecondController {
@FXML
private TextField testArea;
private FirstController firstController;
private int localX;
//constructor
public SecondController() {
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("First.fxml"));
try
{
loader.load();
firstController = loader.getController();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void startSecondController(Stage stage)
{
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("Second.fxml"));
try
{
Pane pane = loader.load();
Scene scene = new Scene(pane, 300, 300);
stage.setTitle("Second Window");
stage.setScene(scene);
stage.show();
}
catch (IOException e)
{
e.printStackTrace();
}
}
@FXML
void click(ActionEvent event) {
localX = Integer.parseInt(testArea.getText());
firstController.setX(localX);
}
@FXML
public void initialize()
{
localX = firstController.getX();
testArea.setText(Integer.toString(localX));
}
}
我认为描述这个问题就足以理解这一点。有人能给我举个例子如何实现我的目标吗?
关于@James_D说的话,我想了很多,我已经完成了我的代码。这是控制器可以相互通信的结果:FirstController
class:
public class FirstController {
private IntegerProperty x = new SimpleIntegerProperty();
SecondController secondController;
@FXML
private Label label;
@FXML
void click(ActionEvent event) {
Stage stage = new Stage();
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("Second.fxml"));
try
{
Pane pane = loader.load();
secondController = loader.getController();
secondController.setLocalX(x.getValue());
secondController.setFirstController(this);
Scene scene = new Scene(pane, 300, 300);
stage.setTitle("Second Window");
stage.setScene(scene);
stage.show();
}
catch (IOException e)
{
e.printStackTrace();
}
}
@FXML
public void initialize()
{
label.setText(Integer.toString(x.getValue()));
x.addListener( observable -> {
label.setText(Integer.toString(x.getValue()));
});
}
//constructor
public FirstController() {
x.set(5);
}
public int getX() {
return x.getValue();
}
public void setX(int x) {
this.x.set(x);
}
}
和SecondController
,它将x
值从FirstController
更改为:
public class SecondController {
@FXML
private TextField testArea;
private FirstController firstController;
private int localX;
public void setFirstController(FirstController firstController) {
this.firstController = firstController;
}
public void setLocalX(int x)
{
localX = x;
testArea.setText(Integer.toString(localX));
}
@FXML
void click(ActionEvent event) {
localX = Integer.parseInt(testArea.getText());
firstController.setX(localX);
}
@FXML
public void initialize()
{
testArea.setText(Integer.toString(localX));
}
}
这样好吗?或者最好尝试使用加力喷射。框架?
我有两个控制器和。我正在读一本书的内容。来自的txt文件,我希望将该文本放置在的文本区域中。代码在中运行并读取良好,但当打开中的窗口时,从中读取的内容。文本内容在文本区域中不可见。我的显示String mine包含内容,但它不显示在的文本区域中。请帮助任何人。非常感谢。 FXMLDocumentController代码 在中,有一个我删除了和,这样代码就可以工作了。
需要你的帮助!这可能是更多的设计角度,但我在我的应用程序中使用这个模式,所以想得到一个想法。 我的问题是直接或间接地从一个控制器访问另一个控制器。是否有任何优雅的设计方法来做到这一点,而不是在另一个控制器中保留一个控制器的引用。 提前致谢
和访问字段,如: 因为我希望有更好的方法来做到这一点。
我有两个控制器和。 在中,我有一个名为的方法。 如何在中访问此方法?
因此,我将一个名为“size”的整数保存到一个名为SettingsStageController的控制器类中。java和我希望通过另一个名为GameStageController的控制器类文件访问该变量。java,但我似乎不知道怎么做。 设置标记控制器。JAVA GameStageController.java
这让我的头撞到了墙上!!!!希望有人能给我指出正确的方向。我确信我在做一些完全愚蠢的事情。我找了又找,但似乎找不出为什么这不管用!!(在IntelliJ IDE 15.x上使用JDK8.x和Scenebuilder)。我试图在GUI上显示数据,但希望access通过编程将这些数据从其他类/方法发送给它。。。。下面是一个简单的概念,我在着手更大的项目之前,正试图让它发挥作用: 我的简单GUI在FXM