1

我的应用程序有一个 JFrame 并且每秒检查一次x是否有变化。因此,我想通过setVisible(false)单击关闭按钮来隐藏我的 JFrame,并在单击 Dock 中的图标(我使用的是 Mac OS,但它应该与 Windows 任务栏的工作方式相同)时重新显示它。你知道:许多应用程序都会做这种临时隐藏。

你有任何想法如何做到这一点?如何监听这些点击事件?

4

2 回答 2

2

这是一个小示例,如何在托盘中隐藏/打开窗口。

import java.awt.Image;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) throws Exception {
        final JFrame frm = new JFrame("Test");
        Image im = Toolkit.getDefaultToolkit().getImage("c:\\icons\\icon1.png");
        final TrayIcon tri = new TrayIcon(im);
        tri.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                frm.setVisible(true);
                try {
                    SystemTray.getSystemTray().remove(tri);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
        frm.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                try {
                    SystemTray.getSystemTray().add(tri);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                frm.setVisible(false);
            }
        });
        frm.setSize(100, 100);
        frm.setVisible(true);
    }
}
于 2013-01-26T17:29:40.180 回答
0

使用com.apple.eawtjava.awt.Desktop包来监听应用程序关闭、隐藏或重新激活时发生的事件。

尤其com.apple.eawt.AppReOpenedEvent是在单击 Dock 图标时施放。当您使用 处理事件时com.apple.eawt.AppReOpenedListener,再次将框架设置为可见:

@Override
public void appReOpened(AppReOpenedEvent arg0) {
    invalidate(); // Suppose these are optional, but make sure the layout is up to date
    pack();
    validate();
    setVisible(true);
}
于 2021-10-20T08:10:00.203 回答