2016-12-15 9 views
2

JAVAFXを使用して作成したカスタムラベルを既存のスイングのJPanelに埋め込むにはどうすればよいですか?JAVA JAVAFXのラベルをスイングでJPanelに埋め込む方法は?

など。

カスタムのJavaFXレーベル:私が得た

public class CustomJavaFXLabel extends Label{ 
    public CustomJavaFXLabel(){ 
     super();  
     setFont("blah blah blah"); 
     setText("blah blah blah"); 
      /* 
      *and so on... 
      */ 
    } 
} 
スイングで

既存のJPanel

public class SwingApp(){ 
    private JPanel jpanel; 

    public SwingApp(){ 
     jpanel = new JPanel(); 
     jpanel.add(new CustomJavaFXLabel()); //this line does not work 
    } 
} 

エラーは次のとおりです。私はこのために、私が使用してより良いオフだと

理解しますJLabelを使用してカスタムラベルを作成します。しかし、特定の制約のために、カスタムラベルにFXを使用する必要がありました。

ありがとうございました。

+0

を助けることができますか? – Ronaldo

答えて

5

JavaFX: Interoperability, §3 Integrating JavaFX into Swing Applicationsに示すように、カスタム​​をjavafx.embed.swing.JFXPanelに追加します。 JFXPaneljava.awt.Containerなので、それをあなたのSwingレイアウトに追加することができます。いくつかの例は、here以下で見つけることができます。誰もが

label image

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javafx.application.Platform; 
import javafx.embed.swing.JFXPanel; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.layout.Background; 
import javafx.scene.layout.BackgroundFill; 
import javafx.scene.layout.CornerRadii; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javax.swing.JFrame; 
/** 
* @see https://stackoverflow.com/q/41159015/230513 
*/ 
public class LabelTest { 

    private void display() { 
     JFrame f = new JFrame("LabelTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JFXPanel jfxPanel = new JFXPanel() { 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(320, 240); 
      } 
     }; 
     initJFXPanel(jfxPanel); 
     f.add(jfxPanel); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private void initJFXPanel(JFXPanel jfxPanel) { 
     Platform.runLater(() -> { 
      Label label = new Label(
       System.getProperty("os.name") + " v" 
       + System.getProperty("os.version") + "; Java v" 
       + System.getProperty("java.version")); 
      label.setBackground(new Background(new BackgroundFill(
       Color.ALICEBLUE, CornerRadii.EMPTY, Insets.EMPTY))); 
      StackPane root = new StackPane(); 
      root.getChildren().add(label); 
      Scene scene = new Scene(root); 
      jfxPanel.setScene(scene); 
     }); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new LabelTest()::display); 
    } 
} 
+1

助けてくれてありがとう!できます! :) – Ronaldo

関連する問題