第7回JavaFX 200とSwingの統合
6305 ワード
原文の住所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.
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プロジェクトのサイドバーからリンクして
アプリケーションの最上位のウィンドウは一つです.
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
オブジェクトは、JFXAMANELコンポーネントのグラフィックシーンに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のデータ変更はSwingのデータ変更によって引き起こされる.
逆に.JavaFXのデータを変えてSwingデータの変化に答えます.
JavaFXのデータはjavaFXユーザースレッドを通じてのみアクセスできます.いつでもJavaFXデータを変更するには、あなたのコードをRunnableオブジェクトで囲んで呼び出します. 方法.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オブジェクトをサラウンドして
Platform.runLater
を呼び出す. 方法.Exampleに会います 3.Example 3
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//Code to change Swing data.
}
});
SwingBrowser 2:JavaFXコンポーネントを統合したSwingアプリケーションSwingUtilities.invokeLater
を通じて Swing-JavaFXはどのように相互操作しているかが見えます.ブラウザのための基本機能を提供しています.そのアドレスバーにURLを入力して、アプリケーションウィンドウにロードされているページを確認することができます.ページをクリックして新しいページにリンクして、前のページに戻り、タブを開いて、ブックマークを入れて、全ページで検索できます.Figure 1は、このアプリケーションのウィンドウである.Figre 1 The SwingBrowser 2 appration window
Description of「Figre 1 The SwingBrowser 2 appration window」
Swingデータを初期化する
NBプロジェクトのサイドバーからリンクして
SwingBrowser2
をダウンロードできます. ファイルローカルに解凍し、Netbeans IDEからプロジェクトとして動作します.あなたのNetBens IDEバージョンがサポートされていることを確認します.swingbrowser2.zip
EDTでは.枠のリンクで表示 SwingBrowser2 , GUI
ファイルアプリケーションの最上位のウィンドウは一つです.
Main.java
コンポーネントは、多くのSwingコンポーネントを含んでいます.例えば、tabbedパネル、一つのmenu、いくつかのtext field、button、もう一つはJavaFXコンテンツを表示するJFXパネルです.JavaFXコンテンツをロードする
運転を開始したばかりで、JFXパネルには空の
JFrame
が含まれています. オブジェクトアドレスバーにURLを入力すると、 WebView
action listenerはページの読み込みを開始します.コードはExample 4.Example 4
txtURL.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
browser.load(txtURL.getText());
}
});
Browser.javaファイルのAddressBar.java
方法はURLを検証し、load
を呼び出します. 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 ,
JavaFXスレッド上call URL
ファイルに完全なコードがあります.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データを更新します質に入れる
Callback.java
コンポーネントが新しいページをロードすると、ページタイトルがJavaFXデータから取り出してSwing GUIに渡されます.ページタイトルがタブページに表示され、アプリケーションタイトルが追加されます. WebView
に完全コードがあります.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 表示します.