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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

JavaFX

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

Java

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

FXML

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

Q&A

1回答

2168閲覧

JavafxのTableview内のcolumnにXMLで読み込んだ情報を表示させたい

Ozfillas-tifa

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

JavaFX

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

Java

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

FXML

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

0グッド

0クリップ

投稿2020/06/30 17:30

前提・実現したいこと

訳あって進学のためにJavaとJavafxを独学で勉強し始めたものですが、
JavafxのTableview内のcolumnにXMLで読み込んだ情報を表示させるという処理の作成でfxmlを読み込む前に詰んでしまい、前に進まないです…

発生している問題・エラーメッセージ

at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625) at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2603) at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466) at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435) at qa_xmlculmn/qa_xmlculmn.table.AmaTable.start(AmaTable.java:23) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) at java.base/java.security.AccessController.doPrivileged(Native Method) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.ClassCastException: class com.sun.javafx.collections.ObservableListWrapper cannot be cast to class qa_xmlculmn.table.Persons (com.sun.javafx.collections.ObservableListWrapper is in module javafx.base of loader 'app'; qa_xmlculmn.table.Persons is in module qa_xmlculmn of loader 'app') at qa_xmlculmn/qa_xmlculmn.table.File_read.setItem(File_read.java:84) at qa_xmlculmn/qa_xmlculmn.table.File_read.loadXml(File_read.java:50) at qa_xmlculmn/qa_xmlculmn.table.Controller.initialize(Controller.java:40) at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)

該当のソースコード

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<Amazin_Info> 3 <AmaInfo> 4 <name>iPad Fro</name> 5 <price>20000</price> 6 <sugo>頻繁に割れる</sugo> 7 <biko>修理代がやや高い、送料無料</biko> 8 </AmaInfo> 9 <AmaInfo> 10 <name>iPad 8</name> 11 <price>70000</price> 12 <sugo>紙より薄い</sugo> 13 <biko>送料が高い</biko> 14 </AmaInfo> 15 <AmaInfo> 16 <name>apple</name> 17 <price>100000</price> 18 <sugo>買えば将来安泰</sugo> 19 <biko>サブカル系になる</biko> 20 </AmaInfo> 21</Amazin_Info> 22

fxml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.control.Label?> 4<?import javafx.scene.control.TableColumn?> 5<?import javafx.scene.control.TableView?> 6<?import javafx.scene.layout.AnchorPane?> 7<?import javafx.scene.layout.VBox?> 8<?import javafx.scene.text.Font?> 9 10<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> 11 <children> 12 <AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS"> 13 <children> 14 <Label alignment="CENTER" layoutX="155.0" layoutY="177.0" style="&#10;" text="Drag components from Library here…" textAlignment="CENTER" textFill="#9f9f9f" wrapText="false"> 15 <font> 16 <Font size="18.0" /> 17 </font> 18 </Label> 19 <TableView layoutX="65.0" layoutY="68.0" prefHeight="263.0" prefWidth="510.0"> 20 <columns> 21 <TableColumn prefWidth="75.0" text="名称" /> 22 <TableColumn prefWidth="75.0" text="価格" /> 23 <TableColumn prefWidth="75.0" text="凄さ" /> 24 <TableColumn prefWidth="75.0" text="備考" /> 25 </columns> 26 </TableView> 27 </children> 28 </AnchorPane> 29 </children> 30</VBox> 31

Java

