1 /* 2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.embed.swing; 27 28 import java.awt.KeyboardFocusManager; 29 import java.lang.reflect.Field; 30 31 import javax.swing.RepaintManager; 32 33 /** 34 * Helper class for {@link SwingView}. The purpose of this class is to 35 * initialize the special {@link RepaintManager} needed to hook Swing components 36 * into JavaFX views.<br /><br /> 37 * 38 * The {@link #init()} method must be called before initaliazing the graphics 39 * state of the application, typically within the main method before calling 40 * one of the {@link Application#launch(Class, String...))} methods. 41 */ 42 public class SwingFX { 43 44 private static boolean initialized; 45 46 /** 47 * Initializes and install the {@link RepaintManager} needed by 48 * {@link SwingView}. 49 */ 50 public static void init() { 51 System.setProperty("swing.volatileImageBufferEnabled", "false"); 52 53 // workaround for Mac OS X JDK that cast Graphics to SunGraphics2D 54 // internally, not painting our components 55 // this workaround should not be needed from JDK 7 onward 56 String enableNativeBuffering = "true"; 57 if (System.getProperty("os.name").contains("Mac")) { 58 enableNativeBuffering = "false"; 59 } 60 System.setProperty("awt.nativeDoubleBuffering", enableNativeBuffering); 61 62 new JFXPanel(); // needed as a trick to launch it on a Mac 63 64 Class<KeyboardFocusManager> kfmCls = KeyboardFocusManager.class; 65 Field peer; 66 try { 67 peer = kfmCls.getDeclaredField("peer"); 68 peer.setAccessible(true); 69 peer.set(KeyboardFocusManager.getCurrentKeyboardFocusManager(), 70 FXSwingKeyboardFocusManagerPeer.getInstance()); 71 72 } catch (Exception e) { 73 e.printStackTrace(); 74 } 75 initialized = true; 76 } 77 78 static boolean isInitialized() { 79 return initialized; 80 } 81 }