Hallo,
Ich möchte eine GUI für ein Kochrezepte Empfehlungssystem schreiben. Die GUI soll beim Start Zwei Textzeilen anzeigen, in die der Rezept Name bzw. der Name einer Zutat eingetragen werden können. Darunter soll eine Liste der Zutaten erscheinen, implementiert habe ich das als ListView. Ich habe ein paar Probleme: 1. Ich kriege es nicht hin, die beiden Textzeilen und die Liste der Zutaten direkt untereinander darzustellen. Bei einer Textzeile funktioniert das noch aber bei zweien nicht mehr.
2. Per click auf einen Button soll dem ListView dynamisch Elemente hinzugefügt werden. Diese sollen per anklicken wieder entfernt werden können. Bei letzterem Punkt weiß ich nicht, wie ich das implementieren soll.
Hier ist der bisherige Code.
[CODE lang="java" title="MainApplication"]import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class HelloApplication extends Application {
private ListView<String> ingredients;
@Override
public void start(Stage stage) {
initUI(stage);
}
public void registerAddIngredientButton(Button button){
button.setOnAction(actionEvent -> {
//TODO: to be completed
});
}
public GridPane setGridPane(){
GridPane root = new GridPane();
root.setHgap(8);
root.setVgap(8);
root.setPadding(new Insets(5));
ColumnConstraints cons1 = new ColumnConstraints();
cons1.setHgrow(Priority.NEVER);
root.getColumnConstraints().add(cons1);
ColumnConstraints cons2 = new ColumnConstraints();
cons2.setHgrow(Priority.ALWAYS);
root.getColumnConstraints().addAll(cons1, cons2);
RowConstraints rcons1 = new RowConstraints();
rcons1.setVgrow(Priority.NEVER);
RowConstraints rcons2 = new RowConstraints();
rcons2.setVgrow(Priority.ALWAYS);
root.getRowConstraints().addAll(rcons1, rcons2);
return root;
}
private void initUI(Stage stage) {
GridPane root = setGridPane();
Label recipeLabel = new Label("Recipe Name:");
TextField recipeName = new TextField();
TextField ingredientName = new TextField();
Label ingredientLabel = new Label("Ingredient Name:");
Button add_ingredient = new Button("Add Ingredient");
Button clear = new Button("Clear");
GridPane.setHalignment(add_ingredient, HPos.RIGHT);
ObservableList<String> names = FXCollections.observableArrayList();
ingredients = new ListView<String>(names);
root.add(recipeLabel, 0, 0);
root.add(recipeName, 1, 0, 3, 1);
root.add(ingredientLabel,0,1);
root.add(ingredientName,1,1,3,1);
root.add(ingredients, 0, 1, 4, 2);
root.add(add_ingredient, 2, 4);
root.add(clear, 3, 4);
Scene scene = new Scene(root, 880, 900);
stage.setTitle("Recipe Helper");
stage.setScene(scene);
stage.show();
//registerAddIngredientButton(add_ingredient);
}
public static void main(String[] args) {
launch(args);
}
}[/CODE]
Ich möchte eine GUI für ein Kochrezepte Empfehlungssystem schreiben. Die GUI soll beim Start Zwei Textzeilen anzeigen, in die der Rezept Name bzw. der Name einer Zutat eingetragen werden können. Darunter soll eine Liste der Zutaten erscheinen, implementiert habe ich das als ListView. Ich habe ein paar Probleme: 1. Ich kriege es nicht hin, die beiden Textzeilen und die Liste der Zutaten direkt untereinander darzustellen. Bei einer Textzeile funktioniert das noch aber bei zweien nicht mehr.
2. Per click auf einen Button soll dem ListView dynamisch Elemente hinzugefügt werden. Diese sollen per anklicken wieder entfernt werden können. Bei letzterem Punkt weiß ich nicht, wie ich das implementieren soll.
Hier ist der bisherige Code.
[CODE lang="java" title="MainApplication"]import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class HelloApplication extends Application {
private ListView<String> ingredients;
@Override
public void start(Stage stage) {
initUI(stage);
}
public void registerAddIngredientButton(Button button){
button.setOnAction(actionEvent -> {
//TODO: to be completed
});
}
public GridPane setGridPane(){
GridPane root = new GridPane();
root.setHgap(8);
root.setVgap(8);
root.setPadding(new Insets(5));
ColumnConstraints cons1 = new ColumnConstraints();
cons1.setHgrow(Priority.NEVER);
root.getColumnConstraints().add(cons1);
ColumnConstraints cons2 = new ColumnConstraints();
cons2.setHgrow(Priority.ALWAYS);
root.getColumnConstraints().addAll(cons1, cons2);
RowConstraints rcons1 = new RowConstraints();
rcons1.setVgrow(Priority.NEVER);
RowConstraints rcons2 = new RowConstraints();
rcons2.setVgrow(Priority.ALWAYS);
root.getRowConstraints().addAll(rcons1, rcons2);
return root;
}
private void initUI(Stage stage) {
GridPane root = setGridPane();
Label recipeLabel = new Label("Recipe Name:");
TextField recipeName = new TextField();
TextField ingredientName = new TextField();
Label ingredientLabel = new Label("Ingredient Name:");
Button add_ingredient = new Button("Add Ingredient");
Button clear = new Button("Clear");
GridPane.setHalignment(add_ingredient, HPos.RIGHT);
ObservableList<String> names = FXCollections.observableArrayList();
ingredients = new ListView<String>(names);
root.add(recipeLabel, 0, 0);
root.add(recipeName, 1, 0, 3, 1);
root.add(ingredientLabel,0,1);
root.add(ingredientName,1,1,3,1);
root.add(ingredients, 0, 1, 4, 2);
root.add(add_ingredient, 2, 4);
root.add(clear, 3, 4);
Scene scene = new Scene(root, 880, 900);
stage.setTitle("Recipe Helper");
stage.setScene(scene);
stage.show();
//registerAddIngredientButton(add_ingredient);
}
public static void main(String[] args) {
launch(args);
}
}[/CODE]