JFrame问题

时间:2011-06-27 17:01:12

标签: java swing jframe windowlistener

最小化JFrame时调用哪些代码?它是否与听众联系在一起?我只是想知道帧最小化时内部会发生什么。

编辑: 我实际上正在寻找最小化帧时调用的代码。例如,实际windowListener的代码。我一直在搜索JFrameFrameWindow搜索windowIconified,但无法找到实际的代码。

原因是,当我的程序运行时,其中一个面板有一个小缺陷,但是当我最小化并最大化JFrame时,问题就消失了。我想知道发生了什么,以便我可以将我正在进行的任何事情应用到我的面板上,以便它正确描绘。

4 个答案:

答案 0 :(得分:3)

您可以使用WindowListener

进行收听

例如

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;

public class WinStateListener implements WindowListener {

    static JFrame window = new JFrame("Window State Listener");

    public WinStateListener() {
        window.setBounds(30, 30, 300, 300);
        window.addWindowListener(this);
        window.setVisible(true);
    }

    public static void main(String[] args) {
        WinStateListener winStateListener = new WinStateListener();
    }

    public void windowClosing(WindowEvent e) {
        System.out.println("Closing");
        window.dispose();
        System.exit(0);
    }

    public void windowOpened(WindowEvent e) {
        System.out.println("Opened");
    }

    public void windowClosed(WindowEvent e) {
        System.out.println("Closed");
    }

    public void windowIconified(WindowEvent e) {
        System.out.println("Iconified");
    }

    public void windowDeiconified(WindowEvent e) {
        System.out.println("Deiconified");
    }

    public void windowActivated(WindowEvent e) {
        System.out.println("Activated");
    }

    public void windowDeactivated(WindowEvent e) {
        System.out.println("Deactivated");
    }
}

答案 1 :(得分:2)

您想了解WindowListenersWindowEvents。您正在谈论的事件称为图标化窗口。在这里阅读更多内容:

http://download.oracle.com/javase/tutorial/uiswing/events/windowlistener.html

编辑: 在正在执行的JPanel上使用revalidate()然后repaint()

答案 2 :(得分:1)

最小化JFrame应用程序时,会调用窗口事件windowIconified。如果您想自己处理此类窗口事件,请实现WindowListener接口或使用WindowAdapter抽象类。

答案 3 :(得分:1)

  

最小化JFrame时会调用哪些代码?

How to Make Frames: Specifying Window Decorations所述,“窗口装饰由本机窗口系统提供。”本文接着描述了您可以对主机平台的默认更改。

附录:阅读您的更新,请注意,恢复图标化窗口会重新绘制它。正如@Andrew Thompson指出的那样,您可能需要验证您是否正在构建event dispatch thread。您可能还需要安排repaint()sscce可能会澄清事情。