Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TableView,使用“setCellValueFactory”方法无效_Java_User Interface_Javafx - Fatal编程技术网

Java TableView,使用“setCellValueFactory”方法无效

Java TableView,使用“setCellValueFactory”方法无效,java,user-interface,javafx,Java,User Interface,Javafx,人员定义他们想要的行数,例如2。然后创建2行对象项集 public void initialize(URL location, ResourceBundle resources) { btnCreateShop.setOnAction(e -> validate(0)); ObservableList<String> options = FXCollections.observableArrayList(

人员定义他们想要的行数,例如2。然后创建2行对象项集

public void initialize(URL location, ResourceBundle resources) {
    btnCreateShop.setOnAction(e -> validate(0));
    ObservableList<String> options =
            FXCollections.observableArrayList(
                    "False", "True"
            );
    cbPermission.setItems(options);
    cbPermission.getSelectionModel().selectFirst();
    tbShopMaker.setDisable(true);

}

private void validate(int idValidate) { //This method basically ALLOWS the table to be intialized IF some random conditions are met.
    if(idValidate == 0){
        if(tfShopName.getText().trim().length() == 0){
             //stuff occurs... ignore this line and if statement
        }
        tbShopMaker.setDisable(false);
        initializeTableView();
    }
}

@FXML TableColumn tcRow1, tcRow2, tcRow3, tcRow4, tcRow5, tcRow6, tcRow7, tcRow8, tcRow9;
private void initializeTableView() {
    lblShopName.setText("Shop Name: " + tfShopName.getText());
    lblShopRows.setText("Shop Rows: " + tfShopRows.getText());
    final ObservableList<ItemSet> data = FXCollections.observableArrayList();
    for(int i=0;i<Integer.parseInt(tfShopRows.getText()); i++){
        data.add(new ItemSet());
    }

    tcRow1.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item1")
    );
    tcRow2.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item2")
    );
    tcRow3.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item3")
    );
    tcRow4.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item4")
    );
    tcRow5.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item5")
    );
    tcRow6.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item6")
    );
    tcRow7.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item7")
    );
    tcRow8.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item8")
    );
    tcRow9.setCellValueFactory(
            new PropertyValueFactory<ItemSet, Integer>("item9")
    );
    tblShop.getItems().setAll(data);
    tblShop.setEditable(true);
}
这是控制器中我的表视图类的代码。它根据用户输入的其他信息设置表的内容

下面是ItemSet模型

public class ItemSet {
    int[] items = new int[9];

    public ItemSet(int... args){
        for(int i = 0; i<args.length; i++){
            items[i] = args[i];
        }
    }
    public int getItem1(){
        return items[0];
    }
    public int getItem2(){
        return items[1];
    }
    public int getItem3(){
        return items[2];
    }
    public int getItem4(){
        return items[3];
    }
    public int getItem5(){
        return items[4];
    }
    public int getItem6(){
        return items[5];
    }
    public int getItem7(){
        return items[6];
    }
    public int getItem8(){
        return items[7];
    }
    public int getItem9(){
        return items[8];
    }
}

考虑到我刚刚从Swing迁移到JavaFX,我最近很难掌握设置内容的概念。我需要有关如何操作的指导或帮助。

这里是一个使用setCellValueFactory的完整示例。将其与您的代码进行比较,并尝试在您的代码中查找不起作用的代码:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ExampleApp extends Application
{

    @Override
    public void start( Stage stage )
    {

        TableView<ItemSet> tableView = initializeTableView();

        VBox grid = new VBox( 20 );
        grid.getChildren().addAll( tableView );

        Scene scene = new Scene( grid, 450, 250 );
        stage.setScene( scene );
        stage.show();
    }


    private TableView<ItemSet> initializeTableView()
    {
        final ObservableList<ItemSet> data = FXCollections.observableArrayList();
        for ( int i = 0; i < 4; i++ )
        {
            data.add( new ItemSet( 1, 2, 3, 4, 5, 6, 7, 8, 9 ) );
        }

        TableColumn<ItemSet, Integer> tcRow1 = new TableColumn<>( "tcRow1" );
        tcRow1.setCellValueFactory(
                new PropertyValueFactory<>( "item1" )
        );

        TableColumn<ItemSet, Integer> tcRow2 = new TableColumn<>( "tcRow2" );
        tcRow2.setCellValueFactory(
                new PropertyValueFactory<>( "item2" )
        );

        TableColumn<ItemSet, Integer> tcRow3 = new TableColumn<>( "tcRow3" );
        tcRow3.setCellValueFactory(
                new PropertyValueFactory<>( "item3" )
        );

        TableColumn<ItemSet, Integer> tcRow4 = new TableColumn<>( "tcRow4" );
        tcRow4.setCellValueFactory(
                new PropertyValueFactory<>( "item4" )
        );

        TableColumn<ItemSet, Integer> tcRow5 = new TableColumn<>( "tcRow5" );
        tcRow5.setCellValueFactory(
                new PropertyValueFactory<>( "item5" )
        );

        TableColumn<ItemSet, Integer> tcRow6 = new TableColumn<>( "tcRow6" );
        tcRow6.setCellValueFactory(
                new PropertyValueFactory<>( "item6" )
        );

        TableColumn<ItemSet, Integer> tcRow7 = new TableColumn<>( "tcRow7" );
        tcRow7.setCellValueFactory(
                new PropertyValueFactory<>( "item7" )
        );

        TableColumn<ItemSet, Integer> tcRow8 = new TableColumn<>( "tcRow8" );
        tcRow8.setCellValueFactory(
                new PropertyValueFactory<>( "item8" )
        );

        TableColumn<ItemSet, Integer> tcRow9 = new TableColumn<>( "tcRow9" );
        tcRow9.setCellValueFactory(
                new PropertyValueFactory<>( "item9" )
        );
        TableView<ItemSet> tableView = new TableView();
        tableView.getColumns().addAll( tcRow1, tcRow2, tcRow3, tcRow4, tcRow5, tcRow6, tcRow7, tcRow8, tcRow9 );
        tableView.getItems().setAll( data );
        tableView.setEditable( true );

        return tableView;
    }


    public static void main( String[] args )
    {
        launch( args );
    }


    public static class ItemSet
    {
        int[] items = new int[9];


        public ItemSet( int... args )
        {
            for ( int i = 0; i < args.length; i++ )
            {
                items[i] = args[i];
            }
        }


        public int getItem1()
        {
            return items[0];
        }


        public int getItem2()
        {
            return items[1];
        }


        public int getItem3()
        {
            return items[2];
        }


        public int getItem4()
        {
            return items[3];
        }


        public int getItem5()
        {
            return items[4];
        }


        public int getItem6()
        {
            return items[5];
        }


        public int getItem7()
        {
            return items[6];
        }


        public int getItem8()
        {
            return items[7];
        }


        public int getItem9()
        {
            return items[8];
        }
    }
}

它到底是怎么不起作用的?这会引起错误吗?还是别的什么?非常感谢。设置单元格列时出错。这是一个javafxfxml选项卡,所以我对它进行了更改,并将其添加到代码中。现在它工作了!