前提・実現したいこと
JavafxのTableViewに値を追加したいです。
Scene BuilderでTableViewを作ってます。
ボタンを押して、TableViewを表示してます。Initializableで初期データをいれて表示が確認できました。
指定した個数分データを追加したするようにしてます。
データを追加するコードで以下のエラーが出てしまいます。
いわゆるヌルポです。
半日以上時間を費やしてしまいました。。。
発生している問題・エラーメッセージ
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at fxdiary.NewTableForm.FXData(NewTableForm.java:204) at fxdiary.NewTableSplit.Split(NewTableSplit.java:23) at fxdiary.NewAction$1.handle(NewAction.java:48) at fxdiary.NewAction$1.handle(NewAction.java:1)
該当のソースコード
Split
1package fxdiary; 2 3import java.io.IOException; 4 5import javafx.scene.Scene; 6 7public class NewTableSplit 8{ 9 public void Split( String[] Data, int Number, Scene Scene ) throws IOException 10 { 11 String[] DataText = new String[14]; 12 //13こ 13 for( int i = 0; i < Number; i++) 14 { 15 NewTableForm Table = new NewTableForm(); 16 String[] KeySplit = new String[Number]; 17 KeySplit = Data[i].split( ">>>" ); 18 for( int a = 0; a < KeySplit.length; a++ ) 19 { 20 DataText[a] = KeySplit[a]; 21 System.out.println(DataText[a]); 22 } 23 Table.FXData( DataText ); //データを送って『1』 24 } 25 } 26} 27
NewTableForm
1 2public class NewTableForm implements Initializable 3{ 4 @FXML 5 private TableView <Data> HistoryTable; 6 @FXML 7 private TableColumn<Data, String> TicketCol; 8 @FXML 9 private TableColumn<Data, String> OrderTimeCol; 10 @FXML 11 private TableColumn<Data, String> OrderPriceCol; 12 @FXML 13 private TableColumn<Data, String> TypeCol; 14 @FXML 15 private TableColumn<Data, String> LotsCol; 16 @FXML 17 private TableColumn<Data, String> PairCol; 18 @FXML 19 private TableColumn<Data, String> StopLossCol; 20 @FXML 21 private TableColumn<Data, String> LimitCol; 22 @FXML 23 private TableColumn<Data, String> CloseTimeCol; 24 @FXML 25 private TableColumn<Data, String> ClosePriceCol; 26 @FXML 27 private TableColumn<Data, String> FeeCol; 28 @FXML 29 private TableColumn<Data, String> SwapCol; 30 @FXML 31 private TableColumn<Data, String> PLCol; 32 33 private ObservableList<Data> Datas; 34 35 @Override 36 public void initialize( URL location, ResourceBundle resources ) 37 { 38 System.out.println( "Initialize" ); 39 40 Datas = FXCollections.observableArrayList 41 ( 42 new Data( "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ) 43 ); 44 45 HistoryTable.setItems( Datas ); 46 47 TicketCol.setCellValueFactory( 48 new PropertyValueFactory<>("Ticket")); 49 Callback<TableColumn<Data, String>, TableCell<Data, String>> TicketFactory = TextFieldTableCell.forTableColumn(); 50 TicketCol.setCellFactory(TicketFactory); 51 TicketCol.setOnEditCommit((TableColumn.CellEditEvent<Data, String> event) -> 52 { 53 Data Data = event.getTableView().getItems().get(event.getTablePosition().getRow()); 54 Data.setTicket(event.getNewValue()); 55 }); 56 57 OrderTimeCol.setCellValueFactory( 58 new PropertyValueFactory<>("OrderTime")); 59 Callback<TableColumn<Data, String>, TableCell<Data, String>> OrderTimeFactory = TextFieldTableCell.forTableColumn(); 60 OrderTimeCol.setCellFactory(OrderTimeFactory); 61 OrderTimeCol.setOnEditCommit((TableColumn.CellEditEvent<Data, String> event) -> 62 { 63 Data Data = event.getTableView().getItems().get(event.getTablePosition().getRow()); 64 Data.setOrderTime(event.getNewValue()); 65 }); 66 67 OrderPriceCol.setCellValueFactory( 68 new PropertyValueFactory<>("OrderPrice")); 69 Callback<TableColumn<Data, String>, TableCell<Data, String>> OrderPriceFactory = TextFieldTableCell.forTableColumn(); 70 OrderPriceCol.setCellFactory(OrderPriceFactory); 71 OrderPriceCol.setOnEditCommit((TableColumn.CellEditEvent<Data, String> event) -> 72 { 73 Data Data = event.getTableView().getItems().get(event.getTablePosition().getRow()); 74 Data.setOrderPrice(event.getNewValue()); 75 }); 76 ・ 77 (略) 78 ・ 79 // サンプルデータを1行追加 80 HistoryTable.getItems().add(new Data("101", "Lucius Junius Brutus", "-550", "-550", "-550", "-550", "-550", "-550", "-550", "-550", "-550", "-550", "-550")); 81 } 82 83 public void FXData( String[] Data )//データを受け取って。中身確認しました。 84 { 85 System.out.println( "FXData : " + Data[0] ); 86 Data FXDatas = new Data( Data[0], Data[1], Data[2], Data[3], Data[4], Data[5], Data[6], Data[7], Data[8], Data[9], Data[10], Data[11], Data[12] ); 87 88 Datas.addAll(FXDatas); //データを追加しているつもり『2』 //ここでエラー。。。ヌルポ 89 90 //System.out.println( Data[0]+ Data[1]+ Data[2]+ Data[3] +Data[4] +Data[5]+ Data[6] +Data[7] +Data[8]+ Data[9]+ Data[10]+ Data[11]+ Data[12] ); 91 } 92} 93
Data
1package fxdiary; 2 3import javafx.beans.property.SimpleStringProperty; 4import javafx.beans.property.StringProperty; 5 6public class Data 7{ 8 private StringProperty Ticket; 9 private StringProperty OrderTime; 10 private StringProperty OrderPrice; 11 private StringProperty Type; 12 private StringProperty Lots; 13 private StringProperty Pair; 14 private StringProperty StopLoss; 15 private StringProperty Limit; 16 private StringProperty CloseTime; 17 private StringProperty ClosePrice; 18 private StringProperty Fee; 19 private StringProperty Swap; 20 private StringProperty PL; 21 22 23 public Data 24 ( 25 String Ticket, 26 String OrderTime, 27 String OrderPrice, 28 String Type, 29 String Lots, 30 String Pair, 31 String StopLoss, 32 String Limit, 33 String CloseTime, 34 String ClosePrice, 35 String Fee, 36 String Swap, 37 String PL 38 ) 39 { 40 this.Ticket = new SimpleStringProperty(Ticket); 41 this.OrderTime = new SimpleStringProperty(OrderTime); 42 this.OrderPrice = new SimpleStringProperty(OrderPrice); 43 this.Type = new SimpleStringProperty(Type); 44 this.Lots = new SimpleStringProperty(Lots); 45 this.Pair = new SimpleStringProperty(Pair); 46 this.StopLoss = new SimpleStringProperty(StopLoss); 47 this.Limit = new SimpleStringProperty(Limit); 48 this.CloseTime = new SimpleStringProperty(CloseTime); 49 this.ClosePrice = new SimpleStringProperty(ClosePrice); 50 this.Fee = new SimpleStringProperty(Fee); 51 this.Swap = new SimpleStringProperty(Swap); 52 this.PL = new SimpleStringProperty(PL); 53 } 54 55 public StringProperty TicketProperty() 56 { 57 return Ticket; 58 } 59 public String getTicket() 60 { 61 return Ticket.get(); 62 } 63 public void setTicket( String Ticket ) 64 { 65 this.Ticket.set(Ticket);; 66 } 67 68 public StringProperty OrderTimeProperty() 69 { 70 return OrderTime; 71 } 72 public String getOrderTime() 73 { 74 return OrderTime.get(); 75 } 76 public void setOrderTime( String OrderTime ) 77 { 78 this.OrderTime.set(OrderTime);; 79 } 80 81 public StringProperty OrderPriceProperty() 82 { 83 return OrderPrice; 84 } 85 public String getOrderPrice() 86 { 87 return OrderPrice.get(); 88 } 89 public void setOrderPrice( String OrderPrice ) 90 { 91 this.OrderPrice.set(OrderPrice);; 92 } 93 94 ・ 95 (略) 96 ・
fxml
1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import java.lang.*?> 4<?import java.util.*?> 5<?import javafx.scene.control.*?> 6<?import javafx.scene.layout.*?> 7<?import javafx.scene.paint.*?> 8 9<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="976.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="fxdiary.NewTableForm"> 10 <children> 11 <TableView fx:id="HistoryTable" layoutX="0.0" layoutY="0.0" prefHeight="400.0" prefWidth="976.0"> 12 <columns> 13 <TableColumn id="Ticket" prefWidth="75.0" text="チケット番号" fx:id="TicketCol" /> 14 <TableColumn id="OrderTime" prefWidth="75.0" text="注文時間" fx:id="OrderTimeCol" /> 15 <TableColumn id="OrderPrice" prefWidth="75.0" text="注文価格" fx:id="OrderPriceCol" /> 16 <TableColumn id="Type" prefWidth="75.0" text="注文タイプ" fx:id="TypeCol" /> 17 <TableColumn id="Lots" prefWidth="75.0" text="ロット数" fx:id="LotsCol" /> 18 <TableColumn id="Pair" prefWidth="75.0" text="通貨ペア" fx:id="PairCol" /> 19 <TableColumn id="StopLoss" prefWidth="75.0" text="ストップロス" fx:id="StopLossCol" /> 20 <TableColumn id="Limit" prefWidth="75.0" text="リミット" fx:id="LimitCol" /> 21 <TableColumn id="CloseTime" prefWidth="75.0" text="決済時間" fx:id="CloseTimeCol" /> 22 <TableColumn id="ClosePrice" prefWidth="75.0" text="決済価格" fx:id="ClosePriceCol" /> 23 <TableColumn id="Fee" prefWidth="75.0" text="手数料" fx:id="FeeCol" /> 24 <TableColumn id="Swap" prefWidth="75.0" text="スワップ" fx:id="SwapCol" /> 25 <TableColumn id="PL" prefWidth="75.0" text="損益" fx:id="PLCol" /> 26 </columns> 27 </TableView> 28 </children> 29</AnchorPane>
試したこと
String[] Data はプリントして中に値が入っている事は確認してます。
いろいろ試しすぎて、ゴチャゴチャかもしれません。すみません。。。
補足情報(FW/ツールのバージョンなど)
SceneBuilder : ver1.0
回答1件
あなたの回答
tips
プレビュー