当前位置: 首页 > 知识库问答 >
问题:

JavaFX表列,SceneBuilder未填充

李法
2023-03-14

我一直在看教程,我似乎无法得到一个表来填充。我也在使用net beans和scenebuilder。如有任何帮助,我们将不胜感激!挣扎了5个小时。

public class FXMLDocumentController implements Initializable {

    @FXML
    private TableView<Table> table;
    @FXML
    private TableColumn<Table, String> countriesTab;

    /**
     * Initializes the controller class.
     */

    ObservableList<Table> data = FXCollections.observableArrayList(
            new Table("Canada"),
            new Table("U.S.A"),
            new Table("Mexico")
    );

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        countriesTab.setCellValueFactory(new PropertyValueFactory<Table, String>("rCountry"));
        table.setItems(data);
    }
}

下面是的代码

class Table {
    public final SimpleStringProperty rCountry;


    Table(String country){
        this.rCountry = new SimpleStringProperty(country);
    }

    private SimpleStringProperty getRCountry(){
        return this.rCountry;

    }
}

以下是我的主要内容:

public class Assignment1 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

共有1个答案

麹高义
2023-03-14

对于PropertyValueFactory要查找属性,item类(在本例中为Table)需要Public作为访问修饰符,而不是package Private。返回属性的方法也需要public

此外,根据PropertyValueFactory工作所需的约定,返回属性本身的方法的正确名称为 property

此外,由于属性的实际类型是一个实现细节,因此使用StringProperty而不是SimpleStringProperty作为返回类型会更好

public class Table {

    private final SimpleStringProperty rCountry;

    public Table(String country){
        this.rCountry = new SimpleStringProperty(country);
    }

    public StringProperty rCountryProperty() {
        return this.rCountry;
    }
}

如果您使用这些修饰符来阻止对属性的写访问,则仍然可以通过使用ReadOnlyStringWrapper并返回ReadOnlyStringProperty来实现此效果:

public class Table {

    private final ReadOnlyStringWrapper rCountry;

    public Table(String country){
        this.rCountry = new ReadOnlyStringWrapper (country);
    }

    public ReadOnlyStringProperty rCountryProperty() {
        return this.rCountry.getReadOnlyProperty();
    }
}

如果根本没有对属性的写访问权限,只需为属性使用getter就足够了。在这种情况下,您根本不需要使用StringProperty:

public class Table {

    private final String rCountry;

    public Table(String country){
        this.rCountry = country;
    }

    public String getRCountry() {
        return this.rCountry;
    }
}
 类似资料:
  • 所以我要做的是,我要编写一个GUI来在LineChart上显示实时数据。到目前为止,我可以让linechart工作,但不能进入GUI。 使用scenebuilder,我制作了一个带有linechart对象的视图,以便将其链接到我生成的图表。但由于某些原因,这似乎不能与我的MainApp中的代码一起工作。 这只显示了带有空线程的视图。我知道图表应该知道然而,因为我可以使用它来创建一个场景,并显示到G

  • 我正在尝试用来自可观察列表的数据填充TableView。我以前做过这个,但由于某种原因我现在无法让它工作。我没有得到任何异常或任何东西,但它根本不会向表添加任何东西。 这个问题很相似,但我发现了JPA引起的另一个问题,这使得提到的的构造函数永远不会执行。相反,JPA会神奇地分配值。 这是我的代码-我剪下了与问题无关的代码: FXML 主要的Java语言 修改Java语言 任何帮助解决这个问题将不胜

  • 嗨,我有javafx tableview问题。我试过解决办法,但没能解决这个问题。有行,可以在行之间切换,但数据没有显示。我不明白问题出在哪里。你能帮我一下吗?

  • //控制器类Mainguicontroller.java

  • JavaFX Scene Builder没有正确地集成到IntelliJ IDE中。我让它在我的Windows7电脑上工作,但在我的mac电脑上,它给我带来了问题。首先,当我指定JavaFX场景构建器到/applications/scenbuilder/的路径时,它不会在IDE中显示场景。其次,当scene builder独立启动并修改intelliJ项目中的.xml文件时,生成的所有.xml在i