package ch.ethz.karto.map3d.gui; import java.awt.LayoutManager; import javax.swing.JPanel; /** * Makes a JPanel transparent when on Mac OS X or newer. This is useful for * panels in JTabbedPanes. * @author Bernhard Jenny, Institute of Cartography, ETH Zurich. */ public class TransparentMacPanel extends JPanel { private void conditionalTransparency() { if (TransparentMacPanel.isMacOSX_10_5_orHigherWithJava5()) { this.setOpaque(false); } } public TransparentMacPanel(LayoutManager layout, boolean isDoubleBuffered) { super(layout, isDoubleBuffered); conditionalTransparency(); } public TransparentMacPanel(LayoutManager layout) { super(layout); conditionalTransparency(); } public TransparentMacPanel(boolean isDoubleBuffered) { super(isDoubleBuffered); conditionalTransparency(); } public TransparentMacPanel() { conditionalTransparency(); } private static boolean isMacOSX_10_5_orHigherWithJava5() { if (!isMacOSX_10_5_orHigher()) return false; // check the java version. 1.5.x is required String[] versionStrings = System.getProperty("java.version").split("\\."); if (versionStrings[0].equals("1") && Integer.parseInt(versionStrings[1]) >= 5) return true; return Integer.parseInt(versionStrings[0]) > 1; } private static boolean isMacOSX_10_5_orHigher() { String osname = System.getProperty("os.name"); boolean ismacosx = osname.toLowerCase().startsWith("mac os x"); if (!ismacosx) return false; // get the Mac OS version String[] osVersionStrings = System.getProperty("os.version").split("\\."); // check for at least 10.5.x if (osVersionStrings[0].equals("10")) return Integer.parseInt(osVersionStrings[1]) >= 5; // maybe we have Mac OS 11 or higher return Integer.parseInt(osVersionStrings[0]) > 10; } }