1package qa_xmlculmn.table; 2 3import javafx.beans.property.IntegerProperty; 4import javafx.beans.property.SimpleIntegerProperty; 5import javafx.beans.property.SimpleStringProperty; 6import javafx.beans.property.StringProperty; 7 8public class Persons { 9 10 // 人間でいう人体パーツなどの構成をまとめたクラス 11 12 private static final int NULL = 0; 13 private final SimpleStringProperty name; 14 private final SimpleIntegerProperty price; 15 private final SimpleStringProperty sugo; 16 private final SimpleStringProperty biko; 17 18 public Persons(String name, int price, String sugo, String biko){ 19 this.name = new SimpleStringProperty(); 20 this.price = new SimpleIntegerProperty(); 21 this.sugo = new SimpleStringProperty(); 22 this.biko = new SimpleStringProperty(); 23 } 24 25 public Persons() { 26 this("",NULL,"",""); 27 } 28 29 // プロパティの宣言 30 public StringProperty nameProperty() { 31 return name; 32 } 33 public IntegerProperty priceProperty() { 34 return price; 35 } 36 public StringProperty sugoProperty() { 37 return sugo; 38 } 39 public StringProperty bikoProperty() { 40 return biko; 41 } 42 43 44 45 public void setName(String ss) { 46 name.set(ss); 47 } 48 public String getName() { 49 return name.get(); 50 } 51 public void setPrice(int ss) { 52 price.set(ss); 53 } 54 public int getPrice() { 55 return price.get(); 56 } 57 public void setSugo(String ss) { 58 sugo.set(ss); 59 } 60 public String getSugo() { 61 return sugo.get(); 62 } 63 public void setBiko(String ss) { 64 biko.set(ss); 65 } 66 public String getBiko() { 67 return biko.get(); 68 } 69 70 71} 72

Java

1package qa_xmlculmn.table; 2 3import java.net.URL; 4import java.util.ResourceBundle; 5 6import javafx.collections.ObservableList; 7import javafx.fxml.FXML; 8import javafx.fxml.Initializable; 9import javafx.scene.control.TableColumn; 10import javafx.scene.control.TableView; 11import javafx.scene.control.cell.PropertyValueFactory; 12import javafx.scene.layout.VBox; 13 14public class Controller implements Initializable { 15 16 private ObservableList<Persons> pList; 17 18 @FXML 19 private VBox amaPane; 20 21 @FXML 22 private TableView<Persons>amaview; 23 24 @FXML 25 private TableColumn<Persons, String> name; 26 @FXML 27 private TableColumn<Persons, Integer> price; 28 @FXML 29 private TableColumn<Persons, String> sugo; 30 @FXML 31 private TableColumn<Persons, String> biko; 32 33 34 35 @Override 36 public void initialize(URL location, ResourceBundle resources) { 37 38 Persons ps = new Persons(); 39 File_read fr = new File_read(); 40 fr.loadXml("C:/Ama/file/vlp1"); 41 amaview.setItems(pList); 42 43 name.setCellValueFactory(new PropertyValueFactory<Persons, String>("name")); 44 price.setCellValueFactory(new PropertyValueFactory<Persons, Integer>("price")); 45 sugo.setCellValueFactory(new PropertyValueFactory<Persons, String>("sugo")); 46 biko.setCellValueFactory(new PropertyValueFactory<Persons, String>("biko")); 47 48 49 } 50 51} 52

Java

1package qa_xmlculmn.table; 2 3import java.io.IOException; 4 5import javafx.application.Application; 6import javafx.fxml.FXMLLoader; 7import javafx.scene.Parent; 8import javafx.scene.Scene; 9import javafx.stage.Stage; 10 11public class AmaTable extends Application { 12 13 public static void main(String[] args) { 14 launch(args); 15 } 16 17 @Override 18 public void start(Stage primaryStage) throws Exception { 19 20 try { 21 FXMLLoader loader = new FXMLLoader(getClass().getResource("TableTest.fxml")); 22 Parent parent = loader.load(); 23 24 25 // シーンの作成を行う 26 Scene scene = new Scene(parent, 600, 400); 27 28 29 // ウィンドウのセット、表示 30 primaryStage.setScene(scene); 31 primaryStage.show(); 32 33 }catch(IOException e) { 34 e.printStackTrace(); 35 } 36 37 38 39 40 } 41 42} 43

Java

1package qa_xmlculmn.table; 2 3import java.io.File; 4import java.io.IOException; 5 6import javax.xml.parsers.DocumentBuilder; 7import javax.xml.parsers.DocumentBuilderFactory; 8import javax.xml.parsers.ParserConfigurationException; 9 10import org.w3c.dom.DOMException; 11import org.w3c.dom.Document; 12import org.w3c.dom.Element; 13import org.w3c.dom.Node; 14import org.w3c.dom.NodeList; 15import org.xml.sax.SAXException; 16 17import javafx.collections.FXCollections; 18import javafx.collections.ObservableList; 19 20public class File_read { 21 22 // カラムに入れるためのリスト 23 private ObservableList<Persons> pList = FXCollections.observableArrayList(); 24 25 public boolean loadXml(String path) { 26 boolean flg = true; 27 28 // ファイルの存在チェック 29 File file = new File(path +"/psAmazin.xml"); 30 if (file.exists()) { 31 // あり 32 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 33 try { 34 DocumentBuilder documentBuilder = factory.newDocumentBuilder(); 35 Document document = documentBuilder.parse(file); 36 Element root = document.getDocumentElement(); 37 // ルート要素の子ノードを取得する 38 NodeList rootNode = root.getChildNodes(); 39 40 for (int loop = 0; loop < rootNode.getLength(); loop++) { 41 Node node1 = rootNode.item(loop); 42 if (node1.getNodeType() == Node.ELEMENT_NODE) { 43 Element element = (Element) node1; 44 if (element.getNodeName().equals("AmaInfo")) { 45 NodeList childrenNode = node1.getChildNodes(); 46 Persons item = new Persons(); 47 for (int loop2 = 0; loop2 < childrenNode.getLength(); loop2++) { 48 Node node2 = childrenNode.item(loop2); 49 if (node2.getNodeType() == Node.ELEMENT_NODE) { 50 item = setItem(node2.getNodeName(), node2.getTextContent(), item); 51 } 52 } 53 } 54 } 55 } 56 flg = false; 57 } catch (DOMException | ParserConfigurationException | SAXException | IOException e) { 58 flg = true; 59 } 60 } 61 return flg; 62 } 63 64 public Persons setItem(String nodeName, String content, Persons item) { 65 66 switch (nodeName) { 67 case "name": 68 item.setName(content); 69 break; 70 case "price": 71 int i = Integer.parseInt(content); 72 item.setPrice(i); 73 break; 74 case "sugo": 75 item.setSugo(content); 76 break; 77 case "biko": 78 item.setBiko(content); 79 default: 80 break; 81 } 82 83 pList.add(item); 84 return (Persons)pList; 85 86 } 87} 88

試したこと

SceanBuilderでControllerの紐づけはそれぞれ正しい場所に行っています。

補足情報(FW/ツールのバージョンなど)

Eclipse4.14.0

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/07/01 00:08

同名のクラスの場合、同じクラスローダーから読み込まれてるかチェックしてください
guest

回答1

0

例外の直接の原因は、ここです。JavaFXはまったく関係していません。

java

1 2public class File_read { 3 private ObservableList<Persons> pList = FXCollections.observableArrayList(); 4... 5 public Persons setItem(String nodeName, String content, Persons item) { 6... 7 return (Persons)pList; // これ。 8 }

ObservableList<Persons>Personsにキャストしたら、それは、
Caused by: java.lang.ClassCastException: class com.sun.javafx.collections.ObservableListWrapper cannot be cast to class qa_xmlculmn.table.Personsと怒られるでしょうね。


軽く動かしてみましたが、fxmlファイルの中身もきちんと定義されていないようでした。参考まで。

diff

1diff --git a/src/main/resources/qa_xmlculmn/table/TableTest.fxml b/src/main/resources/qa_xmlculmn/table/TableTest.fxml 2index 771c767..46e5c5b 100644 3--- a/src/main/resources/qa_xmlculmn/table/TableTest.fxml 4+++ b/src/main/resources/qa_xmlculmn/table/TableTest.fxml 5@@ -7,7 +7,7 @@ 6 <?import javafx.scene.layout.VBox?> 7 <?import javafx.scene.text.Font?> 8 9-<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> 10+<VBox fx:id="amaPane" prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8.0.181" xmlns:fx="http://javafx.com/fxml/1" fx:controller="qa_xmlculmn.table.Controller"> 11 <children> 12 <AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS"> 13 <children> 14@@ -16,12 +16,12 @@ 15 <Font size="18.0" /> 16 </font> 17 </Label> 18- <TableView layoutX="65.0" layoutY="68.0" prefHeight="263.0" prefWidth="510.0"> 19+ <TableView fx:id="amaview" layoutX="65.0" layoutY="68.0" prefHeight="263.0" prefWidth="510.0"> 20 <columns> 21- <TableColumn prefWidth="75.0" text="名称" /> 22- <TableColumn prefWidth="75.0" text="価格" /> 23- <TableColumn prefWidth="75.0" text="凄さ" /> 24- <TableColumn prefWidth="75.0" text="備考" /> 25+ <TableColumn fx:id="name" prefWidth="75.0" text="名称" /> 26+ <TableColumn fx:id="price" prefWidth="75.0" text="価格" /> 27+ <TableColumn fx:id="sugo" prefWidth="75.0" text="凄さ" /> 28+ <TableColumn fx:id="biko" prefWidth="75.0" text="備考" /> 29 </columns> 30 </TableView> 31 </children>

また、このあたりも無茶苦茶ですね。

java

1public class Controller implements Initializable { 2 private ObservableList<Persons> pList; 3... 4 public void initialize(URL location, ResourceBundle resources) { 5 Persons ps = new Persons(); 6 File_read fr = new File_read(); 7 fr.loadXml(...); 8 amaview.setItems(pList);

File_readのpListと、ControllerのpListはベツモノです。setItems()でNPEが発生するでしょう。おそらく。

投稿2020/07/01 00:51

編集2020/07/01 01:03
shiketa

総合スコア3971

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問