Как динамически включить или отключить значок панели задач для программы Java Swing - PullRequest
1 голос
/ 20 ноября 2010

Я пишу программу на Java Swing с использованием JFrame, которая может отображать значок в системном трее для быстрого доступа к наиболее часто используемым функциям.Теперь я хочу добавить опцию для пользователя, чтобы выбрать, будет ли отображаться обычный значок (Windows) на панели задач, когда окно программы свернуто.

Поиск в Google сказал мне, что я могу использовать вместо этого JDialogJFrame.К сожалению, это не очень хорошее решение в моем случае, потому что я хочу динамически включать или отключать значок панели задач в зависимости от решения пользователя.

Возможно ли это как-то?Матиас

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

JDialog или JFrame - это просто контейнер. Будет ли переключение между ними не работать в вашей ситуации? Когда вам нужно переключиться, просто создайте новый экземпляр другого типа с таким же расположением и размером и переместите область содержимого поверх.

0 голосов
/ 20 ноября 2010

Что-то попробовать, хотя я не совсем уверен, что это сработает, потому что здесь уже поздно, и я могу думать об этом неправильно.

Когда вы минимизируете окно, событие запускается, и вам нужно перехватить его, добавив WindowStateListener в JFrame, который отслеживает WINDOW_ICONIFIED и WINDOW_DEICONIFIED. Когда происходит WINDOW_ICONIFIED, установите для свойства visible JFrame значение false; когда WINDOW_DEICONIFIED установить его в значение true. Быстрый тест установки видимости фрейма в false, казалось, удалял его из панели задач, все, что вам нужно сделать, это выяснить, действительно ли он работает, и затем реализовать список состояний.

Вот код, который я использовал для проверки

import java.awt.*;

public class FrameTest
{
    public static void main (String args[]) throws Exception
    {
        // Create a test frame
        Frame frame = new Frame("Hello");
        frame.add ( new Label("Minimize demo") );
        frame.pack();

        // Show the frame
        frame.setVisible (true);

        // Sleep for 5 seconds, then minimize
        Thread.sleep (5000);
        frame.setState ( Frame.ICONIFIED );
        frame.setVisible(false);
        // Sleep for 5 seconds, then restore
        Thread.sleep (5000);
        frame.setState ( Frame.NORMAL );
        frame.setVisible(true);

        // Sleep for 5 seconds, then kill window
        Thread.sleep (5000);
        frame.setVisible (false);
        frame.dispose();

        // Terminate test
        System.exit(0);
    }
}
...