🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaFX

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

Java

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

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

Q&A

解決済

2回答

3030閲覧

JavaFXのTextFieldについて

ponpon123

総合スコア9

JavaFX

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

Java

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

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

1グッド

0クリップ

投稿2021/03/05 06:40

編集2021/03/05 07:53

前提・実現したいこと

現在Javaを学習しているものです。
Javaを使用したデスクトップアプリを作成したいと思い、JavaFXでアプリ作成を
始めたのですが初歩中の初歩で躓いてしまったため質問させていただきます。

現在のソースコード

とあるサイトを参考に下記のようなコードでTextFieldに入力した値を取得し、コンソールに表示するという
システムを作成しました。
一つのTextFieldであれば下記の用な書き方で取得に成功したのですが、idともう一つ"name"も取得したいとなった場合どのように書けば取得できるのでしょうか。調べてはみたのですが、TextFieldを一つしか使わないコードしか見当たらずどのように書けばわかりませんでした。まず、どのような仕組みで取得できているのかを知ったうえで二つのTextFieldnの取得の仕方を知りたいです。

Java

1//SampleController.java 2package application; 3import javafx.event.ActionEvent; 4import javafx.fxml.FXML; 5import javafx.scene.control.TextField; 6public class SampleController { 7 @FXML 8 private TextField id; 9 10 @FXML 11 protected void onGetButtonClick(ActionEvent evt) { //「取得」ボタンクリック 12 System.out.println(id.getText()); 13 14 } 15}

FXML

1//Sample.fxml 2<?xml version="1.0" encoding="UTF-8"?> 3 4<?import javafx.scene.text.*?> 5<?import java.lang.*?> 6<?import javafx.scene.control.*?> 7<?import javafx.scene.layout.*?> 8<?import javafx.scene.layout.BorderPane?> 9<?import javafx.scene.control.Button?> 10<?import javafx.scene.control.TextField?> 11<?import javafx.scene.layout.AnchorPane?> 12 13<BorderPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SampleController"> 14 <center> 15 <AnchorPane prefHeight="441.0" prefWidth="981.0" BorderPane.alignment="CENTER"> 16 <children> 17 <Button layoutX="312.0" layoutY="345.0" mnemonicParsing="false" onAction="#onGetButtonClick" text="Button" /> 18 <TextField fx:id="id" layoutX="42.0" layoutY="162.0" prefHeight="31.0" prefWidth="102.0" /> 19 <TextField fx:id="name" layoutX="171.0" layoutY="162.0" prefHeight="31.0" prefWidth="102.0" /> 20 </children> 21 </AnchorPane> 22 </center> 23</BorderPane>

java

1//Main.java 2package application; 3 4import javafx.application.Application; 5import javafx.fxml.FXMLLoader; 6import javafx.scene.Scene; 7import javafx.scene.layout.BorderPane; 8import javafx.stage.Stage; 9 10 11public class Main extends Application { 12 @Override 13 public void start(Stage primaryStage) { 14 try { 15 BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("Sample.fxml")); 16 Scene scene = new Scene(root,400,400); 17 scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 18 primaryStage.setScene(scene); 19 primaryStage.show(); 20 } catch(Exception e) { 21 e.printStackTrace(); 22 } 23 } 24 25 public static void main(String[] args) { 26 launch(args); 27 } 28} 29

エラーメッセージ

Exception in thread "JavaFX Application Thread"

JavaFXについて

Javaの学習としてデスクトップアプリを作成して成果物を作りながら学習を行いたいと考えているのですが、デスクトップアプリを作るのにJavaFXは良いのでしょうか?「JavaFX 廃止」という記事や、調べても学習の参考になるようなサイトなどがあまりなくてこずっています。学習程度ならJavaFXでも良い…など何かアドバイスや学習サイトなどがあれば教えていただきたいです。

TN8001👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

idともう一つ"name"も取得したいとなった場合どのように書けば取得できるのでしょうか。

Java

1 @FXML 2 private TextField id; 3 4 @FXML 5 private TextField name; 6 7 @FXML 8 protected void onGetButtonClick(ActionEvent evt) { 9 System.out.println(id.getText()); 10 System.out.println(name.getText()); 11 }

