我创建了从JFrame继承的通知窗口,但它们在Windows任务栏中显示为新图标。是否可以在出现通知时突出显示主应用程序图标(例如在Skype中,当新消息到来时)并且在任务栏中不显示通知窗口中的新图标?
以下是弹出窗口的代码:
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);
}
});
}
}
答案 0 :(得分:5)
不要扩展JFrame,而是扩展JDialog
通常,任何应用程序都应该只有一个JFrame。其他子窗口应该是JDialogs。请参阅:The Use of Multiple JFrames: Good or Bad Practice?