第七回JavaFX 200とSwingの統合
7173 ワード
原文の住所http://download.oracle.com/javafx/2.0/swing/jfxpub-swing.htm
JavaFX 2.0リリース版
本文はJavaFXの内容をSwingプログラムにどうやって入れるかを教えます.同時にSwingとJavaFXを備えたアプリケーションでスレッドを正しく使うかを指導します.
JavaFXをSwingコンポーネントに追加します.
本明細書の目的を達成するためには、
すべてのSwingプログラムと同じように、Event Dispartch Thread(イベントスケジュールスレッドEDT)でグラフィックユーザーインターフェース(GUI)を作成します.Example 1は、
Example 1
JavaFX-wingの相互操作性とスレッド
JavaFXとSwingのデータが存在するため、次のような相互操作の場合があります. JavaFXのデータ変更はSwingのデータ変更によるものである. 逆. JavaFXのデータを変えてSwingデータの変化に答えます.
JavaFXのデータはjavaFXユーザースレッドを通じてのみアクセスできます.いつJavaFXデータを変更するにも、あなたのコードをRunnableオブジェクトで囲んで
Example 2
Swingデータの変化を覚えてEDTを通過します.あなたのコードがEDTを実現し、Runnableオブジェクトをサラウンドして
Example 3
Figre 1 The SwingBrowser 2 appration window
Description of「Figre 1 The SwingBrowser 2 appration window」
Swingデータを初期化する
NBプロジェクトのサイドバーからリンクして
アプリケーションのトップウィンドウは、多くのSwingコンポーネントを含んでいる
JavaFXコンテンツをロードする
運転を開始したばかりで、JFXパネルには空の
Example 4
Example 5
Example 6
Example 7
JavaFX 2.0リリース版
JFXPanel ,
javafx.embed.swing
パッケージには、JavaFXコンテンツをSwingプログラムにバインドすることができます.本文はJavaFXの内容をSwingプログラムにどうやって入れるかを教えます.同時にSwingとJavaFXを備えたアプリケーションでスレッドを正しく使うかを指導します.
JavaFXをSwingコンポーネントに追加します.
本明細書の目的を達成するためには、
JFrame
コンポーネント, JFXPanel
オブジェクトを作成し、JFXAnelコンポーネントのグラフィカルシーンはJavaFXコンテンツを含む必要があります.すべてのSwingプログラムと同じように、Event Dispartch Thread(イベントスケジュールスレッドEDT)でグラフィックユーザーインターフェース(GUI)を作成します.Example 1は、
initAndShowGUI
コンポーネントを作成し、 JFrame
オブジェクトを追加するJFXPanel
方法を示している.JFXPanel
クラスを作成する例は、バックグラウンドでJavaFXの運転を開始する場合にある.GUI作成後、initFX
メソッドを呼び出し、JavaFXスレッド上でJavaFXシーンを作成する.Example 1
public class Test {
private static void initAndShowGUI() {
// This method is invoked on the EDT thread
JFrame frame = new JFrame("FX");
final JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel);
frame.setVisible(true);
Platform.runLater(new Runnable() {
@Override
public void run() {
initFX(fxPanel);
}
});
}
private static void initFX(JFXPanel fxPanel) {
// This method is invoked on the JavaFX thread
Scene scene = createScene();
fxPanel.setScene(scene);
}
private static Scene createScene() {
//Code to create the JavaFX scene
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initAndShowGUI();
}
});
}
}
JavaFX-wingの相互操作性とスレッド
JavaFXとSwingのデータが存在するため、次のような相互操作の場合があります.
JavaFXのデータはjavaFXユーザースレッドを通じてのみアクセスできます.いつJavaFXデータを変更するにも、あなたのコードをRunnableオブジェクトで囲んで
Platform.runLater
メソッドを呼び出す必要があります.Example 2に会いますExample 2
jbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Platform.runLater(new Runnable() {
@Override
public void run() {
fxlabel.setText("Swing button clicked!");
}
});
}
});
Swingデータを変更して、JavaFXデータの変化に答えます.Swingデータの変化を覚えてEDTを通過します.あなたのコードがEDTを実現し、Runnableオブジェクトをサラウンドして
SwingUtilities.invokeLater
メソッドを呼び出すことを確認します.Example 3に会いますExample 3
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//Code to change Swing data.
}
});
SwingBrowser 2:JavaFXコンポーネントを統合したSwingアプリケーションSwingBrowser2
を通して、Swing-JavaFXはどのように相互操作されているかを見ることができます.ブラウザのための一般的な基本機能を提供しています.そのアドレスバーにURLを入力して、アプリケーションウィンドウにロードされているページを確認することができます.ページをクリックして新しいページにリンクして、前のページに戻り、タブを開いて、ブックマークを入れて、全ページで検索できます.Figure 1は、このアプリケーションのウィンドウである.Figre 1 The SwingBrowser 2 appration window
Description of「Figre 1 The SwingBrowser 2 appration window」
Swingデータを初期化する
NBプロジェクトのサイドバーからリンクして
swingbrowser2.zip
ファイルをダウンロードできます.ローカルに解凍し、Netbeans IDEからプロジェクトとして動作します.あなたのNetBens IDEバージョンがサポートされていることを確認します.SwingBrowser2 , GUI
EDTでは.サイドバーのリンクでMain.java
ファイルを参照してください.アプリケーションのトップウィンドウは、多くのSwingコンポーネントを含んでいる
JFrame
コンポーネントです.例えば、tabbedパネル、一つのmenu、いくつかのtext field、button、もう一つはJavaFXコンテンツを表示するJFXパネルです.JavaFXコンテンツをロードする
運転を開始したばかりで、JFXパネルには空の
WebView
オブジェクトが含まれています.アドレスバーにURLを入力すると、AddressBar.java
action listenerがページのロードを開始します.コードはExample 4.Example 4
txtURL.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
browser.load(txtURL.getText());
}
});
Browser.javaファイルのload
メソッドは、URLを検証し、call ,
Example 5を呼び出します.Example 5
public void load(String str) {
if (str != null {
str = str.trim();
if (str.isEmpty()) return;
String url = toURL(str);
if (url == null) {
url = toURL("http://" + str);
}
if (url != null) {
Platform.runLater (new Runnable() {
@Override
public void run () {
call(url);
}
}
}
private static String toURL(String str) {
try {
return new URL(str).toExternalForm();
} catch (MalformedURLException exception) {
return null;
}
}
JavaFXデータはJavaFXスレッド上でしかアクセスできないはずです.call URL
JavaFXスレッド上にあります.Callback.java
ファイルには完全なコードがあります.Example 6は、インプリメンテーションを示すコードブロックである.Example 6
public final void call(final String value) {
if (Platform.isFXApplicationThread()) {
callImpl(value);
}
else {
Platform.runLater(new Runnable() {
@Override public void run() {
callImpl(value);
}
});
}
}
protected void callImpl(String value) {
getEngine().load(value);
}
Swingデータを更新しますWebView
コンポーネントが新しいページをロードすると、ページタイトルはJavaFXデータからフェッチされ、Swing GUIに渡される.ページタイトルがタブページに表示され、アプリケーションタイトルが追加されます.TabbedBrowser.java
には完全なコードがあります.Example 7は、インプリメンテーションを示すコードブロックである.Example 7
public WebPane addNewTab(final String url, boolean selected) {
...
final WebPane wp = new WebPane(url);
wp.getBrowser().getEngine().titleProperty().addListener(
new javafx.beans.value.ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, final String title) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
setTitleAt(indexOfComponent(wp), title);
setToolTipTextAt(indexOfComponent(wp), title);
if (getSelectedComponent() == wp) {
setWindowTitle(title);
}
}
)};
}
)};
}
二つの統合アプリケーションの展開方法を知りたいです.Deploying JavaFX Application sまで調べてください.