2016-11-22 16 views
0

グリッドペインに行を挿入しようとしています。

どうすればいいですか?

さらに読み取り/情報/ effots:私はこれで行を追加することができましたGridpaneに行を挿入する

Start

から私のオリジナルメニューのレイアウトを取る

add.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      Peak thisPeak = new Peak(); 
      MenuPeak dispPeak = new MenuPeak(thisPeak); 
      int row = 1+thisPeak.peakCount(); 
      //psMenu.addRow(1+row); 
      psMenu.add(dispPeak.name,1,row,1,1); 
      psMenu.add(dispPeak.retTime,2,row,1,1); 
      psMenu.add(dispPeak.tol,3,row,1,1); 
     } 

    }); 

enter image description here

私は何人かの人々がのAddRowを使用して提案し、グーグルでみました。私はいくつかのバリエーションを試してみた(現在は1は、私が提供するスニペットでコメントアウトされ

これはちょうど見られるように、私のボタンを上書き終わる:。

enter image description here

は私が最終的にそれを挿入したいのですこのような(ハードコードされたピークの線)などのボタンの間に行:

enter image description here

はおそらくよりよい解決策があるが、私は要素のボタンを再度追加することによって、ある程度の成功を発見しましたもう一度、これはいくつかのランタイムエラーを生成していますまだ動作していますか?この

enter image description here

作った

add.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      Peak thisPeak = new Peak(); 
      MenuPeak dispPeak = new MenuPeak(thisPeak); 
      int row = thisPeak.peakCount(); 
      psMenu.addRow(1+row); 
      psMenu.add(dispPeak.name,1,row,1,1); 
      psMenu.add(dispPeak.retTime,2,row,1,1); 
      psMenu.add(dispPeak.tol,3,row,1,1); 
      row++; 
      psMenu.add(save,1,row,1,1); 
      psMenu.add(cancel,2,row,1,1); 
      psMenu.add(okay,3,row,1,1); 
     } 

    }); 

しかし、再び、実行時エラーが重複した子を追加不満。スレッド内

例外 "のJavaFXアプリケーションスレッド" java.lang.IllegalArgumentExcepti上:子供:子供複製 が追加さ:親=グリッドhgap = 10.0、VGAP = 10.0、alig nment = TOP_CENTER をjavafx.sceneで。 com.sun.javafx.collections.VetoableListDecorator.addで親の$ 2.onProposedChange(Parent.java:454) (VetoableListDeco rator.java:206)

EDIT:答えが正しいとの正確な実装私の修正は:

add.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      Peak thisPeak = new Peak(); 
      MenuPeak dispPeak = new MenuPeak(thisPeak); 
      int row = 1+thisPeak.peakCount(); 

      psMenu.setRowIndex(save,row); 
      psMenu.setRowIndex(cancel,row); 
      psMenu.setRowIndex(okay,row); 

      psMenu.addRow(row-1, dispPeak.name, dispPeak.retTime, dispPeak.tol); 

     } 

    }); 

答えて

1

彼らはすでにGridPaneの子であるが、あなたは、保存キャンセルし、[OK]ボタンを追加しています。代わりにそれらの子供の行を調整するだけです。またaddRowは行にノードを追加します。新しい行を「挿入」しません。あなたは可変引数パラメータに任意のノードを渡さない場合、この方法は、単純に(あなたが最初の列にピークのNode秒を開始したい場合は、例えばpsMenu.addRow(row, dispPeak.name, dispPeak.retTime, dispPeak.tol);を使用することができます)何もしません:

@Override 
public void handle(ActionEvent event) { 

    Peak thisPeak = new Peak(); 
    MenuPeak dispPeak = new MenuPeak(thisPeak); 
    int row = thisPeak.peakCount(); 

    // add new nodes 
    psMenu.add(dispPeak.name,1,row); 
    psMenu.add(dispPeak.retTime,2,row); 
    psMenu.add(dispPeak.tol,3,row); 
    row++; 

    // adjust row of buttons 
    GridPane.setRowIndex(save, row); 
    GridPane.setRowIndex(cancel, row); 
    GridPane.setRowIndex(okay, row); 
} 
+0

うわー!私はちょうどこれも考え出した。私はこの答えを受け入れています!ありがとうございました!私はそれでたくさん遊んでいた。私は、新しいアイテムを追加する前に、行インデックスを設定して、より良い動作を見つけました。私は新しいピークを追加するためにaddrowを使用していましたが、それはその行のボタンの後に挿入していました – Chemistpp