質問するログイン新規登録

質問編集履歴

3

FXMLを追記いたしました

2019/09/08 06:58

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -161,4 +161,31 @@
161
161
  close();
162
162
  return list;
163
163
  }
164
+ ```
165
+ ```FXML
166
+ <?xml version="1.0" encoding="UTF-8"?>
167
+
168
+ <?import javafx.scene.control.Button?>
169
+ <?import javafx.scene.control.TableColumn?>
170
+ <?import javafx.scene.control.TableView?>
171
+ <?import javafx.scene.layout.AnchorPane?>
172
+
173
+ <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="maker.makerControl">
174
+ <children>
175
+ <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="400.0" prefWidth="600.0">
176
+ <children>
177
+ <TableView fx:id="fxTableView" layoutX="33.0" layoutY="52.0" prefHeight="296.0" prefWidth="534.0">
178
+ <columns>
179
+ <TableColumn fx:id="fxMakerName" prefWidth="174.0" text="メーカー名" />
180
+ <TableColumn fx:id="fxMakerNameShort" prefWidth="93.0" text="略称" />
181
+ <TableColumn fx:id="fxMakerComment" prefWidth="266.0" text="備考" />
182
+ </columns>
183
+ </TableView>
184
+ </children>
185
+ </AnchorPane>
186
+ <Button fx:id="fxOK" layoutX="523.0" layoutY="361.0" mnemonicParsing="false" onAction="#btnAction" text="F12 保存" />
187
+ <Button fx:id="fxCancel" layoutX="461.0" layoutY="361.0" mnemonicParsing="false" text="F9 取消" />
188
+ </children>
189
+ </AnchorPane>
190
+
164
191
  ```

2

2019/09/08 06:58

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,6 @@
6
6
  DBへの接続は共通化しており、SQLの実行も共通化しています(書き方が怪しいですが)
7
7
  ### 発生している問題・エラーメッセージ
8
8
 
9
- javaFXのテキストには
10
9
  以下のmakerControlクラスのshowTableメソッドでエラーが発生しています。
11
10
  DBから取得した表(ObservableList)をTableViewへセットする際に発生しているようですが、デバッグモードで見ても表に値は入っているようです。
12
11
  どういった原因が考えられるでしょうか。

1

途中で送信されていました。申し訳ございません。

2019/09/03 07:50

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,24 +1,165 @@
1
+ JavaFXで、共通化したSQL実行から取得した表をTableViewに表示させたい
2
+
1
3
  ### 前提・実現したいこと
2
4
 
3
5
  postgeSQLとJavaFXを使って様々なデータを参照、登録できるようなシステムを作ろうとしています。
4
- javaFXテキストに
6
+ DBへ接続共通化しており、SQLの実行も共通化しています(書き方が怪しいですが)
5
-
6
7
  ### 発生している問題・エラーメッセージ
7
8
 
9
+ javaFXのテキストには
10
+ 以下のmakerControlクラスのshowTableメソッドでエラーが発生しています。
11
+ DBから取得した表(ObservableList)をTableViewへセットする際に発生しているようですが、デバッグモードで見ても表に値は入っているようです。
12
+ どういった原因が考えられるでしょうか。
8
13
  ```
