java程式通過swing呼叫javaFx更新 資料
執行優先順序關係,java無法直接呼叫javaFx,試過通過反射等方法都不好用,最後使用SWing中轉實現和javaFx互操。
首先建立SWing呼叫javaFX類
import javafx.application.Platform; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker.State; import javafx.embed.swing.JFXPanel; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.TextAlignment; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import netscape.javascript.JSObject; public class SwingSample extends JFrame { private final JFXPanel jfxPanel = new JFXPanel(); private WebEngine engine; private Label lab = new Label("test"); private final JPanel panel = new JPanel(new BorderLayout()); private final JLabel lblStatus = new JLabel(); public SwingSample() { super(); initComponents(); } private void initComponents() { createScene(); JPanel statusBar = new JPanel(new BorderLayout(5, 0)); statusBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5)); statusBar.add(lblStatus, BorderLayout.CENTER); panel.add(jfxPanel, BorderLayout.CENTER); panel.add(statusBar, BorderLayout.SOUTH); getContentPane().add(panel); setPreferredSize(new Dimension(1024, 600)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); } private void createScene() { Platform.runLater(new Runnable() { @Override public void run() { WebView view = new WebView(); engine = view.getEngine(); engine.getLoadWorker().stateProperty() .addListener((ObservableValue<? extends State> ov, State oldState, State newState) -> { if (newState == State.SUCCEEDED) { JSObject win = (JSObject) engine.executeScript("window"); win.setMember("javaApi", new JavaApp()); // 設定介面到JavaScript中 } }); lab.setFont(new Font("Arial", 30)); lab.setTextFill(Color.web("#0076a3")); lab.setTextAlignment(TextAlignment.JUSTIFY); HBox h = new HBox(); h.getChildren().addAll(view, lab); jfxPanel.setScene(new Scene(h)); } }); } public void change(int step) { System.out.println("c = " + step); Platform.runLater(() -> lab.setText("i=" + step)); } public void runJs() { Platform.runLater(() -> engine.executeScript("sayGoodbye('running from java')")); } public void loadURL(final String url) { System.out.println(url); Platform.runLater(new Runnable() { @Override public void run() { String tmp = toURL(url); if (tmp == null) { tmp = toURL("http://" + url); } engine.load(tmp); } }); } private static String toURL(String str) { try { return new URL(str).toExternalForm(); } catch (MalformedURLException exception) { return null; } } public class JavaApp { public void exit() { Platform.exit(); } public String getData(String data) { System.out.println(data); return "hi " + data ; } public double setDate(double data) { System.out.println(data); return data * 10; } public String getJson() { return "{\"msg\":\"查詢 成功!\",\"code\":0,\"data\":{\"isOK\":true,\"code\":\"100\"}}"; } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { SwingSample browser = new SwingSample(); browser.setVisible(true); browser.loadURL(getClass().getResource("help.html").toExternalForm()); } }); } }
建立html頁面
<html lang="en"> <head> <script type="text/javascript"> function setDate(data) { document.getElementById("my_message").innerHTML = data; } function getData(data) { var message = javaApi.getData(data); document.getElementById("my_message").innerHTML = message; } function getJson() { var json = javaApi.getJson(); document.getElementById("my_json").innerHTML = json; } function getJsonObj() { var json = JSON.parse(javaApi.getJson()); document.getElementById("my_json2").innerHTML = json.code; } </script> </head> <body> <h1>javafx import java </h1> <p><a href="about:blank" onclick="javaApi.exit()">Exit the Application</a></p> <button onclick="getJson()">getJson</button> <button onclick="getJsonObj()">getJsonObj</button> <button onclick="javaApi.setDate(20)">setDateJava</button> <button onclick="javaApi.getData('js')">getDataJava</button> <button onclick="getData('js')">getDataJs</button> <div id="my_message"></div> <div id="my_list"></div> <div id="my_json"></div> <div id="my_json2"></div> </body> </html>
最後編寫測試java程式
import java.util.concurrent.TimeUnit; import javax.swing.SwingUtilities; public class Test { public static int tm = 100; static SwingSample browser = new SwingSample(); public static void main(String[] args) { runSwing(); task(); } public static void runSwing() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { browser.setVisible(true); browser.loadURL(SwingSample.class.getResource("help.html").toExternalForm()); } }); } public static void task() { new Thread(() -> { int i = 0; while (i++ < 10) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(i); work(i); } browser.runJs(); }).start(); } public static void work(int i) { browser.change(i); } }
java程式呼叫javaFx方法更新 javaFX,可以把java程式計算的結果實時顯示在javaFx上。
使用SWing中轉可以方便的隨時呼叫javaFX,畫圖,表格等 視覺化功能。
相關推薦
java程式通過swing呼叫javaFx更新 資料
執行優先順序關係,java無法直接呼叫javaFx,試過通過反射等方法都不好用,最後使用SWing中轉實現和javaFx互操。首先建立SWing呼叫javaFX類import javafx.application.Platform; import javafx.beans.v
java程式通過 pdf模板 新增pdf表單資料並列印
1:用adobe acrobat設定pdf的表單屬性 第二步:寫java程式 package document.pdf; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; imp
為什麼很多Java程式設計師都轉行做大資料了?
如今大資料發展的越來越成熟。各大企業紛紛成立大資料部門。尤其BAT等一線網際網路公司每天處理的資料量都是TB級別。大資料部門已成為這些企業的核心部門,資料已成為企業最核心的資產。 但是大資料人才缺口巨大,據統計目前全國的大資料人才僅46萬,未來3-5年內大資料人才的缺口將高達150萬。 因此大資料工程師薪
Java程式設計師,想嘗試大資料和資料探勘,該怎麼規劃學習?
一.大資料方向工作介紹 二.大資料工程師的技能要求 三.大資料學習路徑 四.學習資源推薦(書籍、部落格、網站) 一.大資料方向工作介紹 大資料方向的工作目前分為三個主要方向: 01.大資料工程師 02.資料分析師 03.大資料科學家 04.其他(資料探勘本
JAVA程式碼 通過Socket讀取返回的資料
package net.java2000.net;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.InetAdd
微信小程式通過api介面將json資料展現到小程式示例
實現知乎客戶端的一個重要知識前提就是,要知道怎麼通過知乎新聞的介面,來把資料展示到微信小程式端上。 那麼我們這一就先學習一下,如何將介面獲取到的資料展示到微信小程式上。 1.用到的知識點 <1> wx.request 請求介面資源(微信小程式api中的發
微信小程式通過api介面將json資料展現
輪播圖 <view> <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" class="banners" interval="{{interval}}" duration="{{durat
Java程式通過JDBC連線遠端資料庫MySQL
程式碼如下: import java.sql.*; public class jdbc { @SuppressWarnings("unused") public static void main
JAVA後臺通過http呼叫簡訊API
來自一個剛勉強脫離小白的程式猿分享 由於專案中需要呼叫到一個簡訊驗證介面,所以就開始了漫漫長尋找免費介面之路,然而幾個小時無果,轉念一想就試試能不能用,隨便一個能用一下就好,然後找到一個可以免費用20次的介面,不多說,直接上鍊接https://wx.jcloud.com/g
node通過路由呼叫方法將資料返回前端
首先講一下我的需求,如圖 三個input標籤,輸入地址,埠,點選按鈕,採集資料 首先使用express搭建node框架,使用的是ejs模板 1、寫方法 定義一個方法collect,最後將其暴露出去 module.exports=collect,一定不
Java程式設計師在用的大資料工具
問題:他們最近一年最喜歡用什麼工具或者是框架? 受訪者可以選擇列表中的選項或者列出自己的,本文主要關心的是大資料工具。上一篇Java調查包括下列內容: 開發語言Web框架應用伺服器資料庫工具SQL資料大資料開發工具雲供應商 現在,來看看維基百科上對大資料的定義: 大資
java中通過JNA呼叫dll JNI的替代者—使用JNA訪問Java外部功能介面
---恢復內容開始--- 1. JNA簡單介紹 先說JNI(Java Native Interface)吧,有過不同語言間通訊經歷的一般都知道,它允許Java程式碼和其他語言(尤其C/C++)寫的程式碼進行互動,只要遵守呼叫約定即可。首先看下JNI呼叫C/C++的過程,注意寫程式時自下而上,呼叫時自上而下
在Java程式中讀寫windows共享資料夾
摘要 使用Java通過JCIFS框架讀寫共享資料夾,使用SMB協議,並支援域認證。 專案常常需要有訪問共享資料夾的需求,例如讀取共享資料夾儲存的視訊、照片和PPT等檔案。那麼如何使用Java讀寫Windows共享資料夾呢? 使用Java訪問擁有全部讀寫許可權的共享資料夾比較簡單,和普通的目錄沒有什麼區別。
PB程式通過http呼叫servlet
1、準備pslib21.dll 2、得到http url 3、傳送http請求 4、得到返回值 eg: instance variables: constant string is_HttpIP = '192.168.0.97' constant string is_Ht
使用Java程式一次分段讀取所有資料(如海量資料)並計數處理
前段時間遇到一個問題,很簡單就是定時任務刪除資料庫中三個月前的資料;無非就是delete...from...where;當時的需求要考慮這幾個問題: 1.效率 2.一次讀取全部 3.保留部分資料 先說一下當時的需求,刪除三個月前的動態(團隊動態),但有些團隊的動
Java程式通過LDAP對使用者進行登陸驗證
在去年南京專案中,客戶方要求使用者登陸需要在其他平臺下進行認證,當時客戶用的LDAP“資料庫”管理方式,後來查閱Java已經對LDAP進行了封裝,不需要下載其他jar包就可以實現。 補腦:【LDAP】是"Lightweight Directory
Java中通過jdbc呼叫oracle儲存過程
Java呼叫Oracle儲存過程步驟主要分為三類: (1)編寫Oracle儲存過程 (2)編寫資料庫獲取連線工具類 (3)編寫簡單應用呼叫儲存過程 1、Oracle中的儲存過程程式 1.在Oracle SQL Developer中建立儲存過程 在sc
idea中通過java程式直接呼叫python檔案
專案用python開發時大量引入了外包,當需要在java中使用該程式碼時考慮要麼轉成java語言(太麻煩),要麼打包成jar(沒找到合適的方法),參考了一些java呼叫python檔案方法,並不適合我目前開發的環境,下面給出idea下直接呼叫的方法。 一、在i
微信小程式——省市縣三級聯動,實時通過後臺呼叫PHP程式碼獲取資料
由於專案頻繁用到三級聯動,比如地區、時間、分類,這些網路上不能滿足,所以我們通過後臺呼叫的方式來實現 後臺我使用的是PHP語言 目錄結構: |-client |---pages |-----index |-------index.js //包含初始化資料和呼叫後臺的資料,
Android開發 通過JNI實現JAVA與C/C++程式間的呼叫和回撥
在一些Android應用的開發中,需要通過JNI和 Android NDK工具實現JAVA和C/C++之間的相互呼叫。 Java Native Interface (JNI)標準是java平臺的一部分,它允許Java程式碼和其他語言寫的程式碼進行