import java.awt.AWTException; import java.awt.FlowLayout; import java.awt.Image; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; import com.apple.eawt.Application; public class MacOSXDock { public MacOSXDock() { init(); } private void init() { JButton butt = new JButton("Ende"); butt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); PopupMenu menu = new PopupMenu("Application"); menu.add("Test"); menu.add("Test 2"); // Dockmenu erzeugen new Thread() { public void run() { createDock(menu); } }.start(); JFrame frame = new JFrame("Dock-Demo"); frame.setLayout(new FlowLayout()); frame.add(butt); frame.add(menu); frame.setSize(200, 80); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } private Image loadImage(String fileName) { URL url = getClass().getClassLoader().getResource(fileName); return new ImageIcon(url).getImage(); } private void createDock(PopupMenu menu) { // Image laden Image icon = loadImage("img/cent512.png"); // Tray-Icon setzen SystemTray tray = SystemTray.getSystemTray(); TrayIcon trayIcon = new TrayIcon(icon, "Tray Demo"); try { tray.add(trayIcon); } catch (AWTException e1) { } Application app = Application.getApplication(); // Dock-Icon setzen app.setDockIconImage(icon); // Menu zum Dock hinzufuegen app.setDockMenu(menu); // Badge (Dock-Icon-Marke) anzeigen int i = 1; while (i < 10) { app.setDockIconBadge(new Integer(i).toString()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } i++; } // Badge ausblenden app.setDockIconBadge(null); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new MacOSXDock()); } }