14
+ Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
15
+ at com.stockon.maker.makerControl.showTable(makerControl.java:116)
9
- エラーメッセージ
16
+ (以下略)
10
17
  ```
11
18
 
12
19
  ### 該当のソースコード
20
+ 長くなりますので、関係ない箇所は省略しています。
21
+ ```Java
22
+ public class makerModel {
13
23
 
24
+ private String makerName;
25
+ private String makerNameShort;
26
+ private String makerComment;
27
+
28
+ public makerModel(String name, String nameShort, String comment) {
14
- ```ここに言語名を入力
29
+ this.makerName = name;
30
+ this.makerNameShort = nameShort;
15
- ソースコード
31
+ this.makerComment = comment;
32
+ }
33
+ }
16
34
  ```
35
+ ```Java
36
+ public class makerControl extends Application {
17
37
 
18
- ### 試したこと
38
+ // 画面項目
39
+ @FXML
40
+ private TableView<makerModel> tableView;
41
+ @FXML
42
+ public static TableColumn<makerModel, String> fxMakerName;
43
+ @FXML
44
+ public static TableColumn<makerModel, String> fxMakerNameShort;
45
+ @FXML
46
+ public static TableColumn<makerModel, String> fxMakerComment;
19
47
 
20
- ここに問題に対して試したことを記載してください。
48
+ public static ObservableList<makerModel> tableMaker = FXCollections.observableArrayList();
21
49
 
50
+ @Override
51
+ public void start(Stage stage) throws SQLException, ClassNotFoundException {
52
+ try {
22
- ### 補足情報(FW/ツールジョンなど)
53
+ // FXMLレイアウトをロ
54
+ AnchorPane root = FXMLLoader.load(getClass().getResource("makerView.fxml"));
23
55
 
56
+ // シーン生成
57
+ Scene scene = new Scene(root);
58
+
24
- ここにより詳細な情報を記載してください。
59
+ // タイトルセット
60
+ stage.setTitle("makerView");
61
+ stage.setScene(scene);
62
+
63
+ showTable(stage);
64
+
65
+ stage.show();
66
+
67
+ } catch (IOException ex) {
68
+ Logger.getLogger(makerControl.class.getName()).log(Level.SEVERE, null, ex);
69
+ }
70
+ }
71
+
72
+ public void showTable(Stage stage) throws SQLException, ClassNotFoundException {
73
+
74
+ String makerName = "";
75
+ String makerNameShort = "";
76
+ String makerComment = "";
77
+
78
+ makerModel mm = new makerModel();
79
+
80
+ // SQLを実行してList<Object>型で格納する
81
+ List<Object> arrayData = utilDB.executeSelectQuery("SELECT \"makerName\", \"makerNameShort\", \"makerComment\" FROM st_maker");
82
+
83
+ // List型→配列型
84
+ Object[] obj = arrayData.toArray();
85
+
86
+ int rowCount = arrayData.size();
87
+ for (int i = 0; i < rowCount; i++) {
88
+ String[] rowStr = new String[3];
89
+ rowStr = (String[]) obj[i];
90
+
91
+ //一行ずつ読み込む
92
+ for (int col = 0; col < rowStr.length; col++) {
93
+ // nullの場合は空文字に置き換える
94
+ if (null == rowStr[col]) {
95
+ rowStr[col] = "";
96
+ }
97
+ switch (col) {
98
+ case 0:
99
+ System.out.println("MakerName():" + rowStr[col]);
100
+ makerName = rowStr[col];
101
+ break;
102
+ case 1:
103
+ System.out.println("makerNameShort():" + rowStr[col]);
104
+ makerNameShort = rowStr[col];
105
+ break;
106
+ case 2:
107
+ System.out.println("makerComment():" + rowStr[col]);
108
+ makerComment = rowStr[col];
109
+ break;
110
+ }
111
+ }
112
+ // 一行ずつObservableListに追加する
113
+ tableMaker.add(new makerModel(makerName, makerNameShort, makerComment));
114
+ }
115
+ // TableViewに一覧をセットする
116
+ tableView.itemsProperty().setValue(tableMaker); // Line 116:ここでエラーが発生
117
+
118
+ fxMakerName.setCellValueFactory(new PropertyValueFactory<makerModel,String>(makerName));
119
+ fxMakerNameShort.setCellValueFactory(new PropertyValueFactory<makerModel,String>(makerNameShort));
120
+ fxMakerComment.setCellValueFactory(new PropertyValueFactory<makerModel,String>(makerComment));
121
+ }
122
+ }
123
+ ```
124
+ ```Java
125
+
126
+ public static List<Object> executeSelectQuery(String sql) throws SQLException, ClassNotFoundException {
127
+
128
+ // DBに接続する
129
+ connect();
130
+
131
+ // SQLの発行
132
+ resultSet = statement.executeQuery(sql);
133
+
134
+ // 値の取得
135
+ // フィールド一覧を取得
136
+ List<String> resultList = new ArrayList<String>();
137
+
138
+ List<Object> list = new ArrayList<Object>();
139
+
140
+ ResultSetMetaData data = resultSet.getMetaData();
141
+ int colCount = data.getColumnCount();
142
+ for (int i = 1; i <= colCount; i++) {
143
+ resultList.add(data.getColumnName(i));
144
+ }
145
+
146
+ //結果の出力
147
+ int rowCount = 0;
148
+ while (resultSet.next()) {
149
+
150
+ String[] ColArray = new String[colCount];
151
+
152
+ int col = 0;
153
+ for (String field : resultList) {
154
+ System.out.println(field + ":" + resultSet.getString(field));
155
+ ColArray[col] = resultSet.getString(field);
156
+ col++;
157
+ }
158
+ list.add(rowCount, ColArray);
159
+ rowCount++;
160
+ }
161
+ // DB切断
162
+ close();
163
+ return list;
164
+ }
165
+ ```