2016-06-14 6 views
1

私はちょうどjavafxを使い始めました。私はTableViewを作成して、3つのカラムでいくつかの値を表示できるようにしたかったのです。 シーンエディタでfxmlファイルとしてTableViewとその列を作成しました。 次に、適切な列に一致する特別なプロパティを持つValuesというクラスを作成しました。 最後に、オブザーバブルリストにテーブルの項目として「値」オブジェクトを設定しました。アプリケーションを起動すると、空のテーブルだけが表示されます。 インターネットで4時間のように見えましたが、なぜこれが私にとってうまくいかないのか答えが見つからなかった。JavaFXでテーブルビューを作成できません

ここに私のコード:

値クラス:

public class Values { 
    public SimpleDoubleProperty PSI = new SimpleDoubleProperty(0); 
    public SimpleDoubleProperty ALPHA = new SimpleDoubleProperty(0); 
    public SimpleDoubleProperty DELTA = new SimpleDoubleProperty(0); 

    public Values(Double _PSI, Double _ALPHA, Double _DELTA) { 
     setPSI(_PSI); 
     setALPHA(_ALPHA); 
     setDELTA(_DELTA); 
    } 

    private void setPSI(Double p){ 
     PSI.set(p); 
    } 
    private void setALPHA(Double p){ 
     ALPHA.set(p); 
    } 
    private void setDELTA(Double p){ 
     DELTA.set(p); 
    } 

} 

コントローラー:

@FXML Label psi; 
@FXML Label alpha; 
@FXML Label delta; 


@FXML TextField betafield; 
@FXML TextField lambdafield; 
@FXML TextField lambdasatfield; 

@FXML TableView<Values> table; 
@FXML ObservableList<Values> oblist; 
@FXML TableColumn <Values,Double> psicolumn; 
@FXML TableColumn <Values,Double> alphacolumn; 
@FXML TableColumn <Values,Double> deltacolumn; 

@Override 
public void initialize(URL location, ResourceBundle resources) { 
    psicolumn.setCellValueFactory(new PropertyValueFactory<Values, Double>("PSI")); 
    alphacolumn.setCellValueFactory(new PropertyValueFactory<Values, Double>("ALPHA")); 
    deltacolumn.setCellValueFactory(new PropertyValueFactory<Values, Double>("DELTA")); 
} 

@FXML 
protected void buttonpressed(){ 
    try { 
     Calculation cal = new Calculation(Double.parseDouble(betafield.getText()), Double.parseDouble(lambdafield.getText()), Double.parseDouble(lambdasatfield.getText())); 
     alpha.setText("Alpha: " + " " + cal.calculateAlpha()); 
     delta.setText("Delta:"+ " " + cal.calculateDelta()); 
     psi.setText("Psi:"+ " " + cal.calculatePSI()); 
     table.setItems(FXCollections.observableArrayList(cal.calculateEvaluaiontable())); 
    }catch (NullPointerException e){ 
     e.printStackTrace(); 
    } 
} 

そして、私のFXML:あなたの助けのための

<Tab text="tab" fx:id="tabe"> 
    <content> 
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"> 
     <children> 
      <TableView layoutX="4.0" layoutY="4.0" prefHeight="192.0" prefWidth="370.0" fx:id="table"> 
       <columns> 
        <TableColumn prefWidth="120.0" text="PSI" fx:id="psicolumn" /> 
        <TableColumn prefWidth="120.0" text="ALPHA" fx:id="alphacolumn" /> 
        <TableColumn prefWidth="120.0" text="DELTA" fx:id="deltacolumn" /> 
       </columns> 
      </TableView> 
     </children> 
     </AnchorPane> 
    </content> 
</Tab> 

ありがとう!

+1

名前のついたバリューゲッターやプロパティゲッターが必要です。詳細な回答はリンクされた質問を参照してください。 – Itai

+0

@sillyflyあなたの答えに感謝します。私は他のトピックをチェックし、私のコードを少し変更しましたが、それは私の問題を解決しません –

+1

あなたが正しい名前でバリューゲッターを持っていて、それでも問題が解決しない場合は、 – Itai

答えて

2

<name>は、PropertyValueFactoryのコンストラクタパラメータを示し、<Name>は、同じStringを示しますが、大文字の最初の文字を示します。

PropertyValueFactoryは、次のいずれかのソースから値を取得することができる:

  1. 性ゲッター、すなわち方法SomeObservableValue <name>Property()
  2. ゲッター法、すなわち方法SomeType get<Name>()

あなたのValuesクラスには存在しません。

psicolumnが機能するには、ValuesDoubleProperty PSIProperty()メソッドまたはdouble getPSI()メソッドが必要です。 (他の列にも同じ問題があります)

+0

これが分かりました!ありがとう! –

関連する問題