首页 > 解决方案 > 当 JFrame 最小化时 setState(JFrame.ICONIFIED) 但是当用户从任务栏恢复它时在哪里写入事件代码

问题描述

当用户单击最小化时,我的程序会最小化两个框架,并且它们在任务栏中的显示方式都不同,但是我希望当用户在任务栏中单击它们中的任何一个时,它们都可以恢复以在屏幕上查看。

标签: javanetbeansmaximize

解决方案


两个JFrame处于Frame.ICONIFIED状态(最小化) - 当其中一个恢复到Frame.NORMAL状态时,另一个也得到正常状态。这是通过java.awt.event.WindowStateListener为两个框架实现的来实现的。这是演示程序:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TwoJframes implements WindowStateListener {
    private JFrame frame;
    private JFrame frame2;
    public static void main(String [] args) {
        new TwoJframes().gui();
    }
    private void gui() {
        frame = new JFrame();
        frame.setTitle("JFrame 1");
        JButton button = new JButton("Show Frame 2");
        button.addActionListener(e -> showAnotherFrame());
        frame.addWindowStateListener(this);
        frame.add(button);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setSize(250, 100);        
        frame.setVisible(true);
    }
    private void showAnotherFrame() {
        frame2 = new JFrame();
        frame2.setTitle("JFrame 2");
        frame2.addWindowStateListener(this);
        frame2.add(new JLabel("2nd frame"));
        frame2.setSize(250, 100);
        frame2.setLocation(300, 300);
        frame2.setVisible(true);
    }
    // This is the WindowStateListener's implementation method
    @Override public void windowStateChanged(WindowEvent e) {
        JFrame f = (JFrame) e.getSource();
        if (f == frame) {
            if ((frame.getExtendedState() == Frame.NORMAL) && 
                    (frame2.getExtendedState() == Frame.ICONIFIED)) {
                frame2.setExtendedState(Frame.NORMAL);
            }
        }
        if (f == frame2) {
            if ((frame2.getExtendedState() == Frame.NORMAL) && 
                    (frame.getExtendedState() == Frame.ICONIFIED)) {
                frame.setExtendedState(Frame.NORMAL);
            }
        }
    }
}

推荐阅读