java 消息通知

首先创建JFrame作为弹出窗口。 在其中添加一些JLabel以包含信息,并在适当的位置分配它们,使其看起来像一条通知消息。

下面给出了示例代码:

String message = 'You got a new notification message. Isn't it awesome to have such a notification message.';
String header = 'This is header of notification message';
JFrame frame = new JFrame();
frame.setSize(300,125);
frame.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = 1.0f;
constraints.weighty = 1.0f;
constraints.insets = new Insets(5, 5, 5, 5);
constraints.fill = GridBagConstraints.BOTH;
JLabel headingLabel = new JLabel(header);
headingLabel .setIcon(headingIcon); // --- use image icon you want to be as heading image.
headingLabel.setOpaque(false);
frame.add(headingLabel, constraints);
constraints.gridx++;
constraints.weightx = 0f;
constraints.weighty = 0f;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.NORTH;
JButton cloesButton = new JButton('X');
cloesButton.setMargin(new Insets(1, 4, 1, 4));
cloesButton.setFocusable(false);
frame.add(cloesButton, constraints);
constraints.gridx = 0;
constraints.gridy++;
constraints.weightx = 1.0f;
constraints.weighty = 1.0f;
constraints.insets = new Insets(5, 5, 5, 5);
constraints.fill = GridBagConstraints.BOTH;
JLabel messageLabel = new JLabel('<HtMl>'+message);
frame.add(messageLabel, constraints);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);

其输出将是:

在这里,我创建了一个JFrame并添加了两个标签; 第一个是headingLabel,它是标题标签,第二个是messageLabel,它将包含消息信息; 和一个关闭按钮。 我已经使用了GridBagLayout,但是您可以使用任何选择。

现在,要使该框架看起来像一个弹出窗口,我们必须从该框架中删除标题栏和边框。 为此,在frame.setSize(…)之后添加以下行: :
frame.setUndecorated(true);

现在的输出将是:

请注意,现在我们的框架无法关闭,因为它没有标题栏关闭按钮。 因此,要使我们的关闭按钮可以用作框架关闭按钮,请更改其声明,如下所示:

JButton cloesButton = new JButton(new AbstractAction('x') {
        @Override
        public void actionPerformed(final ActionEvent e) {
               frame.dispose();
        }
});

添加后,您将收到错误消息“无法引用用其他方法定义的内部类中的非最终变量框架”。 要摆脱此错误,您可以采用以下解决方案之一:

  1. 使您的框架变量最终。
  2. 使您的框架变量成为类中的全局变量。
  3. 使您的类扩展JFrame并完全删除frame变量。

现在,当您运行程序时,其外观将与图2相同,但是现在您可以通过单击closeButton来关闭框架。

您会注意到您的框架出现在屏幕的顶部,因此将其更改为屏幕的右下角,在创建框架后添加以下几行:

Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();// size of the screen
Insets toolHeight = Toolkit.getDefaultToolkit().getScreenInsets(frame.getGraphicsConfiguration());// height of the task bar
frame.setLocation(scrSize.width - frame.getWidth(), scrSize.height - toolHeight.bottom - frame.getHeight());

现在,当您运行它时,它将如下所示:

现在,要使其在预定时间后消失,请在末尾添加以下行:

new Thread(){
      @Override
      public void run() {
           try {
                  Thread.sleep(5000); // time after which pop up will be disappeared.
                  frame.dispose();
           } catch (InterruptedException e) {
                  e.printStackTrace();
           }
      };
}.start();

至此,您已经成功创建了一个通知弹出窗口,该通知将出现在屏幕的右下角,如果未单击关闭按钮,则将在一段时间后消失。

因此,作为最后的修饰,您可以通过应用外观和感觉或在框架中应用不同的颜色来设计它。

您还可以通过添加以下内容使其显示在所有窗口的顶部:

frame.setAlwaysOnTop(true);

在上面的代码块中需要注意的一些事情:

1. messageLabel中的<HtMl>标签。 这是使标签自动换行。 但是请确保您在消息中发短信的长度不超过特定的长度。 您可以根据需要调整此高度和弹出窗口的高度。

2. “ headingIcon” 未在代码中声明。 它是您要使用的图像图标,而不是屏幕快照中的作为标题标题图标的恶魔图标。 样本声明如下所示:

ImageIcon headingIcon = new ImageIcon(“ image_url”);

3. 当前,用于弹出窗口的新窗口显示在任务栏中,因此,如果您希望在任务栏中不显示用于弹出窗口的窗口,请将JFrame更改为JDialog。

4. 在上面的代码中,默认的超时时间为5秒(弹出窗口消失之前),您可以根据需要通过在代码中编辑以下行来更新它:

Thread.sleep(5000); //弹出窗口消失的时间。

5. 要使关闭按钮看起来像默认标题栏的关闭按钮“ x”在其文本中。 您可以根据需要关闭它。

希望对您有帮助。

祝您编程愉快,别忘了分享!