先日tetatailで同じような(質問)をしたのですが、
その先で躓いてしまったので再度投稿させていただきます。
JavaFX上にSwingNodeを利用してSwingもしくはawtの部品を表示しようとした場合、
SwingのJButtonは表示されるのですが、
awtのButtonの場合は表示されず、実行時に以下の例外が発生しボタンが表示されません。
===例外内容=================================================
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1016)
at java.awt.GraphicsConfiguration.createCompatibleImage(GraphicsConfiguration.java:186)
at sun.awt.image.SunVolatileImage.getBackupImage(SunVolatileImage.java:236)
at sun.awt.image.VolatileSurfaceManager.getBackupSurface(VolatileSurfaceManager.java:263)
at sun.awt.image.VolatileSurfaceManager.initialize(VolatileSurfaceManager.java:126)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:88)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:117)
at java.awt.GraphicsConfiguration.createCompatibleVolatileImage(GraphicsConfiguration.java:307)
at java.awt.GraphicsConfiguration.createCompatibleVolatileImage(GraphicsConfiguration.java:241)
at sun.awt.windows.TranslucentWindowPainter$VIWindowPainter.getBackBuffer(TranslucentWindowPainter.java:272)
at sun.awt.windows.WWindowPeer.getTranslucentGraphics(WWindowPeer.java:606)
at sun.awt.windows.WComponentPeer.getGraphics(WComponentPeer.java:562)
at java.awt.Component.getGraphics(Component.java:3035)
at sun.awt.RepaintArea.paint(RepaintArea.java:227)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:347)
at java.awt.Component.dispatchEventImpl(Component.java:4959)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
=========================================================
ソースは以下のようになっております
1:Javaソース
`
public class JavaFXonAWTView extends Application{
public static void main(String args[]){ Application.launch(args); } @Override public void start(Stage stage) throws Exception { //画面の読み込み Pane root = new Pane(); FXMLLoader loader = new FXMLLoader(getClass().getResource("/view.fxml")); root = loader.load(); // awtのボタンを設置 SwingNode sNode = new SwingNode(); sNode.setLayoutX(10.0); sNode.setLayoutY(50.0); JPanel jPanel = new JPanel(); jPanel.add(new Button("awtボタン")); sNode.setContent(jPanel); // Scene生成 Scene scene = new Scene(root, javafx.scene.paint.Color.WHITE); // TabPane取得 TabPane tabPane = (TabPane)root.lookup("#tabPane"); // Tabの配列取得(Tabはlookupで取れない) ObservableList<Tab> tabList = tabPane.getTabs(); // 対象のTabの取得 Region tab = null; for (Tab tabTmp : tabList) { if ("awtの部品表示".equals(tabTmp.getText())) { tab = (Region)tabTmp.getContent(); break; } } // CJSpreadを乗せるPaneの取得 Pane pane = (Pane)tab.lookup("#pane2"); pane.getChildren().add(sNode); stage.setScene(scene); stage.show(); }
2:fxmlファイル(SceneBuilderで生成したものです)
ネットで原因を調べていたのですが結局わかりませんでした。。
お分かりになられる方がいましたら、ご教授いただければと思います。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/08/21 01:25