Класс "Автомобиль" - код выдает множество ошибок - Java
Формулировка задачи:
/*
С использованием компонентов JavaFX 2 необходимо создать Java приложение реализующее добавление, редактирование и удаление данных заданного по варианту типа
информации T(см. табл. 4.1). Данные отображать в виде таблицы. Реализовать поля ввода для добавления новых записей. Редактирование записей реализовать в таблице
(использовать CellValueFactory). Предусмотреть возможность загрузки информации из текстового файла и сохранения в текстовый файл. Данные столбца N отображать в виде
автоматически обновляющегося графика/диаграммы G(см. табл. 4.1).
Тип информации (см. ниже) Поле для отображенияN Тип графика/диаграммы G
C 3 StackedBarChart
C: Автомобиль(Марка, Год выпуска, Объем двигателя, Максимальная скорость);
*/
package lab5;
import javafx.application.Application;
import javafx.beans.property.SimpleFloatProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.HBox;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.scene.chart.*;
public class lab5 extends Application{
private TableView<Ccar> table = new TableView<Ccar>();
private final ObservableList<Ccar> data =
FXCollections.observableArrayList(
new Ccar("Mercedes", 2015, 2.5f, 250),
new Ccar("BMW", 2014, 2.0f, 220)
);
final HBox hb = new HBox();
ObservableList<PieChart.Data> pcData = FXCollections.observableArrayList();
PieChart chart = new PieChart();
public void updateChart(){
int i;
pcData.clear();
for (i = 0; i < data.size(); i++) {
pcData.add(new PieChart.Data(data.get(i).brand.getValue().toString(),
Double.parseDouble(data.get(i).year.getValue().toString())));
}
chart.setData(pcData);
}
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage stage){
Scene scene = new Scene(new Group());
stage.setTitle("Пример таблицы");
stage.setWidth(850);
stage.setHeight(550);
final Label label = new Label("Автомобили");
label.setFont(new Font("Arial", 20));
label.setMaxWidth(300);
table.setEditable(true);
data.addListener(new ListChangeListener<Ccar>() {
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Ccar> arg0) {
updateChart();
}
});
TableColumn brandcol = new TableColumn("Марка");
brandcol.setMinWidth(100);
brandcol.setCellValueFactory(
new PropertyValueFactory<Ccar,String>("brand"));
brandcol.setCellFactory(TextFieldTableCell.forTableColumn());
brandcol.setOnEditCommit(
new EventHandler<CellEditEvent<Ccar, String>>() {
@Override
public void handle(CellEditEvent<Ccar, String> event) {
((Ccar) event.getTableView().getItems().get(
event.getTablePosition().getRow())
).setBrand(event.getNewValue());
}
}
);
TableColumn yearcol = new TableColumn("Год выпуска");
yearcol.setMinWidth(100);
yearcol.setCellValueFactory(
new PropertyValueFactory<Ccar, String>("year"));
yearcol.setCellFactory(TextFieldTableCell.forTableColumn());
yearcol.setOnEditCommit(
new EventHandler<CellEditEvent<Ccar, String>>() {
@Override
public void handle(CellEditEvent<Ccar, String> event) {
((Ccar) event.getTableView().getItems().get(
event.getTablePosition().getRow())
).setYear(Integer.parseInt(event.getNewValue()));
}
}
);
TableColumn volumecol = new TableColumn("Объем");
volumecol.setMinWidth(100);
volumecol.setCellValueFactory(
new PropertyValueFactory<Ccar, String>("volume"));
volumecol.setCellFactory(TextFieldTableCell.forTableColumn());
volumecol.setOnEditCommit(
new EventHandler<CellEditEvent<Ccar, String>>() {
@Override
public void handle(CellEditEvent<Ccar, String> event) {
((Ccar) event.getTableView().getItems().get(
event.getTablePosition().getRow())
).setVolume(Float.parseFloat(event.getNewValue()));
}
}
);
TableColumn speedcol = new TableColumn("Скорость");
speedcol.setMinWidth(100);
speedcol.setCellValueFactory(
new PropertyValueFactory<Ccar, String>("speed"));
speedcol.setCellFactory(TextFieldTableCell.forTableColumn());
speedcol.setOnEditCommit(
new EventHandler<CellEditEvent<Ccar, String>>() {
@Override
public void handle(CellEditEvent<Ccar, String> event) {
((Ccar) event.getTableView().getItems().get(
event.getTablePosition().getRow())
).setSpeed(Integer.parseInt(event.getNewValue()));
}
}
);
table.setItems(data);
table.getColumns().addAll(brandcol, yearcol, volumecol, speedcol);
table.setMaxWidth(201);
final TextField addBrand = new TextField();
addBrand.setPromptText("Марка");
addBrand.setMaxWidth(brandcol.getPrefWidth());
final TextField addYear = new TextField();
addYear.setPromptText("Год");
addYear.setMaxWidth(yearcol.getPrefWidth());
final TextField addVolume = new TextField();
addVolume.setPromptText("Объем");
addVolume.setMaxWidth(volumecol.getPrefWidth());
final TextField addSpeed = new TextField();
addSpeed.setPromptText("Скорость");
addSpeed.setMaxWidth(volumecol.getPrefWidth());
final Button addButton = new Button("Add");
addButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
data.add(new Ccar(
addBrand.getText(),
Integer.parseInt(addYear.getText()),
Float.parseFloat(addVolume.getText()),
Integer.parseInt(addSpeed.getText())));
addBrand.clear();
addYear.clear();
addVolume.clear();
addSpeed.clear();
}
});
hb.getChildren().addAll(addBrand, addYear, addVolume, addSpeed, addButton);
hb.setSpacing(3);
hb.setMaxWidth(300);
final VBox vBox = new VBox();
vBox.setSpacing(5);
vBox.setPadding(new Insets(10, 0, 0, 10));
vBox.getChildren().addAll(label, table, hb);
vBox.setMaxWidth(300);
chart.setTitle("Автомобили");
chart.setPadding(new Insets(10, 0, 0, 10));
chart.setMaxWidth(400);
updateChart();
TilePane tilePane = new TilePane();
tilePane.getChildren().addAll(vBox, chart);
((Group) scene.getRoot()).getChildren().add(tilePane);
stage.setScene(scene);
stage.show();
}
public static class Ccar {
private final SimpleStringProperty brand;
private final SimpleIntegerProperty year;
private final SimpleFloatProperty volume;
private final SimpleIntegerProperty speed;
private Ccar(String nbrand, int nyear, float nvolume, int nspeed) {
this.brand = new SimpleStringProperty(nbrand);
this.year = new SimpleIntegerProperty(nyear);
this.volume = new SimpleFloatProperty(nvolume);
this.speed = new SimpleIntegerProperty(nspeed);
}
public String getBrand(){
return brand.get();
}
public void setBrand(String nbrand){
brand.set(nbrand);
}
public int getYear(){
return year.get();
}
public void setYear(int nyear){
year.set(nyear);
}
public float getVolume(){
return volume.get();
}
public void setVolume(float nvolume){
volume.set(nvolume);
}
public int getSpeed(){
return speed.get();
}
public void setSpeed(int nspeed){
speed.set(nspeed);
}
}
}Решение задачи: «Класс "Автомобиль" - код выдает множество ошибок»
textual
Листинг программы
stage.show();