图标化的JFrame在win 7任务栏点击后显示模态JDialog

时间:2011-06-14 15:01:24

标签: java swing windows-7 jframe

我最初在Win XP上开发了以下代码。当您单击XP任务栏中的程序图标时,父框架仍然图标化,并且JDialog返回焦点,这是我想要的行为。但是,当在Win 7上单击程序的任务栏图标时,父JFrame将其状态更改回“正常”并显示在app-modal JDialog后面。我已经尝试重写JFrame的setExtendedState()方法来拦截帧的状态变化而没有运气。

是否有针对此的解决方法,或者我的逻辑是否存在我需要解决的缺陷?

import java.awt.*;

import javax.swing.JDialog;
import javax.swing.JFrame;

public class TestLogin extends JFrame {

public TestLogin() {
    this.setSize(300, 300);
    iconify(this);
    setLocationRelativeTo(null);
    this.setTitle("I'm a Frame!");
    this.setVisible(true);
    LoginScreen login = new LoginScreen(this);
}

public static void main(String [] args) {

    TestLogin frame = new TestLogin();  
}

public static void iconify(Frame frame) {
    int state = frame.getExtendedState();

    // Set the iconified bit
    state |= Frame.ICONIFIED;

    // Iconify the frame
    frame.setExtendedState(state);
}

public static void deiconify(Frame frame) {
    int state = frame.getExtendedState();

    // Clear the iconified bit
    state &= ~Frame.ICONIFIED;
    // Deiconify the frame
    frame.setExtendedState(state);
}


public class LoginScreen extends JDialog {

    private JFrame root;

    public LoginScreen(JFrame root) {
        super(root);
        this.root = root;
        setLocationRelativeTo(null);
        this.setTitle("I'm a Dialog!");
        setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        this.setSize(200, 200);
        setVisible(true);
    }
}
}

1 个答案:

答案 0 :(得分:-1)

它看起来像是“一次编写,随处运行”的Java范例中的一个错误。如果要包含Windows 7,那么您可以联系oracle并填写错误报告。

此致 斯特凡