誰かが私を助けたいと思うような場合には、私は多くのことに感謝します。私はJavaのnoobであり、単純な概念を学び、同時にコードをきれいにして、簡単に読むことができます。あなたがコーディングに間違ったアプローチをしているので、それが愚かな質問だと思うなら、私はあなたの意見を本当に気にします。今ComboboxのselectedItemを使ってオブジェクトを操作する方法
質問は次のとおりです。
私は人々のobservableListを含むmainAppですが持っていると私はしようとしていたので、イベント
public class MainApp extends Application {
private Stage primaryStage;
private BorderPane rootLayout;
private ObservableList<Evento> eventi = FXCollections.observableArrayList();
private ObservableList<Person> persons = FXCollections.observableArrayList();
public ObservableList<Evento> getEventi() {
return eventi;
}
public ObservableList<Person> getPersons() {
return persons;
}
public static void main(String[] args) {launch(args);}
public void start(Stage primaryStage){
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Bettator Events");
Person test = new Person("Daniele", "Giaquinto");
test.getEventi().add(new Evento("danEvento", 1.0, "testConto"));
persons.add(test);
Person test2 = new Person("Roberto", "Sellitto");
test2.getEventi().add(new Evento("robEvento", 31.0, "testCo"));
persons.add(test2);
initRootLayout();
showEventiLayout();
}
PersonオブジェクトのobservableListが、私は後にそれを作成し、あまりにもイベントのリストを持っています応答性の高いGUIを作成するため、この場合、1つのイベントリストではなく、すべての個人がイベントリストを持ちます。
public class Person {
private StringProperty firstName;
private StringProperty lastName;
private StringProperty nickName;
private ObservableList<Evento> eventi = FXCollections.observableArrayList();
は私がリスナーを使用して、コンボボックスを変更すると、のtableViewは、その人のオブジェクトのイベントのリストが取り込まれますEventyLayoutコンボボックスとのtableView、に作成された、私がやったことmainAppですイベントのリストを埋めますプロジェクトがpossibilitなしだった前に選択された人のイベント一覧
(EventiController)
public class EventiLayoutController {
private MainApp mainApp;
@FXML
private ComboBox<Person> utenteCmb;
@FXML
private TableView<Evento> eventiTbl;
@FXML
private TableColumn<Evento, String> eventoCol;
@FXML
private TableColumn<Evento, Double> importoCol;
@FXML
private TableColumn<Evento, String> contoCol;
@FXML
void initialize() {
eventoCol.setCellValueFactory(cellData -> cellData.getValue().nomeProperty());
importoCol.setCellValueFactory(cellData -> cellData.getValue().importoProperty().asObject());
contoCol.setCellValueFactory(cellData -> cellData.getValue().contoProperty());
utenteCmb.setCellFactory((comboBox) -> new ListCell<Person>() {
//cut for stackoverflow
});
utenteCmb.setConverter(new StringConverter<Person>() {
//cut for stackoverflow
});
utenteCmb.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
mainApp.getEventi().clear();
mainApp.getEventi().addAll(newValue.getEventi());
});
}
public void setMainApp(MainApp mainApp){
this.mainApp = mainApp;
eventiTbl.setItems(mainApp.getEventi());
utenteCmb.setItems(mainApp.getPersons());
}
}
とユーザーを切り替えるには、Y、iは
public class RootLayoutController {
private MainApp mainApp;
@FXML // ResourceBundle that was given to the FXMLLoader
private ResourceBundle resources;
@FXML // URL location of the FXML file that was given to the FXMLLoader
private URL location;
@FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() {
}
/**
* Needed for pass the MainApp to this controller ad use the public variable
*/
public void setMainApp(MainApp mainApp){
this.mainApp = mainApp;
}
/**
* Open dialog for add a new event, then add it to the event collection
*/
@FXML
private void handleAdd() {
Evento evento = new Evento();
boolean okClicked = mainApp.showEventiEditEditDialog(evento);
if (okClicked)
mainApp.getEventi().add(evento);
}
}
(ボタンを追加してくれのmenuBarメニュー項目を表示1は、ある)rootLayoutControllerで、mainAppですリストにイベントを追加するために「handleAddEvent」を作成したが、その後、私もっと深く学習しようとしましたが、そのイベントをperson->イベントに直接追加する必要があります。同じ関数を使用して追加しようとすると、mainAppイベントリストに追加され、personイベントリストには追加されませんたとえメインアプリの人物リストが人物イベントで満たされていても。
observableListをmainAppに渡す方法があるのか、それとも私の目的を達成するための簡単な方法があるのだろうかと思っていました。
RootLayoutControllerは、彼がイベントを追加しようとするとコンボボックスがあることを知らず、mainAppもコンボボックスがあることを知る必要はなかったので、selectedPersonを取得し、イベントリスト?
mainAppに「activePerson」を作成し、ユーザーがアイテムをコンボボックスに変更するたびに切り替える必要がありますか?しかし、それは私と "ハードコーディング"方法のようです。
どうすればよいですか?