2016-11-01 45 views
1

我正在工作的计算器,我想有一个日志阶段打开的一面,现在我的问题是,我需要更新阶段,我想最简单的方法是只检查如果舞台呈现,并且如果是则隐藏它,只是似乎并不奏效,这里是我的代码:JavaFX隐藏表单,然后立即再次显示

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()); 

任何帮助表示赞赏

+0

在计算器的右上方创建一个小按钮,当按下时打开日志。使用工具提示来解释按钮是什么。例如:“打开日志”,“关闭日志”。在这里查看我的javafx计算器。 https://github.com/sedj601/CalculatorFx – Sedrick

+0

这不是调用show()创建一个新窗口;这是'new Stage()'的调用。对'show()'的调用只是使窗口出现在屏幕上:如果它已经显示,它不起作用。 –

+0

无论记录器窗口是否可见,为什么不更新文本字段? – GOXR3PLUS

回答

1

Stage被隐藏,直到你证明这一点。由于您每次都创建新的Stage,因此当您阅读showing属性时,它们都不会显示。

此外,由于您致电 show()无论如何,您撤消hide()调用的任何影响。

可能您应该重复使用相同的Stage /场景图。此外,您不清楚hide()电话会给您带来什么影响,因为您再次显示该窗口;只需更换内容而不隐藏Stage就会产生同样的效果。

0

如果您需要从另一个类更新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(); 

希望帮助...

BTW:这不是一个JavaFX或UI编程的问题。您可能想看看面向对象编程的原理,如“控制反转”,“依赖注入/构造函数注入”。

相关问题