JFrame всплывающее окно без значка на панели задач

Я создал окна уведомлений, унаследованные от JFrame, но они отображаются с новым значком на панели задач Windows. Можно ли выделить значок основного приложения при появлении уведомления (например, в скайпе, когда приходит новое сообщение) и не отображать новый значок на панели задач для окна уведомлений?

Вот код для всплывающего окна:

public class NotificationWindow extends JFrame
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    static private int m_count = 0;

    public NotificationWindow(String text)
    {
        super("NotificationWindow");
        setLayout(new GridBagLayout());

        setSize(300, 70);
        setLocationRelativeTo(null);

        setOpacity(0.77f);
        setUndecorated(true);
        setResizable(false);

        add(new JLabel(text));

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt)
            {
                --m_count;
            }
        });

        ++m_count;
    }

    static public int GetWindowCount()
    {
        return m_count;
    }

    static public void ShowNotificationWindow(final String text)
    {
        // Determine if the GraphicsDevice supports translucency.
        GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment
                .getLocalGraphicsEnvironment();
        final GraphicsDevice graphicsDevice = graphicsEnvironment
                .getDefaultScreenDevice();

        // If translucent windows aren't supported, exit.
        if (!graphicsDevice.isWindowTranslucencySupported(TRANSLUCENT))
        {
            System.err.println("Translucency is not supported");
            System.exit(0);
        }

        JFrame.setDefaultLookAndFeelDecorated(true);

        // Create the GUI on the event-dispatching thread
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run()
            {
                NotificationWindow notificationWindow = new NotificationWindow(
                        text);

                Insets scnMax = Toolkit.getDefaultToolkit().getScreenInsets(
                        notificationWindow.getGraphicsConfiguration());
                int taskBarSize = scnMax.bottom;
                Rectangle rect = graphicsDevice.getDefaultConfiguration()
                        .getBounds();
                int x = (int) rect.getMaxX() - notificationWindow.getWidth();
                int y = (int) rect.getMaxY() - notificationWindow.getHeight()
                        - taskBarSize - ((m_count - 1) % 7)
                        * notificationWindow.getHeight();
                notificationWindow.setLocation(x, y);
                notificationWindow.setVisible(true);
            }
        });
    }
}

1 ответ

Решение

Не расширяйте JFrame, вместо этого расширяйте JDialog

В общем, любое приложение должно иметь только один JFrame. Другие дочерние окна должны быть JDialogs. См.: Использование нескольких JFrames: хорошая или плохая практика?

Другие вопросы по тегам