import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.RootPaneContainer; import javax.swing.SwingUtilities; public class GlassPaneDemo { private static final long serialVersionUID = 1L; private JFrame frame; private JPanel panel; private JLabel label; private JButton butt; private BufferedImage img; private String imgName = "src/img/wien.jpg"; public GlassPaneDemo() { init(); } public void init() { frame = new JFrame("GlassPane-Demo") { public void paint(Graphics g) { int x = (panel.getWidth() - label.getSize().width) / 2; int y = (panel.getHeight() - label.getSize().height) / 2; label.setBounds(x, y, img.getWidth(), img.getHeight()); butt.setBounds(panel.getWidth() / 2 - butt.getWidth() / 2, 200, butt.getWidth(), butt.getHeight()); } }; label = new JLabel(); panel = new JPanel(); panel.setOpaque(true); panel.setBackground(Color.DARK_GRAY); panel.add(label); loadImage(); ImageIcon icon = new ImageIcon(img); label.setIcon(icon); label.setSize(new Dimension(icon.getIconWidth(), icon.getIconHeight())); butt = new JButton("Klick"); panel.add(butt, 0); frame.setSize(label.getWidth() + 40, label.getHeight() + 60); Glass glass = new Glass(butt, label, frame); butt.addMouseListener(new ButtonMouseListener(glass, frame.getContentPane(), butt) { public void mouseReleased(MouseEvent e) { System.out.println("Button angeklickt"); } }); frame.getContentPane().add(panel); frame.setGlassPane(glass); glass.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } public void loadImage() { File source = new File(imgName); if (source.canRead() && source.isFile()) { try { img = ImageIO.read(source); } catch (IOException e1) { e1.printStackTrace(); } } if (img == null) { System.err.println("Kein Bild geladen."); System.exit(1); } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new GlassPaneDemo()); } }