首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stage.setIconified()和Stage.isIconified()不能正常工作

Stage.setIconified()和Stage.isIconified()不能正常工作
EN

Stack Overflow用户
提问于 2017-07-23 19:34:53
回答 1查看 1.4K关注 0票数 7

我正在尝试编写一个简单的方法来切换我的窗口是否被最小化(即图标化)。我的行为很奇怪。下面是说明问题的可运行代码。

我在Gnome 3.20.4和XFCE 4.12上得到了同样的结果。我还没有在任何其他环境中测试过这个。

  1. 如果窗口未最大化,则代码按预期工作,但报告的状态有时不正确。这是下面代码的输出。我在文本输出与视觉输出不匹配的行旁边放置了便笺(<--)。

窗口未最大化行为

代码语言:javascript
复制
Before call  (Note: Window appears iconified)
    isIconified(): true
    isMaximized(): true

Setting iconified to false

After call (Note: Window now appears restored, not maximized) 
    isIconified(): true   <-- The window is visually not iconified 
    isMaximized(): true   <-- The window is visually not maximized


Before call (Note: Window still appears restored, not maximized) 
    isIconified(): false  <-- One second later, the report is accurate
    isMaximized(): false

Setting iconified to true

After call  (Note: Window now appears iconified) 
    isIconified(): true
    isMaximized(): true
  1. 如果窗口最大化,则代码无法按预期工作。相反,这是一个三步走的过程。第一个调用图标化,第二个调用恢复,第三个调用不进行任何可视更改。

窗口最大化行为

代码语言:javascript
复制
Before call (Note: Window appears iconified)
    isIconified(): true
    isMaximized(): true

Setting iconified to false

After call (Note: Window appears maximized)
    isIconified(): true <-- Does not match visual
    isMaximized(): true


Before call (Note: Window appears maximized)
    isIconified(): true <-- Does not match visual
    isMaximized(): true

Setting iconified to false

After call (Note: Window appears maximized)
    isIconified(): false
    isMaximized(): false  <-- Does not match visual


Before call (Note: Window appears maximized)
    isIconified(): false
    isMaximized(): false  <-- Does not match visual

Setting iconified to true

After call (Note: Window appears iconified)
    isIconified(): true
    isMaximized(): true

<Now it loops>

Before call (Note: Window appears iconified)
    isIconified(): true
    isMaximized(): true

Setting iconified to false

After call (Note: Window appears maximized)
    isIconified(): true  <-- Does not match visual
    isMaximized(): true

...

下面是可运行的代码:

代码语言:javascript
复制
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;

public class StageTest extends Application {

    Stage stage;

    public static void main ( String[] args ) {
        launch ( args );
    }

    @Override
    public void start ( Stage stage ) throws Exception {
        this.stage = stage;
        stage.setResizable( true );
        stage.show( );

        Thread thread = new Thread ( () -> {
            while ( true ) {
                Platform.runLater( () -> {
                    toggleMinimized();
                } );
                try {
                    Thread.sleep ( 1000 );
                } catch ( InterruptedException e ) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        thread.setDaemon( true );
        thread.start();

    }

    public void toggleMinimized() {

        System.out.println ( "Before call" );
        System.out.println ( "\tisIconified(): " + stage.isIconified() );
        System.out.println ( "\tisMaximized(): " + stage.isIconified() );
        System.out.println ();

        if ( stage.isIconified() ) {
            System.out.println ( "Setting iconified to false" );
            System.out.println ();
            stage.setIconified( false );
        } else {
            System.out.println ( "Setting iconified to true" );
            System.out.println ();
            stage.setIconified( true );
        }


        System.out.println ( "After call" );
        System.out.println ( "\tisIconified(): " + stage.isIconified() );
        System.out.println ( "\tisMaximized(): " + stage.isMaximized() );
        System.out.println ();
        System.out.println ();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-11-21 16:24:51

您的程序中似乎有一个错误--您应该有一个2 stage.isIconified()的错误。

代码语言:javascript
复制
public void toggleMinimized() {
    System.out.println ( "Before call" );
    System.out.println ( "\tisIconified(): " + stage.isIconified() );
    System.out.println ( "\tisMaximized(): " + stage.isIconified() );

它应该是

代码语言:javascript
复制
public void toggleMinimized() {
    System.out.println ( "Before call" );
    System.out.println ( "\tisIconified(): " + stage.isIconified() );
    System.out.println ( "\tisMaximized(): " + stage.isMaximized() );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45269173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档