先日コチラでお教えいただき TableViewにデータを表示させる事ができましたが
セル移動で エラー発生します。ただ エラー発生後も操作はできるのですが。
コレの対応について お教え願います。
『追記』ココカラ 2017/03/10 09:05
曖昧情報で失礼いたしました。
実は エラー発生の規則性を 見出す事はできませんでした。
現在分かっている事は 以下です。
- 行や列は どこでも発生すると 思われる
- 10回目位の移動時に 発生する事が多い
- 起動直後の数回(キー&マウス)は 発生した事がない
- カーソルキーで高速移動(左右上下)すると 発生頻度は高い
- マウスで隣接しないセルに移動させると 発生頻度は高い
- エラー発生後 引続き各種セル移動をした場合 再発頻度は低い
- Shift , Ctrl キー の 依存性は おそらく無いと思われる
『追記』ココマデ
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.handl
eSelectedCellsListChangeEvent(TableView.java:3054)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.clear
AndSelect(TableView.java:2423)
以下略(約60行)
この問題を解決できても 実装させたい機能はまだまだたくさんあり
JavaScriptで 書いていくには 難問続きになる事が予想されます。
例えば 次に着手予定のTextField埋め込み とか。
この際だから TableView周辺を Javaで書き jarに仕上げて
jjsを -cpオプションで コールする という手段も考えられます。( 各アプリは nashornで )
その方が得策なら 10数年ぶりに Javaを書くのもアリかなと思っていますが
すっかり忘れた言語ですので 旨くいかないと時間の無駄使いになりかねません。
ついでに この辺りのご助言も 頂けたら幸いです。
★★ 起動コマンド
"C:\Program Files\Java\jre1.8.0_121\bin\jjs.exe" -fx ./1000.js
FXML
1<?xml version="1.0" encoding="UTF-8"?> 2<?import javafx.scene.control.TableView?> 3<?import javafx.scene.layout.VBox?> 4<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"> 5 <children> 6 <TableView id="TB0000" fx:id="TB0000" prefHeight="200.0" prefWidth="200.0" /> 7 </children> 8</VBox>
javascript
1//============================================================================== 2var File = Java.type('java.io.File'); 3var FXMLLoader = Java.type('javafx.fxml.FXMLLoader'); 4var ComboBoxTableCell = Java.type('javafx.scene.control.cell.ComboBoxTableCell'); 5load('fx:base.js'); 6load('fx:fxml.js'); 7load('fx:controls.js'); 8var TB0000,Col000; 9//============================================================================== 10function file2URL(file){return new File(file).toURI().toURL();} 11//============================================================================== 12function start(stage){ 13 //-------------------------------------------- 14 var fxml = './1000.fxml'; 15 var root = FXMLLoader.load(file2URL(fxml)); 16 //-------------------------------------------- 17 TB0000 = root.lookup('#TB0000'); 18 //-------------------------------------------- 19 var Cds000 = [ 20 {'id':"CODE",'tx':"コード",'wd': 90,'ag':"CC",'inp':"V",'fw':"N",'bC':"240,240,240",'fC':" 30, 40, 50",'tp':'S','defV':'Z_9999'}, 21 {'id':"NAME",'tx':"名前", 'wd':120,'ag':"CL",'inp':"T",'fw':"N",'bC':"240,255,255",'fC':" 30, 40,120",'tp':'S','defV':'X'}, 22 {'id':"BRTH",'tx':"誕生日",'wd':108,'ag':"CC",'inp':"V",'fw':"N",'bC':"255,255,255",'fC':"180, 80,100",'tp':'D','defV':'X'}, 23 {'id':"AGES",'tx':"年齢", 'wd': 60,'ag':"CR",'inp':"V",'fw':"B",'bC':"255,255,255",'fC':" 0,100,180",'tp':'I','defV':'0'} 24 ]; // Column.Design 25 //-------------------------------------------- 26 var Dat000 = [ 27 ['A_1234','Tasogare','1980/01/01','36'], 28 ['B_5678','ほげ太郎','2010/01/01'] // 最終フィールド欠落 29 ]; // ソースは CSV.load や SQL.結果set の 予定故 文字列の2次元配列を 準備 30 //-------------------------------------------- 31 Col000 = setTBL(TB0000,Cds000,Dat000); 32 //-------------------------------------------- 33 stage.title = 'TEST'; 34 stage.setScene(new Scene(root)); 35 stage.show(); 36 //-------------------------------------------- 37 // toDo = 入力IF(Text,Combo),入力完了イベント,行内自動演算,err.Check,,,,,,集計行,新規行,行並替 38} 39//============================================================================== 40//ココから下は libTBL.js として 独立させる予定 41//============================================================================== 42var FXCollections = Java.type('javafx.collections.FXCollections') 43var aryAlg = []; 44 aryAlg['CC'] = 'CENTER;'; 45 aryAlg['CL'] = 'CENTER-LEFT;'; 46 aryAlg['CR'] = 'CENTER-RIGHT;'; 47var aryFnW = []; 48 aryFnW['N'] = 'normal;'; 49 aryFnW['B'] = 'bold;'; 50// 型(tp) = [ S(string) D(date/time) I(int) R(real) ] 51// 入力(in) = [ V(view) T(TextField) C(ComboBox) ] 52//============================================================================== 53function setTBL(TBL,aryCds,aryDat){ 54 //-------------------------------------------- 55 TBL.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 56 TBL.getSelectionModel().setCellSelectionEnabled(true); 57 TBL.setStyle("-fx-font-family:'Courier New',monospace;"); 58 TBL.setStyle("-fx-font-size:14;"); 59 TBL.setEditable(true); 60 //-------------------------------------------- 61 // column 62 var aryCol = []; 63 for(var cc=0;cc<aryCds.length;cc++){ 64 //------------------ 65 var _Cds = aryCds[cc]; 66 //------------------ 67 var styC = ''; 68 styC += '-fx-padding:2px 4px;'; // padding 69 styC += '-fx-alignment:' + aryAlg[_Cds.ag]; // alignment 70 styC += '-fx-font-weight:' + aryFnW[_Cds.fw] ; // フォント.weight 71 styC += '-fx-text-fill: rgb(' + _Cds.fC + ');'; // 前景色 72 //------------------ 73 var tCol = new TableColumn(_Cds.tx); // text 74 tCol.id = _Cds.id; // id (不要?) 75 tCol.prefWidth = _Cds.wd; // 幅 76 tCol.setStyle(styC); // スタイル 77 valFac(tCol,_Cds.inp,_Cds.tx); // cellValueFactory 78 //------------------ 79 TBL.getColumns().add(tCol); 80 aryCol.push(tCol); 81 //------------------ 82 } 83 //-------------------------------------------- 84 // data 85 var objDat = []; 86 for(var c0=0;c0<aryDat.length;c0++){ 87 var ob = {}; 88 for(var c1=0;c1<aryCds.length;c1++){ 89 if(aryDat[c0].length>c1){ 90 ob[aryCds[c1].tx] = aryDat[c0][c1]; 91 }else{ 92 ob[aryCds[c1].tx] = aryCds[c1].defV; 93 } 94 } 95 objDat.push(ob); 96 } 97 TBL.setItems(FXCollections.observableList(objDat)); 98 //-------------------------------------------- 99 return aryCol; 100 //-------------------------------------------- 101} 102//============================================================================== 103function valFac(tCol,inp,tx){ 104 if(inp=='V'){ 105 tCol.cellValueFactory = function(p){ 106 var x = p.getValue()[tx]; 107 return new ReadOnlyObjectWrapper(x); 108 } 109 } 110 if(inp=='T'){ 111 //tCol.cellValueFactory = ( /* TextField */ ); 112 } 113} 114//============================================================================== 115
回答1件
あなたの回答
tips
プレビュー