のようにnameもフィールドを作ります(@FXMLも忘れずに)
fxmlControllerクラスで、型(TextField等)と名前(name等)があっている必要があります。

どのような仕組みで取得できているのか

FXMLLoader.loadで色々よしなにやってくれるんでしょうが、私も知りません^^;
そういう決まりだと思ったほうが幸せだと思います。
FXMLの概要 | JavaFX 8.0
FXMLを利用する(1)基本的な使い方|軽Lab

実際は「Scene Builder」を使用すれば、かなりの部分をマウスポチポチで済むはずです。

Javaの学習としてデスクトップアプリを作成して成果物を作りながら学習を行いたいと考えているのですが、デスクトップアプリを作るのにJavaFXは良いのでしょうか?「JavaFX 廃止」という記事や、調べても学習の参考になるようなサイトなどがあまりなくてこずっています。

ひとつはっきりさせておきたいのはJDKに含まれなくなっただけで、OpenJFXとして開発は続いています。
JavaFX

JavaFXはSwingの後継として出てきたわけですが、あまり流行らなかったのは確かだと思います。
この辺りはC#でのWindows開発とよく似ています(Winforms 対 WPF・UWP)
ビューとロジックを分けて書くタイプのものですが、小規模だとメリットよりデメリットのほうが大きく感じられたのかもしれません(リアルタイムで体験していないので本当の理由はよくわかりません)

言語の学習がメインであれば、情報の多いSwingでやったほうが躓きは少ないと思います。
今後GUIアプリの学習も視野にあるなら、JavaFXをする意義はあると思います。

投稿2021/03/05 08:57

編集2023/07/26 14:48
TN8001

総合スコア9855

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

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

ponpon123

2021/03/08 00:07

@FXMLを付けずに何度も実行しようとしていました・・・。 JavaFX、Swingの説明までありがとうございます。
guest

0

成果物を作りながら学習を行いたい

でしたら、実践系の書籍のほうが良いと思います。
デスクトップアプリも何をつくりたいかにはよりますが、おおよそ流れは同じなので、1つ覚えてもまた最初からということにはなりにくいと思います(個人の感想)

投稿2021/03/05 06:49

m.ts10806

総合スコア80875

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

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

ponpon123

2021/03/05 07:12

アドバイスありがとうございます。 よろしければ本題のコードについての質問に対しての解答もしていただけるとありがたいです。
m.ts10806

2021/03/05 07:20

変数名とフィールド名が連動してるなら明白ではないかと。
ponpon123

2021/03/05 07:26

すみません。理解できません。。。 どのように書けばいいか教えていただけませんでしょうか。 一から勉強しろと思うかもしれませんが、ここだけでいいのでスッキリ理解しておきたいです。 教えていただいたら一から書籍を購入して勉強します。
m.ts10806

2021/03/05 07:28

ではもうひとつ突っ込んでおきます。 private TextField id; ↑これはなぜ「id」という変数名にしましたか?
ponpon123

2021/03/05 07:32

特に意味はないです。aでもbでも取得してコンソールに表示できます。
m.ts10806

2021/03/05 07:35

では fx:id="id" との紐付けどこでやってますか?
ponpon123

2021/03/05 07:38

それが分からなくて2つ以上のTextFieldを設置した場合一つしか取得できないです。 紐づけをしなければいけないんですよね。どのようにすればいいのでしょうか。
m.ts10806

2021/03/05 07:39

手元に環境ないので調べた感じですが、変数名と連動してるように見えるのですけど…。
ponpon123

2021/03/05 07:44

あぁ、すみません。idはTextField id;でないと表示できませんでした。 ですが、下記のような書き方をするとidは表示されるんですがnameの方がエラーになってしまいます。 private TextField id; private TextField name; @FXML protected void onGetButtonClick(ActionEvent evt) { //「取得」ボタンクリック System.out.println(id.getText()); System.out.println(name.getText()); }
m.ts10806

2021/03/05 07:48

どういうエラーでしょうか
m.ts10806

2021/03/05 07:49

質問本文に追記してください
ponpon123

2021/03/05 07:54

エラーメッセージが長くどの部分を記載すればいいか分からなかったのですが、一応追記しました。
m.ts10806

2021/03/05 09:10

アノテーションの理解からですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問