質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

3819閲覧

javaFxでweb表示(WebView)

uer03108

総合スコア194

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/09/30 07:24

下記サンプルで、javaFxのwebViewを用いてwindow内にweb表示が出来ます。
質問なのですが、web内のリンクをクリックした時に別ウィンドウに表示させることは出来るでしょうか。
元々、そう言った仕様ではないのですかね。

Main.java

java

1package application; 2 3import javafx.application.Application; 4import javafx.fxml.FXMLLoader; 5import javafx.stage.Stage; 6import javafx.scene.Scene; 7import javafx.scene.layout.Pane; 8 9 10//////////////////////////////////////////////////// 11// 12// fxml 13// 14//////////////////////////////////////////////////// 15public class Main extends Application { 16 17 public static void main(String[] args) { 18 launch(args); 19 } 20 21 @Override 22 public void start(Stage stage) throws Exception { 23 24 // フォント色がおかしくなることへの対処 25 System.setProperty( "prism.lcdtext" , "false" ); 26 27 //タイトル 28 stage.setTitle("FXMLサンプル"); 29 30 //fxml読み込み 31 Pane root = FXMLLoader.load(getClass().getResource("sampleWeb.fxml")); 32 33 //シーンオブジェクト 34 Scene scene = new Scene(root); 35 36 //css読み込み 37 //scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 38 39 //シーンオブジェクト設定 40 stage.setScene(scene); 41 42 //表示 43 stage.show(); 44 } 45}

EventController.java

java

1package application; 2 3import javafx.event.ActionEvent; 4import javafx.fxml.FXML; 5import javafx.scene.control.Button; 6import javafx.scene.control.CheckBox; 7import javafx.scene.control.RadioButton; 8import javafx.scene.control.TextArea; 9import javafx.scene.control.TextField; 10import javafx.scene.web.WebEngine; 11import javafx.scene.web.WebView; 12 13//////////////////////////////////////////////////// 14// 15// イベント設定 16// 17//////////////////////////////////////////////////// 18public class EventController { 19 20 21 //////////////////////////////////////////////////// 22 // 23 // fx:id="nameField" 24 // 25 //////////////////////////////////////////////////// 26 27 @FXML 28 private TextField textUrl; 29 30 @FXML 31 private Button btnLoad; 32 33 @FXML 34 private WebView webView; 35 36 37 //////////////////////////////////////////////////// 38 // 39 // イベント関数 40 // 41 //////////////////////////////////////////////////// 42 43 @FXML 44 void initialize() { 45 textUrl.setText("http://www.yahoo.co.jp"); 46 } 47 48 49 //ボタンクリック 50 @FXML 51 public void LoadUrl(ActionEvent event) { 52 String url = textUrl.getText(); 53 WebEngine we = webView.getEngine(); 54 we.load(url); 55 System.out.println("load"); 56 } 57 58}

sampleWeb.fxml

xml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.geometry.*?> 4<?import javafx.scene.web.*?> 5<?import javafx.scene.control.*?> 6<?import java.lang.*?> 7<?import javafx.scene.layout.*?> 8 9 10<AnchorPane maxHeight="-Infinity" 11 maxWidth="-Infinity" 12 minHeight="-Infinity" 13 minWidth="-Infinity" 14 prefHeight="463.0" 15 prefWidth="733.0" 16 xmlns="http://javafx.com/javafx/8" 17 xmlns:fx="http://javafx.com/fxml/1" 18 fx:controller="application.EventController"> <!-- パッケージ名.イベントクラス追記 --> 19 20 <children> 21 <WebView fx:id="webView" layoutX="82.0" layoutY="129.0" prefHeight="281.0" prefWidth="484.0" AnchorPane.bottomAnchor="53.0" AnchorPane.leftAnchor="82.0" AnchorPane.rightAnchor="167.0" AnchorPane.topAnchor="129.0" /> 22 <TextField fx:id="textUrl" layoutX="120.0" layoutY="47.0" prefHeight="25.0" prefWidth="420.0" /> 23 <Label layoutX="82.0" layoutY="51.0" text="URL" /> 24 <Button fx:id="btnLoad" layoutX="566.0" layoutY="47.0" mnemonicParsing="false" onAction="#LoadUrl" text="load" /> 25 </children> 26</AnchorPane> 27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

探してみたところ以下のQ&Aにハイパーリンクを捕捉する参考情報がありました。

stackoverflow: HyperlinkListener in JavaFX WebEngine

anchorタグのクリックイベントを捕捉するだけならWebEngineのリファレンスにDOM Elementのイベント補足の方法が書いてありますし、上記Q&Aにはクリックされたanchor要素のhrefを参照することなども載っています。ただ別のウィンドウへ表示させるためにはWebEngineにデフォルト動作(表示中のWebViewにリンク先をロード)を抑止する(javascriptでいえばanchor要素のclickイベントハンドラーからfalseを返すのと同様の動作)にする必要があると思います。

その方法まではわかりませんでしたが、上記Q&Aに載っているLibFXなるOSSのWebViewHyperlinkListener.javaというのを覗いてみると似たようなことができそうな印象でした。

できるかどうか自分で確認できてなくて恐縮ですが上記の情報を調べてみてはいかがでしょうか?

投稿2017/09/30 19:02

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問