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

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

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

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

Java

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

FXML

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

Q&A

解決済

1回答

2508閲覧

Javafxで別のウィンドウから要素を追加する処理

退会済みユーザー

退会済みユーザー

総合スコア0

JavaFX

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

Java

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

FXML

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

0グッド

0クリップ

投稿2020/08/15 16:46

編集2020/08/16 07:07

JavaFxを使用し、ファイルから読み込んだ情報をテーブルに表示し、「新規追加」ボタンを押すと別のウィンドウが現れ、そのウィンドウに入力したものをテーブルに追加表示するというプログラムを作成する計画を立てています。
そのために1度ファイルから読込表示させるプログラム、ボタンを押すと入力用のウィンドウが表示され、追加するプログラムを簡易的に作成して試行錯誤を行っています。
ファイルから読込表示させるプログラム部分は完成したのですが、もう片方の追加時に行うウィンドウ間の処理の部分をどう作成していけばよいか分からず、教えていただきたいです。

Main

1import java.io.IOException; 2 3import javafx.application.Application; 4import javafx.fxml.FXMLLoader; 5import javafx.scene.Parent; 6import javafx.scene.Scene; 7import javafx.stage.Stage; 8 9public class Main extends Application { 10 11 public static void main(String[] args) { 12 // javafx起動 13 launch(args); 14 } 15 16 @Override 17 public void start(Stage primaryStage) throws Exception { 18 // TODO 自動生成されたメソッド・スタブ 19 try { 20 // FXMLのレイアウトをロード 21 FXMLLoader loader = new FXMLLoader(getClass().getResource("Window1.fxml")); 22 Parent root = loader.load(); 23 Scene scene = new Scene(root); 24 primaryStage.setScene(scene); 25 primaryStage.show(); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 30 } 31 32}

Data

1import javafx.beans.property.SimpleStringProperty; 2import javafx.beans.property.StringProperty; 3 4public class Data { 5 6 private StringProperty name; 7 private StringProperty age; 8 private StringProperty mail; 9 10 Data(String name, String age, String mail){ 11 this.name = new SimpleStringProperty(name); 12 this.age = new SimpleStringProperty(age); 13 this.mail = new SimpleStringProperty(mail); 14 } 15 16 public StringProperty NameProperty(){ 17 return name; 18 } 19 20 public String getName(){ 21 return name.get(); 22 } 23 24 public void setName(String name){ 25 this.name.set(name); 26 } 27 28 public StringProperty AgeProperty() { 29 return age; 30 } 31 32 public String getAge() { 33 return age.get(); 34 } 35 36 public void setAge(String age) { 37 this.age.set(age); 38 } 39 40 public StringProperty MailProperty() { 41 return mail; 42 } 43 44 public String getMail() { 45 return mail.get(); 46 } 47 48 public void setMail(String mail) { 49 this.mail.set(mail); 50 } 51 52} 53

Window1Controller

1import java.io.IOException; 2import java.net.URL; 3import java.util.ResourceBundle; 4 5import javafx.collections.ObservableList; 6import javafx.fxml.FXML; 7import javafx.fxml.FXMLLoader; 8import javafx.fxml.Initializable; 9import javafx.scene.Parent; 10import javafx.scene.Scene; 11import javafx.scene.control.Button; 12import javafx.scene.control.TableColumn; 13import javafx.scene.control.TableView; 14import javafx.scene.control.cell.PropertyValueFactory; 15import javafx.scene.input.MouseEvent; 16import javafx.scene.layout.Pane; 17import javafx.stage.Stage; 18 19public class Window1Controller implements Initializable { 20 21 @FXML 22 private Pane pane1; 23 24 @FXML 25 private Button bt01; 26 27 @FXML 28 private TableView<Data> tblView; 29 30 @FXML 31 private TableColumn<Data, String> names; 32 33 @FXML 34 private TableColumn<Data, String> ages; 35 36 @FXML 37 private TableColumn<Data, String> mails; 38 39 private ObservableList<Data> Datas; 40 41 /** 42 * ボタンクリックイベント<br> 43 * 44 * @param event MouseEvent 45 * @throws IOException 46 */ 47 @FXML 48 protected void onMouseClickedButton(MouseEvent event) throws IOException { 49 final Button btn = (Button) event.getSource(); 50 switch (btn.getId()) { 51 case "bt01": 52 /* 追加 */ 53 btnAdd(); 54 break; 55 56 default: 57 break; 58 } 59 } 60 61 private void btnAdd() { 62 try { 63 Parent parent = FXMLLoader.load(getClass().getResource("Window2.fxml")); 64 Scene scene = new Scene(parent); 65 Stage stage = new Stage(); 66 stage.setScene(scene); 67 stage.setResizable(false); 68 stage.setAlwaysOnTop(true); 69 stage.show(); 70 }catch(IOException e) { 71 e.printStackTrace(); 72 } 73 } 74 75 @Override 76 public void initialize(URL location, ResourceBundle resources) { 77 // TODO 自動生成されたメソッド・スタブ 78 names.setCellValueFactory(new PropertyValueFactory<Data, String>("names")); 79 ages.setCellValueFactory(new PropertyValueFactory<Data, String>("ages")); 80 mails.setCellValueFactory(new PropertyValueFactory<Data, String>("mails")); 81 82 tblView.setItems(Datas); 83 84 } 85 86 87} 88

以下FXML

Window1

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.control.Button?> 4<?import javafx.scene.control.TableColumn?> 5<?import javafx.scene.control.TableView?> 6<?import javafx.scene.layout.Pane?> 7 8<Pane fx:id="pane1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="213.0" prefWidth="364.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="test_fxmls.testa.Window1Controller"> 9 <children> 10 <TableView fx:id="tblView" layoutX="75.0" layoutY="64.0" prefHeight="135.0" prefWidth="228.0"> 11 <columns> 12 <TableColumn fx:id="names" prefWidth="75.0" text="名称" /> 13 <TableColumn fx:id="ages" prefWidth="75.0" text="年齢" /> 14 <TableColumn fx:id="mails" prefWidth="75.0" text="アドレス" /> 15 </columns> 16 </TableView> 17 <Button fx:id="bt01" layoutX="144.0" layoutY="26.0" mnemonicParsing="false" onMouseClicked="#onMouseClickedButton" prefHeight="25.0" prefWidth="89.0" text="新規追加" /> 18 </children> 19</Pane> 20

Window2

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.control.Button?> 4<?import javafx.scene.control.Label?> 5<?import javafx.scene.control.TextField?> 6<?import javafx.scene.layout.Pane?> 7 8 9<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="153.0" prefWidth="603.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> 10 <children> 11 <TextField layoutX="50.0" layoutY="64.0" /> 12 <TextField layoutX="227.0" layoutY="64.0" /> 13 <TextField layoutX="396.0" layoutY="64.0" /> 14 <Label layoutX="50.0" layoutY="49.0" prefHeight="17.0" prefWidth="62.0" text="名称" /> 15 <Label layoutX="396.0" layoutY="49.0" prefHeight="17.0" prefWidth="48.0" text="アドレス" /> 16 <Label layoutX="227.0" layoutY="49.0" prefHeight="17.0" prefWidth="36.0" text="年齢" /> 17 <Button layoutX="227.0" layoutY="108.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="149.0" text="追加確定" /> 18 </children> 19</Pane> 20

Window2のテキストフィールドに入力し、追加確定ボタンを押すことでテーブルに追加表示されるという形です。
イメージ説明イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

手軽なのはObservableList<Data> DatasWindow2(のコントローラ)に渡してしまってそこで追加するパターン(↓ほとんど同じシナリオです)
javafx - カスタムダイアログの作成 | javafx Tutorial

正しい?ダイアログとするなら、Dialog<R>を継承しDataを返す感じでしょうか。
しかし途中から入ったためか、よさそうな参考記事がないですね^^;
Dialog (JavaFX 8)


Java - JavaFxにてTableViewからの情報をXMLに出力したい|teratail
こちらの回答にDialog<R>の参考実装を書きました。

投稿2020/08/16 09:19

編集2020/08/31 15:20
TN8001

総合スコア9321

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

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

退会済みユーザー

退会済みユーザー

2020/08/16 14:08

回答ありがとうございます。 取り敢えず1つ目の方法で頂いた記事等を参考にしながら試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問