2016-09-24 4 views
0

私は、どのような種類の電子デバイスを使用して、必要なソーラーパネルとバッテリーがどれくらいあるかをユーザーに尋ねるプロジェクトを持っています。JavaFXのGridPaneのTextAreaからのテキストの取得

情報を収集するために、私はTextAreaと可変数の行がある3つの列を持つgridPaneを使用します。 gridPaneの2行目と3行目に情報を収集する必要があります。

私はここで尋ねた別の質問で見つけた次の方法を使用します。

private void calculer(ActionEvent event) 
{ 
    double ampApp = 0; 
    double heureApp = 0; 
    double wattTotal = 0; 
    double nbJourAuto; 
    double heureSoleil; 
    int nbPanneau; 
    int nbBatterie; 
    String stringTemp; 

    for(int i =1; i < rangee; i++) 
    { 
     stringTemp = getNodeByRowColumnIndex(i, 1, gridApp).toString(); 
     ampApp += parseDouble(stringTemp); 
    } 

    for(int i =1; i < rangee; i++) 
    { 
     stringTemp = getNodeByRowColumnIndex(i, 2, gridApp).toString(); 
     heureApp += parseDouble(stringTemp); 
    } 

(それは私が "}" 行方不明がある知っている、方法の最初の部分のみです)

そして、ここではgetNodeByRowColumnIndexコードです:私はこの方法を試してみました

public Node getNodeByRowColumnIndex(final int row, final int column, GridPane gridPane) { 
    Node result = null; 
    ObservableList<Node> childrens = gridPane.getChildren(); 
    for(Node node : childrens) 
    { 
     if(gridPane.getRowIndex(node) == row && gridPane.getColumnIndex(node) == column) 
     { 
      result = node; 
      break; 
     } 
    } 
    return result; 
} 

、 java.lang.NullPointerExceptionを取得し続ける

誰もがこの問題を解決する方法を知っていますか?

編集:

ここで要求されたスタックトレース

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Node.fireEvent(Node.java:8411) 
at javafx.scene.control.Button.fire(Button.java:185) 
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
... 48 more 
Caused by: java.lang.NullPointerException 
at systemesolaire.FXMLDocumentController.getNodeByRowColumnIndex(FXMLDocumentController.java:111) 
at systemesolaire.FXMLDocumentController.calculer(FXMLDocumentController.java:81) 
... 58 more 

だとここで私は私の子供(私はFXMLファイルをSceneBuilderので、ここで使用されている)、ここで

<content> 
     <GridPane fx:id="gridApp" prefHeight="141.0" prefWidth="452.0"> 
      <columnConstraints> 
       <ColumnConstraints hgrow="SOMETIMES" maxWidth="226.0" minWidth="10.0" prefWidth="226.0" /> 
       <ColumnConstraints hgrow="SOMETIMES" maxWidth="146.0" minWidth="10.0" prefWidth="123.0" /> 
       <ColumnConstraints hgrow="SOMETIMES" maxWidth="113.0" minWidth="10.0" prefWidth="103.0" /> 
      </columnConstraints> 
      <rowConstraints> 
       <RowConstraints minHeight="40.0" prefHeight="40.0" vgrow="NEVER" /> 
       <RowConstraints minHeight="40.0" prefHeight="40.0" vgrow="NEVER" /> 
       <RowConstraints minHeight="40.0" prefHeight="40.0" vgrow="NEVER" /> 
      </rowConstraints> 
      <children> 
       <Label text=" Nom de l'appareil"> 
       <font> 
        <Font name="Anke" size="18.0" /> 
       </font> 
       </Label> 
       <Label text="Ampérage" GridPane.columnIndex="1"> 
       <font> 
        <Font name="Anke" size="14.0" /> 
       </font> 
       </Label> 
       <Label text="Heures utilisation" GridPane.columnIndex="2"> 
       <font> 
        <Font name="Anke" size="13.0" /> 
       </font> 
       </Label> 
       <TextArea prefHeight="200.0" prefWidth="200.0" promptText="Nom" GridPane.rowIndex="1" /> 
       <TextArea prefHeight="200.0" prefWidth="200.0" promptText="Amp" GridPane.columnIndex="1" GridPane.rowIndex="1" /> 
       <TextArea prefHeight="200.0" prefWidth="200.0" promptText="Heure" GridPane.columnIndex="2" GridPane.rowIndex="1" /> 
       <TextArea prefHeight="200.0" prefWidth="200.0" promptText="Nom" GridPane.rowIndex="2" /> 
       <TextArea prefHeight="200.0" prefWidth="200.0" promptText="Amp" GridPane.columnIndex="1" GridPane.rowIndex="2" /> 
       <TextArea prefHeight="200.0" prefWidth="200.0" promptText="Heure" GridPane.columnIndex="2" GridPane.rowIndex="2" /> 
      </children> 
     </GridPane> 
    </content> 

とをintialize方法ですと私のグリッドパネルに行を追加する方法

@FXML 
private void ajouteRangee(ActionEvent event) 
{ 

    TextArea nom = new TextArea(); 
    TextArea amp = new TextArea(); 
    TextArea heure = new TextArea(); 



    nom.setPromptText("Nom"); 
    amp.setPromptText("Amp"); 
    heure.setPromptText("heure"); 


    gridApp.addRow(rangee, nom, amp, heure); 
    gridApp.layout(); 
    rangee++; 

} 
+0

をコンポーネントを初期化するか?コンポーネントをGridPaneに追加するか...)。NullPointerにその子を渡すと仮定します。初期化されていません。 – GOXR3PLUS

+0

[NullPointerExceptionとは何か、それを修正する方法は?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) ) – fabian

+0

スタックトレースを追加しました – MrDjEnjoy

答えて

0

先生の助けを借りて答えを得ました。同じ問題があれば、ここで解決しました。

getColumnIndexのNullPointerExceptionが発生したため、この問題は回避されましたが、なぜこの例外が最初に発生したのかわかりません。

行と列の量が分かっているため、すべてのノードを検索して正しいノードを探す必要はありません。また、行ごとの子どもの数が同じであるため、特定の子を得るための論理的な方法があります。あなたは、この式(((rowIndexに+ 1)*と、リスト内の特定のオブジェクトに行あたりのオブジェクトの量を得ることができるので、ObservableListは、行右列左から子どもを取得

public TextArea getNodeByRowColumnIndex(final int row, final int column, GridPane gridPane) 
{ 

    ObservableList<Node> childrens = gridPane.getChildren(); 
    TextArea result = (TextArea) childrens.get((row*3)+column); 

    return result; 
} 

:ここではどのようです)あなたのオブジェクトである+どの列に)

そして、あなたは行って、TextAreaのテキストを取得することができます:我々は(どのように、どこ.....間違って起こっているかを知るためにスタックトレースを必要とする

stringTemp = getNodeByRowColumnIndex(i, 1, gridApp).getText(); 
関連する問題