2016-06-14 135 views
1

我剛開始使用javafx,我想創建一個TableView,其中有3列,可以顯示一些值。 我創建了TableView,並將場景編輯器的列創建爲fxml文件。 然後,我創建了一個名爲Values的類,並將其與我們匹配的列的特殊屬性匹配。 最後,我將可觀察列表中的「Value」對象設置爲表格的項目。當我啓動應用程序時,它只顯示一個空表。 我在網上看上去像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. 屬性getter,即一個方法SomeObservableValue <name>Property()
  2. 吸氣劑方法,即方法SomeType get<Name>()

您的Values類中沒有這些類。

對於psicolumn的工作,Values需要一個DoubleProperty PSIProperty()方法或double getPSI()方法。 (與其他列相同的問題)

+0

想通了!謝謝! –