一切正常,但后来我添加了泛型,现在这个ClassCastException不断弹出,我不知道为什么。
****重要****
所以我也试着删除它,但这里出现了另一个问题。所有的值都打印出来直到牵引力控制柱。在此之后,所有的值都不显示事件,尽管除了其中一些值的数据类型之外,所有的值都是完全相同的。
public class MainGUI extends Application {
private static Stage stage;
@Override
public void start(Stage primaryStage) throws Exception {
stage = primaryStage;
Platform.setImplicitExit(false);
stage.setTitle("Westminster Rentals");
VBox mainLayout = new VBox();
Scene scene = new Scene(mainLayout, 1655,800);
Label heading1 = new Label("Welcome to Westminster Rentals");
heading1.setStyle("-fx-font-size: 32px; -fx-font-family: -apple-system, sans-serif;");
heading1.setPadding(new Insets(20,20,20,20));
//_____________________Search Tab__________________________________//
// search Tab will hold search bar, search button and rent button
HBox searchTab = new HBox();
searchTab.setStyle("-fx-spacing: 10px; -fx-padding: 20px");
JFXButton searchButton = new JFXButton("Search");
searchButton.setAlignment(Pos.CENTER);
searchButton.setStyle("-fx-padding: 20px;-fx-background-color: #6143d5; -fx-text-fill: #fff;");
JFXTextField searchBar = new JFXTextField();
searchBar.setPrefWidth(500);
searchBar.setStyle("-fx-padding: 20px;");
searchBar.promptTextProperty().setValue("Search....");
HBox rentTab = new HBox();
JFXButton rent = new JFXButton("Rent a car");
rent.setOnAction(e->{
RentGUI.showRentPage();
});
rent.setStyle("-fx-padding: 20px;-fx-background-color: #1ad541; -fx-text-fill: #fff;");
rentTab.getChildren().add(rent);
searchTab.getChildren().addAll(searchBar,searchButton, rentTab);
//_____________________Search Tab --END--_____________________________//
//Main Heading will hold a vertical alignment for heading1 and the searchTab Hbox to create embedded layout
VBox mainHeading = new VBox();
mainHeading.getChildren().addAll(heading1,searchTab);
//Table view and Table columns are used to build the table attribute of the app
// This needs to be done as below unless FXML is used to build the application
TableView<Vehicle> tableView = new TableView<>();
tableView.setEditable(false);
TableColumn<Vehicle, String> makeColumn = new TableColumn<>("Make");
makeColumn.setPrefWidth(150);
makeColumn.setCellValueFactory(data-> new SimpleStringProperty(data.getValue().getMake()));
TableColumn<Vehicle,String> modelColumn = new TableColumn<>("Model");
modelColumn.setPrefWidth(200);
modelColumn.setCellValueFactory(new PropertyValueFactory<>("model"));
TableColumn<Vehicle,String> plateNumColumn = new TableColumn<>("Plate Number");
plateNumColumn.setPrefWidth(200);
plateNumColumn.setCellValueFactory(new PropertyValueFactory<>("plateNumber"));
TableColumn<Vehicle,String> fuelTypeColumn = new TableColumn<>("Fuel Type");
fuelTypeColumn.setPrefWidth(200);
fuelTypeColumn.setCellValueFactory(new PropertyValueFactory<>("fuelType"));
TableColumn<Vehicle, BigDecimal> priceColumn = new TableColumn<>("Price Per Hour (USD)");
priceColumn.setPrefWidth(200);
priceColumn.setCellValueFactory(new PropertyValueFactory<>("pricePerHour"));
TableColumn<Vehicle,String> transmissionColumn = new TableColumn<>("Transmission");
transmissionColumn.setPrefWidth(200);
transmissionColumn.setCellValueFactory(new PropertyValueFactory<>("transmission"));
TableColumn carColumn = new TableColumn("Car");
carColumn.setPrefWidth(200);
carColumn.setCellValueFactory(new PropertyValueFactory("car"));
TableColumn<Car,Boolean> tractionControlColumn = new TableColumn<>("Traction Control?");
tractionControlColumn.setPrefWidth(200);
tractionControlColumn.setCellValueFactory(new PropertyValueFactory<>("tractionControl"));
TableColumn<Car,Boolean> appleCarPlayColumn = new TableColumn<>("Apple Car Play?");
appleCarPlayColumn.setPrefWidth(200);
appleCarPlayColumn.setCellValueFactory(data-> new SimpleBooleanProperty(data.getValue().hasAppleCarPlay()));
TableColumn <Car,String>parkingAssistanceColumn = new TableColumn<>("Parking Assistance?");
parkingAssistanceColumn.setPrefWidth(200);
parkingAssistanceColumn.setCellValueFactory(data-> new SimpleStringProperty(String.valueOf(data.getValue().hasParkingAssistant())));
TableColumn<Car,String> blindSpotAwarenessColumn = new TableColumn<>("Blind spot awareness?");
blindSpotAwarenessColumn.setPrefWidth(200);
blindSpotAwarenessColumn.setCellValueFactory(data-> new SimpleStringProperty(String.valueOf(data.getValue().hasBlindSpotAwareness())));
TableColumn bikeColumn = new TableColumn("Motorbikes");
bikeColumn.setPrefWidth(200);
bikeColumn.setCellValueFactory(new PropertyValueFactory("motorbike"));
TableColumn<Motorbike, Boolean> basketColumn = new TableColumn<>("Basket?");
basketColumn.setPrefWidth(200);
basketColumn.setCellValueFactory(data-> new SimpleBooleanProperty(data.getValue().hasBasket()));
TableColumn<Motorbike, Boolean> gyroColumn = new TableColumn<>("Gyroscopic Balance?");
gyroColumn.setPrefWidth(200);
gyroColumn.setCellValueFactory(data-> new SimpleBooleanProperty(data.getValue().hasGyroscopicBalance()));
carColumn.getColumns().addAll(tractionControlColumn,appleCarPlayColumn,parkingAssistanceColumn,blindSpotAwarenessColumn);
bikeColumn.getColumns().addAll(basketColumn,gyroColumn);
tableView.getColumns().addAll(makeColumn,modelColumn,plateNumColumn,fuelTypeColumn,priceColumn,transmissionColumn,carColumn,bikeColumn);
mainLayout.getChildren().addAll(mainHeading, tableView);
tableView.setItems(addTableItems());
stage.setScene(scene);
stage.show();
}
//addTableItems will create an observable list required to enter values into the table.
private ObservableList<Vehicle> addTableItems() throws UnknownHostException {
ObservableList<Vehicle> musicItem = FXCollections.observableArrayList();
for (Vehicle item: Database.getDatastore().find(Vehicle.class).asList()){
musicItem.addAll(item);
}
return musicItem;
}
public static void main(){
launch();
}
public static void showStage(){
stage.show();
}
}
public class Main extends Thread{
private static Scanner scanner = new Scanner(System.in);
private static Stage stage;
public static void main(String[] args) {
int userResponse;
RentalVehicleManager rentalVehicleManager = new WestminsterRentalVehicleManager();
Thread guiControlThread = new Thread(MainGUI::main);
guiControlThread.start();
}
}
假设我删除lambdas并放入新的PropertyValueFactory。然后错误消失,GUI工作
牵引力控制后的值不显示
TableView
(Vehicle
)的类型参数与用于某些列的第一个类型参数之间存在差异。这两个类型参数应该是匹配的。否则这样的事情就会发生。
由于vehicle
是tableview
的类型参数,编译器允许您将可分配给vehicle
的所有内容添加到该tableview
的items
列表中。
将basketcolumn
声明为tablecolumn
“告诉”编译器表中的所有项都是motorbike
的。由于这个原因,下面的代码段将在编译后的代码中产生相同的结果:
TableColumn basketColumn = new TableColumn("Basket?"); // note the use of the raw type here
basketColumn.setPrefWidth(200);
// note the hidden cast inserted here by the compiler based on the type parameter in the declaration
// this is the cause of the ClassCastException
basketColumn.setCellValueFactory(data -> new SimpleBooleanProperty(((Motorbike) data.getValue()).hasBasket()));
由于要将car
s和motorbike
s都放入TableView
中,因此需要返回一个基于CellValueFactory
s中的真实类型的结果:
TableColumn<Vehicle, Boolean> basketColumn = new TableColumn<>("Basket?");
basketColumn.setPrefWidth(200);
basketColumn.setCellValueFactory(data -> {
Vehicle item = data.getValue();
if (item instanceof Motorbike) {
return new SimpleBooleanProperty(((Motorbike) item).hasBasket());
} else {
return null; // put something else here, if you don't want empty cells for non Motorbikes
}
});
在您的代码中还有其他多个地方需要进行这样的更改。
我正在尝试从一个数据集创建一个TableView,该数据集由一个具有字符串值的双嵌套ArrayList组成。遗憾的是,我无法在TableView中显示所有值。行没有根据数据集进行编号。 internet的大多数解决方案都表明,我应该使用特定的对象实例。然而,我不是这样工作的。相反,我使用大小不确定的字符串矩阵。数据结构如下: 我最好的(但错误的)结果是通过以下代码实现的: 结果如下: 但是,该表不
我正在开发一个小型的玩具应用程序,以扩展我关于和的知识。我在本地网络中有一个MySQL服务器,我可以与之通信,一个简单的Tableview可以被填充、排序...等等。数据只显示给用户,没有编辑。一切都很干净。 问题是: > 大约有17万行10列,全部,要显示,这似乎很难在合理的时间内完成。查询是在启动时完成的,大约需要1.5分钟才能看到表。 而且内存占用非常大,没有填充Tableview的应用程序
我是JavaFX新手。我正在使用TableView并尝试将用户从字段Username和Password输入的数据放入表中。只是个测试程序。我得到下面的错误。
我正在尝试使用rails创建新项目,但它显示错误。我正在处理mac及其显示错误 $rails新特快专递
控制器代码 我想在表格视图中显示之前对数据做一些操作 像秋千 在摇摆,我喜欢这个,它工作得很好。 但不知道如何在tableview javafx上进行操作。
我正在尝试运行Spring Boot REST API应用程序,但遇到了404错误。 波姆。xml 我还尝试了,但没有成功。你能帮我解决这个问题吗? 如果我打http://localhost:8080/hello网址,然后我得到404。