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