Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在UpdateIChanged()事件之前捕获Java WindowIconnified()和WindowIdeConnified()?_Java_Swing - Fatal编程技术网

如何在UpdateIChanged()事件之前捕获Java WindowIconnified()和WindowIdeConnified()?

如何在UpdateIChanged()事件之前捕获Java WindowIconnified()和WindowIdeConnified()?,java,swing,Java,Swing,在用户调整jFrame的大小后,我的Java Swing应用程序使用updateUiChanged()调整字体大小。但是当jFrame被最小化然后被最大化时,updateUiChanged()会被触发,这导致了问题 我试图用以下方法捕获最小化和最大化事件,但它们根本不执行,或者在updateIchiChanged()之后执行,这太晚了 在updateUiChanged()之前,如何捕获最小化和最大化 有关UpdateUI更改的实现,请参见下文。 谢谢 您可以使用以确保updateUiChange

在用户调整jFrame的大小后,我的Java Swing应用程序使用updateUiChanged()调整字体大小。但是当jFrame被最小化然后被最大化时,updateUiChanged()会被触发,这导致了问题

我试图用以下方法捕获最小化和最大化事件,但它们根本不执行,或者在updateIchiChanged()之后执行,这太晚了

在updateUiChanged()之前,如何捕获最小化和最大化 有关UpdateUI更改的实现,请参见下文。 谢谢

您可以使用以确保updateUiChanged调用在WindowEvent之后发生。您可以在私有实例字段中跟踪WindowEvent的发生情况,以便延迟的ComponentListener代码可以知道调整大小是否与WindowEvent配对:

private boolean iconifyStateChanged;

// ...

wndMinMax = new WindowAdapter(){

    public void windowIconified(WindowEvent e){
        if(debug)debug("Window Iconfied!!");
        iconifyStateChanged = true;
    }
    public void windowDeiconified(WindowEvent e){
        if(debug)debug("Window DeIconfied!!");
        iconifyStateChanged = true;
    }
};
this.addWindowListener(wndMinMax); 

addComponentListener(new ComponentAdapter()                     
{                                                               
    public void componentResized(ComponentEvent e) //V.43
    {
        if (e.getSource() instanceof JFrame) //V.43
        {
            // This will run after any pending WindowEvents.
            EventQueue.invokeLater(() -> {
                if (!iconifyStateChanged)
                {
                    updateUiChanged(e.getComponent().getWidth(),
                                    e.getComponent().getHeight()));
                }
                iconifyStateChanged = false;
            });
        }
    }                                                           
});

(并且已经返回int值,因此不需要强制转换为int。)

使用ComponentListener侦听窗口大小的更改不是更容易吗?我正在使用ComponentListener来捕获调整大小(见下文)。问题是在iconfiy和deiconify事件之前执行。我不知道如何测试componentListener内部的IConify或deiconify。你…吗?
private boolean iconifyStateChanged;

// ...

wndMinMax = new WindowAdapter(){

    public void windowIconified(WindowEvent e){
        if(debug)debug("Window Iconfied!!");
        iconifyStateChanged = true;
    }
    public void windowDeiconified(WindowEvent e){
        if(debug)debug("Window DeIconfied!!");
        iconifyStateChanged = true;
    }
};
this.addWindowListener(wndMinMax); 

addComponentListener(new ComponentAdapter()                     
{                                                               
    public void componentResized(ComponentEvent e) //V.43
    {
        if (e.getSource() instanceof JFrame) //V.43
        {
            // This will run after any pending WindowEvents.
            EventQueue.invokeLater(() -> {
                if (!iconifyStateChanged)
                {
                    updateUiChanged(e.getComponent().getWidth(),
                                    e.getComponent().getHeight()));
                }
                iconifyStateChanged = false;
            });
        }
    }                                                           
});