Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 同一列中不同类型的对象_Java_Javafx - Fatal编程技术网

Java 同一列中不同类型的对象

Java 同一列中不同类型的对象,java,javafx,Java,Javafx,我有一个表格,显示了几次旅行的信息。其中一列是driver,它告诉谁被指定为某一行程的驾驶员。我想要实现的是,若并没有分配驱动程序(数据库中为null),那个么您应该能够单击特定单元格中的按钮并选择驱动程序 事实证明,这比我最初想象的更具挑战性。这就是想法: 我发现了下面的问题,但我不确定如何在我的系统中实现该解决方案。 我应该调查什么?是否有记录在案的方法来实现这一点 代码如下: public class BookViewController { private String d

我有一个表格,显示了几次旅行的信息。其中一列是driver,它告诉谁被指定为某一行程的驾驶员。我想要实现的是,若并没有分配驱动程序(数据库中为null),那个么您应该能够单击特定单元格中的按钮并选择驱动程序

事实证明,这比我最初想象的更具挑战性。这就是想法:

我发现了下面的问题,但我不确定如何在我的系统中实现该解决方案。

我应该调查什么?是否有记录在案的方法来实现这一点

代码如下:

public class BookViewController {

    private String dbUrl = "jdbc:postgresql://localhost:5432/BookingApp";
    private String dbUsername = "postgres";
    private String dbPassword = "secret";
    @FXML
    private TextField personnr;
    @FXML
    private TextField name;
    @FXML
    private TextField email;
    @FXML
    private TextField telnr;
    @FXML
    private Button addTraveler;
    @FXML
    private Button removeTraveler;
    @FXML
    private TableView<Traveler> travelers;
    @FXML
    private TableColumn<?, ?> personnrColumn;
    @FXML
    private TableColumn<?, ?> nameColumn;
    @FXML
    private TableColumn<?, ?> emailColumn;
    @FXML
    private TableColumn<?, ?> telnrColumn;
    @FXML
    private TableView<Trip> trips;
    @FXML
    private TableColumn<?, ?> originColumn;
    @FXML
    private TableColumn<?, ?> destinationColumn;
    @FXML
    private TableColumn<?, ?> departureColumn;
    @FXML
    private TableColumn<?, ?> arrivalColumn;
    @FXML
    private TableColumn<?, ?> driverColumn;
    @FXML
    private TableColumn<?, ?> priceAmountColumn;
    @FXML
    private TableColumn<?, ?> seatsColumn;
    @FXML
    private Button bookTrip;
    private Trip rowData;
    private ObservableList<Trip> tripData;

    protected void initialize(Trip rowData) {
        this.rowData = rowData;
        addTraveler.setDisable(true);
        removeTraveler.setDisable(true);
        populateTravelPlan();
    }

    @FXML
    private void populateTravelPlan() {
        originColumn.setCellValueFactory(new PropertyValueFactory<>("origin"));
        destinationColumn.setCellValueFactory(new PropertyValueFactory<>("destination"));
        departureColumn.setCellValueFactory(new PropertyValueFactory<>("departure"));
        arrivalColumn.setCellValueFactory(new PropertyValueFactory<>("arrival"));
        driverColumn.setCellValueFactory(new PropertyValueFactory<>("driver"));
        priceAmountColumn.setCellValueFactory(new PropertyValueFactory<>("priceAmount"));
        seatsColumn.setCellValueFactory(new PropertyValueFactory<>("seats"));        

        try {
            Connection conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
            tripData = FXCollections.observableArrayList();
            ResultSet rs = null;
            if(rowData.getTrip1() != 0 && rowData.getTrip2() == 0 && rowData.getTrip3() == 0) {
                rs = conn.createStatement().executeQuery(
                        "select trip.tripid, connexion.origin, connexion.destination, trip.departure, trip.arrival, trip.driverpnr, trip.priceamount, trip.seats\r\n" + 
                        "from trip, connexion\r\n" + 
                        "where trip.tripid = " + rowData.getTrip1() + "\r\n" + 
                        "and trip.connexionid = connexion.connexionid\r\n" + 
                        "order by departure;");
            } else if(rowData.getTrip1() != 0 && rowData.getTrip2() != 0 && rowData.getTrip3() == 0) {
                rs = conn.createStatement().executeQuery(
                        "select trip.tripid, connexion.origin, connexion.destination, trip.departure, trip.arrival, trip.driverpnr, trip.priceamount, trip.seats\r\n" + 
                        "from trip, connexion\r\n" + 
                        "where trip.tripid = " + rowData.getTrip1() + "\r\n" + 
                        "and trip.connexionid = connexion.connexionid\r\n" + 
                        "union\r\n" + 
                        "select trip.tripid, connexion.origin, connexion.destination, trip.departure, trip.arrival, trip.driverpnr, trip.priceamount, trip.seats\r\n" + 
                        "from trip, connexion\r\n" + 
                        "where trip.tripid = " + rowData.getTrip2() + "\r\n" + 
                        "and trip.connexionid = connexion.connexionid\r\n" + 
                        "order by departure;");
            } else if(rowData.getTrip1() != 0 && rowData.getTrip2() != 0 && rowData.getTrip3() != 0) {
                rs = conn.createStatement().executeQuery(
                        "select trip.tripid, connexion.origin, connexion.destination, trip.departure, trip.arrival, trip.driverpnr, trip.priceamount, trip.seats\r\n" + 
                        "from trip, connexion\r\n" + 
                        "where trip.tripid = " + rowData.getTrip1() + "\r\n" + 
                        "and trip.connexionid = connexion.connexionid\r\n" + 
                        "union\r\n" + 
                        "select trip.tripid, connexion.origin, connexion.destination, trip.departure, trip.arrival, trip.driverpnr, trip.priceamount, trip.seats\r\n" + 
                        "from trip, connexion\r\n" + 
                        "where trip.tripid = " + rowData.getTrip2() + "\r\n" + 
                        "and trip.connexionid = connexion.connexionid\r\n" + 
                        "union\r\n" + 
                        "select trip.tripid, connexion.origin, connexion.destination, trip.departure, trip.arrival, trip.driverpnr, trip.priceamount, trip.seats\r\n" + 
                        "from trip, connexion\r\n" + 
                        "where trip.tripid = " + rowData.getTrip3() + "\r\n" + 
                        "and trip.connexionid = connexion.connexionid\r\n" + 
                        "order by departure;");
            }
            if(rs.next()) {    
                tripData.add(new Trip(rs.getInt(1), rs.getString(2), rs.getString(3), ""+rs.getTimestamp(4), ""+rs.getTimestamp(5), rs.getString(6), ""+rs.getInt(7), ""+rs.getInt(8)));
                while(rs.next()) {
                    tripData.add(new Trip(rs.getInt(1), rs.getString(2), rs.getString(3), ""+rs.getTimestamp(4), ""+rs.getTimestamp(5), rs.getString(6), ""+rs.getInt(7), ""+rs.getInt(8)));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        trips.setItems(tripData);
    }
} 
公共类BookViewController{
私有字符串dbUrl=“jdbc:postgresql://localhost:5432/BookingApp";
私有字符串dbUsername=“postgres”;
私有字符串dbPassword=“secret”;
@FXML
私人文本字段人员;
@FXML
私有文本字段名;
@FXML
私人文本域电子邮件;
@FXML
私人TextField电话号码;
@FXML
私人按钮;
@FXML
专用按钮拆卸器;
@FXML
私人桌游旅行者;
@FXML
私有表列personnr列;
@FXML
私有表列名称列;
@FXML
私有表列和电子邮件列;
@FXML
私有表列telnr列;
@FXML
私人桌游;
@FXML
private TableColumn originColumn;
@FXML
私有表列destinationColumn;
@FXML
私有表列departureColumn;
@FXML
私有表列arrivalColumn;
@FXML
私有表列驱动器列;
@FXML
private TableColumn priceAmountColumn;
@FXML
私人桌柱座柱;
@FXML
私人按钮预订行程;
私人旅行数据;
私有可观测数据;
受保护的无效初始化(跳闸行数据){
this.rowData=rowData;
addTraveler.setDisable(true);
removeTraveler.setDisable(true);
普及计划();
}
@FXML
私有void平面图(){
originColumn.setCellValueFactory(新属性ValueFactory(“原点”);
destinationColumn.setCellValueFactory(新属性ValueFactory(“目标”);
departureColumn.setCellValueFactory(新属性ValueFactory(“离开”));
arrivalColumn.setCellValueFactory(新属性ValueFactory(“arrival”);
driverColumn.setCellValueFactory(新属性ValueFactory(“驱动程序”));
priceAmountColumn.setCellValueFactory(新的PropertyValueFactory(“priceAmount”);
SeatColumn.setCellValueFactory(新属性ValueFactory(“座椅”);
试一试{
Connection conn=DriverManager.getConnection(dbUrl、dbUsername、dbPassword);
tripData=FXCollections.observableArrayList();
结果集rs=null;
if(rowData.getTrip1()!=0&&rowData.getTrip2()==0&&rowData.getTrip3()==0){
rs=conn.createStatement().executeQuery(
“选择trip.tripid、connexion.origin、connexion.destination、trip.deposition、trip.arrival、trip.driverpnr、trip.priceamount、trip.seats\r\n”+
“从跳闸,连接\r\n”+
“where trip.tripid=“+rowData.getTrip1()+”\r\n”+
“and trip.connexionid=connexion.connexionid\r\n”+
“离境命令;”;
}else if(rowData.getTrip1()!=0&&rowData.getTrip2()!=0&&rowData.getTrip3()==0){
rs=conn.createStatement().executeQuery(
“选择trip.tripid、connexion.origin、connexion.destination、trip.deposition、trip.arrival、trip.driverpnr、trip.priceamount、trip.seats\r\n”+
“从跳闸,连接\r\n”+
“where trip.tripid=“+rowData.getTrip1()+”\r\n”+
“and trip.connexionid=connexion.connexionid\r\n”+
“联合\r\n”+
“选择trip.tripid、connexion.origin、connexion.destination、trip.deposition、trip.arrival、trip.driverpnr、trip.priceamount、trip.seats\r\n”+
“从跳闸,连接\r\n”+
“where trip.tripid=“+rowData.getTrip2()+”\r\n”+
“and trip.connexionid=connexion.connexionid\r\n”+
“离境命令;”;
}else if(rowData.getTrip1()!=0&&rowData.getTrip2()!=0&&rowData.getTrip3()!=0){
rs=conn.createStatement().executeQuery(
“选择trip.tripid、connexion.origin、connexion.destination、trip.deposition、trip.arrival、trip.driverpnr、trip.priceamount、trip.seats\r\n”+
“从跳闸,连接\r\n”+
“where trip.tripid=“+rowData.getTrip1()+”\r\n”+
“and trip.connexionid=connexion.connexionid\r\n”+
“联合\r\n”+
“选择trip.tripid、connexion.origin、connexion.destination、trip.deposition、trip.arrival、trip.driverpnr、trip.priceamount、trip.seats\r\n”+
“从跳闸,连接\r\n”+
“where trip.tripid=“+rowData.getTrip2()+”\r\n”+
“and trip.connexionid=connexion.connexionid\r\n”+
“联合\r\n”+
“选择trip.tripid、connexion.origin、connexion.destination、trip.deposition、trip.arrival、trip.driverpnr、trip.priceamount、trip.seats\r\n”+
“从跳闸,连接\r\n”+
“where trip.tripid=“+rowData.getTrip3()+”\r\n”+
“and trip.connexionid=connexion.connexionid\r\n”+
“离境命令;”;
}
如果(rs.next()){
添加(新行程)(rs.getInt(1)、rs.getString(2)、rs.ge
 driverColumn.setCellFactory(this::createDriverCell);

 private TableCell<Trip,String> createDriverCell(TableColumn<Trip, String> table) {
    return new TableCell<Trip, String>() {
        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);

            if (empty) {
              // configure empty
            } else if (item == null) {
              // create no driver content
            } else {
              // create different content
            }
        }           
    };
}
//give driverColumn proper types
TableColumn<Trip,String> driverColumn;
//...       

driverColumn.setCellValueFactory(new Callback<CellDataFeatures<Trip, String>, ObservableValue<String>>() {
   public ObservableValue<String> call(CellDataFeatures<Trip, String> p) {
        // p.getValue() returns the Trip instance for a particular TableView row
        return new SimpleStringProperty(p.getValue().getDriver());
    }
});
driverColumn.setCellFactory(param -> new TableCell<Trip,String>{
    public void updateItem(String driver, boolean empty) {
        super.updateItem(driver, empty);

        //reset any previous values, as cells may be reused
        setText(null);
        setGraphic(null);

        if(empty) {
            //contingency if cell is empty
        } else if(driver!=null) {
            setText(driver);
        } else {
            //driver is null
            Button b = new Button("Choose Driver");
            //... hook up button actions, etc
            setGraphic(b);
        }
    }
});
@Override
public void start(Stage primaryStage) {
    TableView<StringProperty> table = new TableView<>();

    // fill table
    for (int i = 0; i < 20; i++) {
        table.getItems().add(new SimpleStringProperty());
    }

    TableColumn<StringProperty, String> column = new TableColumn<>();
    column.setCellValueFactory(TableColumn.CellDataFeatures::getValue); // returns the row item itself
    column.setCellFactory(col -> new TableCell<StringProperty, String>() {

        private final Button button;

        {
            button = new Button("Set Value...");
            button.setOnAction(evt -> {
                TextInputDialog dialog = new TextInputDialog();
                Optional<String> opt = dialog.showAndWait();
                String result = opt.orElse(null);
                if (result != null) {
                    ObservableValue<String> ov = getTableColumn().getCellObservableValue(getIndex());
                    if (ov instanceof WritableValue) {
                        ((WritableValue) ov).setValue(result);
                    }
                }
            });
        }

        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);

            if (empty) {
                // empty cell
                setText("");
                setGraphic(null);
            } else {
                if (item == null) {
                    // editable cell
                    setText("");
                    setGraphic(button);
                } else {
                    // uneditable cell
                    setText(item);
                    setGraphic(null);
                }
            }
        }

    });

    table.getColumns().add(column);

    Scene scene = new Scene(table);

    primaryStage.setScene(scene);
    primaryStage.show();
}