Java JFrame如何检测是否完成了去锥化

Java JFrame如何检测是否完成了去锥化,java,swing,jframe,Java,Swing,Jframe,当我使用WindowListener时,我可以检测窗口何时图标化/非图标化。我的问题是:我需要为我的主机架显示特殊的无头工具窗口。当框架图标化时-我需要隐藏工具窗口(效果良好)。当画框去锥化时,我需要再次显示它。最后一件事只能部分工作:由于动画延迟,工具窗口出现在主帧完全去锥化之前。当然,我可以添加一点超时,但这对我来说很糟糕,因为不同的操作系统可能有不同的动画延迟。那个么,当窗口完全去证实时,我应该听哪个事件得到通知呢 这是麦克维 import java.awt.Color; import j

当我使用WindowListener时,我可以检测窗口何时图标化/非图标化。我的问题是:我需要为我的主机架显示特殊的无头工具窗口。当框架图标化时-我需要隐藏工具窗口(效果良好)。当画框去锥化时,我需要再次显示它。最后一件事只能部分工作:由于动画延迟,工具窗口出现在主帧完全去锥化之前。当然,我可以添加一点超时,但这对我来说很糟糕,因为不同的操作系统可能有不同的动画延迟。那个么,当窗口完全去证实时,我应该听哪个事件得到通知呢

这是麦克维

import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JWindow;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;

/**
 * <code>DeiconifyTest</code>.
 */
public class DeiconifyTest {

    public static void main(String[] args) {
        JFrame frm = new JFrame("Main frame");
        frm.add(new JScrollPane(new JTextArea()));
        frm.setSize(600, 500);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setVisible(true);
        JWindow nestedWindow = new JWindow(frm);
        JLabel text = new JLabel("Test");
        text.setBorder(new LineBorder(Color.BLACK));
        text.setHorizontalAlignment(SwingConstants.CENTER);
        nestedWindow.add(text);
        nestedWindow.setSize(100, 80);
        nestedWindow.setLocation(610, 0);
        nestedWindow.setVisible(true);
        WindowListener wl = new WindowAdapter() {
            @Override
            public void windowIconified(WindowEvent e) {
                nestedWindow.setVisible(false);
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                // nestedWindow is visible before the main frame is deiconified
                nestedWindow.setVisible(true);
            }
        };
        frm.addWindowListener(wl);
    }
}
尝试将上面的代码包装在SwingUtilities.invokeLater()中,将逻辑放在EDT的末尾,希望主窗口首先被去锥化

尝试将上面的代码包装在SwingUtilities.invokeLater()中,将逻辑放在EDT的末尾,希望主窗口首先被去锥化

// nestedWindow is visible before the main frame is deiconified
nestedWindow.setVisible(true);