【问题标题】:JavaFX fill a table view not possible [duplicate]JavaFX不可能填充表格视图[重复]
【发布时间】:2016-10-15 01:51:45
【问题描述】:

我刚开始使用 javafx,我想创建一个带有 3 列的 TableView,我可以在其中显示一些值。 我创建了 TableView 和带有场景编辑器的列作为 fxml 文件。 然后,我创建了一个名为 Values 的类,其特殊属性与它们应该适合的列相匹配。 最后,我将其中包含“值”对象的可观察列表设置为表项。当我启动应用程序时,它只显示一个空表。 我现在在互联网上看起来像 4 个小时,但仍然没有找到为什么这对我不起作用的答案。

这是我的代码:

值类:

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>

感谢您的帮助!

【问题讨论】:

  • 您需要正确命名的值获取器或属性获取器。有关详细答案,请参阅链接的问题。
  • @sillyfly 感谢您的回答。我检查了另一个主题并稍微更改了我的代码,但它并没有解决我的问题
  • 如果您确定您有正确名称的值获取器,但它仍然不起作用,请使用更正的代码更新您的问题。

标签: java javafx tableview populate


【解决方案1】:

&lt;name&gt; 表示PropertyValueFactory 的构造函数参数,让&lt;Name&gt; 表示相同的String,但首字母大写。

PropertyValueFactory 可以从以下来源之一获取值:

  1. 属性getter,即a方法SomeObservableValue &lt;name&gt;Property()
  2. getter方法,即方法SomeType get&lt;Name&gt;()

Values 类中不存在这些。

要使psicolumn 工作,Values 需要DoubleProperty PSIProperty() 方法或double getPSI() 方法。 (其他列的问题相同)

【讨论】:

  • 想通了!谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2015-06-01
相关资源
最近更新 更多