import java.awt.AWTException;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
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.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
@SuppressWarnings("serial")
public class Systemtray_JDialog extends JFrame{
private JDialog jDialog;
private TrayIcon trayIcon;
private SystemTray systemTray;
private JLabel openLabel, openLabelIcon;
private JLabel messageLabel, messageLabelIcon;
private JLabel exitLabel, exitLabelIcon;
private Image image = Toolkit.getDefaultToolkit().getImage(Systemtray_JDialog.class.getResource("icon.png"));
private ImageIcon icon = new ImageIcon(Systemtray_JDialog.class.getResource("icon.png"));
private ImageIcon icon2 = new ImageIcon(Systemtray_JDialog.class.getResource("icon2.png"));
private Border border;
//Main
public static void main(String[] args) throws AWTException {
new Systemtray_JDialog();
}
//JFrame
public Systemtray_JDialog() throws AWTException {
super("Systemtray+JDialog");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
trayIcon = new TrayIcon(image, "TrayIcon", null);
//JDialog
createJDialog();
//TODO JDialog Focuslistener
jDialog.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent arg0) {
System.out.println("FocusLost");
jDialog.setVisible(false);
}
@Override
public void focusGained(FocusEvent arg0) {
System.out.println("FocusGained");
}
});
//TODO Trayicon Mouselistener
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent e) {
if (e.getButton()== java.awt.event.MouseEvent.BUTTON3) {
jDialog.setLocation(e.getX()-45, e.getY()-80);
jDialog.setVisible(true);
}
}
});
//TODO Trayicon Actionlistener
trayIcon.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
systemTray.remove(trayIcon);
setVisible(true);
setState(0);
}
});
//TODO JFrame Windowlistener
WindowListener frameListener = new WindowAdapter() {
@Override
public void windowIconified(WindowEvent arg0) {
Systemtray_JDialog.this.setVisible(false);
systemTray = SystemTray.getSystemTray();
try {
systemTray.add(trayIcon);
} catch (AWTException e) {
e.printStackTrace();
}
}
};
this.addWindowListener(frameListener);
this.setSize(250,250);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
//TODO JDialog
private void createJDialog() {
jDialog = new JDialog();
jDialog.setSize(150, 80);
jDialog.setAlwaysOnTop(true);
jDialog.setUndecorated(true);
JPanel mainPanel = new JPanel(null){
public void paint(Graphics g) {
g.setColor(Color.LIGHT_GRAY);
g.drawRect(0, 0, 149, 79);
g.setColor(Color.BLACK);
g.drawLine(25, 5, 25, 75);
g.drawLine(25, 52, 145, 52);
super.paintComponents(g);
}
};
openLabelIcon = new JLabel();
openLabelIcon.setIcon(icon);
openLabelIcon.setBounds(5, 5, 20, 21);
openLabelIcon.setOpaque(true);
openLabel = new JLabel("Open");
openLabel.setBounds(30, 5, 115, 21);
openLabel.setFont(new Font("Arial",Font.PLAIN,16));
openLabel.setOpaque(true);
messageLabelIcon = new JLabel();
messageLabelIcon.setIcon(icon);
messageLabelIcon.setBounds(5, 30, 20, 20);
messageLabelIcon.setOpaque(true);
messageLabel = new JLabel("Message");
messageLabel.setBounds(30, 28, 115, 22);
messageLabel.setFont(new Font("Arial",Font.PLAIN,16));
messageLabel.setOpaque(true);
exitLabelIcon = new JLabel();
exitLabelIcon.setIcon(icon);
exitLabelIcon.setBounds(5, 55, 20, 20);
exitLabelIcon.setOpaque(true);
exitLabel = new JLabel("Exit");
exitLabel.setBounds(30, 55, 115, 21);
exitLabel.setFont(new Font("Arial",Font.PLAIN,16));
exitLabel.setOpaque(true);
border = LineBorder.createGrayLineBorder();
//TODO Label Mouselistener
MouseAdapter labelMouseListener = new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if(e.getSource()==openLabel){
openLabel.setBorder(border);
openLabel.setForeground(Color.RED);
openLabelIcon.setIcon(icon2);
} else if(e.getSource()==messageLabel){
messageLabel.setBorder(border);
messageLabel.setForeground(Color.RED);
messageLabelIcon.setIcon(icon2);
} else if(e.getSource()==exitLabel){
exitLabel.setBorder(border);
exitLabel.setForeground(Color.RED);
exitLabelIcon.setIcon(icon2);
}
}
@Override
public void mouseExited(MouseEvent e) {
if(e.getSource()==openLabel){
openLabel.setBorder(null);
openLabel.setForeground(Color.BLACK);
openLabelIcon.setIcon(icon);
} else if(e.getSource()==messageLabel){
messageLabel.setBorder(null);
messageLabel.setForeground(Color.BLACK);
messageLabelIcon.setIcon(icon);
} else if(e.getSource()==exitLabel){
exitLabel.setBorder(null);
exitLabel.setForeground(Color.BLACK);
exitLabelIcon.setIcon(icon);
}
}
@Override
public void mouseReleased(MouseEvent e) {
if(e.getButton()== MouseEvent.BUTTON1){
if(e.getSource()==openLabel){
systemTray.remove(trayIcon);
setVisible(true);
setState(0);
} else if(e.getSource()==messageLabel){
JOptionPane.showMessageDialog(null, "Hello World !");
messageLabel.setBorder(null);
messageLabel.setForeground(Color.BLACK);
messageLabelIcon.setIcon(icon);
} else if(e.getSource()==exitLabel){
System.exit(0);
}
}
}
};
openLabel.addMouseListener(labelMouseListener);
messageLabel.addMouseListener(labelMouseListener);
exitLabel.addMouseListener(labelMouseListener);
mainPanel.add(messageLabelIcon);
mainPanel.add(messageLabel);
mainPanel.add(openLabelIcon);
mainPanel.add(openLabel);
mainPanel.add(exitLabelIcon);
mainPanel.add(exitLabel);
jDialog.add(mainPanel);
}
}