JavaFX隐藏表单然后立即再次显示

JavaFX隐藏表单然后立即再次显示,java,javafx,java-8,javafx-8,Java,Javafx,Java 8,Javafx 8,我正在使用一个计算器,我想在旁边打开一个日志阶段,现在我的问题是我需要更新阶段,我想最简单的方法是检查阶段是否显示,然后隐藏它,这似乎不起作用,下面是我的代码: public void start(Stage logStage) { boolean open = logStage.isShowing(); System.out.println(open); if(open == true){ logStage.hide(); Sys

我正在使用一个计算器,我想在旁边打开一个日志阶段,现在我的问题是我需要更新阶段,我想最简单的方法是检查阶段是否显示,然后隐藏它,这似乎不起作用,下面是我的代码:

    public void start(Stage logStage) {
    boolean open = logStage.isShowing();
    System.out.println(open);
    if(open == true){
        logStage.hide();
        System.out.println("Should be hidden now!");
    }

    logStage.setTitle("Log");
    GridPane grid = new GridPane();
    grid.setAlignment(Pos.TOP_CENTER);
    grid.setHgap(5);
    grid.setVgap(5);

    TextArea logText = new TextArea();

    for (String log : Logger.fraLog()) {
        logText.setText(logText.getText() + log);
    }

    grid.add(logText, 0, 0, 10, 10);

    Scene scene = new Scene(grid);
    logStage.setHeight(210);
    logStage.setWidth(300);
    logStage.setX(1135);
    logStage.setY(350);
    logStage.setScene(scene);
    logStage.setResizable(false);
    logStage.setAlwaysOnTop(true);
    logStage.show();
}
运行此方法3次后,我的输出为:

false
false
false
我调用该方法的方式是:

Logger logger = new Logger();
logger.start(new Stage());

感谢您的帮助

一个新的
阶段
将隐藏,直到您显示它。由于您每次都在创建新的
阶段
s,因此当您阅读
显示
属性时,它们都不会显示

此外,由于您正在调用
Stage
show()
,因此可以撤消
hide()
调用的任何效果


可能您应该重用相同的
阶段
/场景图。此外,由于再次显示窗口,因此不清楚您希望从
hide()
调用中得到什么效果;只需替换内容而不隐藏
阶段
也会有同样的效果。

如果需要从另一个类更新TextArea,则传递对它的引用,例如在另一个类的构造函数中。这可能看起来像:

a) 你们班:

public class MyClass {
   private TextArea textarea;

   public MyClass(TextArea t){
     this.textarea = t;
   }

   public void someMethodThatNeedsToLog(){
      this.textarea.appendText("the next log message ...");
   }
}
b) 您的初始化代码:

public void start(Stage logStage) {

// ...

TextArea logText = new TextArea();

MyClass instance = new MyClass(logText);

// ...
logStage.show();
希望这有助于


顺便说一句:这不是JavaFX或UI编程的问题。您可能希望了解面向对象编程的原理,如“控制反转”、“依赖项注入/构造函数注入”。

在计算器右上角创建一个小切换按钮,按下该按钮时打开日志。使用工具提示解释按钮是什么。示例:“打开日志”、“关闭日志”。在这里查看我的javafx计算器。创建新窗口的不是对
show()
的调用;这是对
newstage()
的调用。调用
show()
只会使窗口出现在屏幕上:如果它已经显示,那么它没有任何效果。为什么不更新textfield,而不管logger窗口是否可见?问题是我不知道如何从另一个类“只”更新textarea