import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.stage.Stage; import javafx.scene.text.TextAlignment; import javafx.scene.text.Font; import javafx.geometry.Pos; import javafx.geometry.Insets; import javafx.scene.layout.Border; import javafx.scene.layout.BorderStroke; import javafx.scene.layout.BorderStrokeStyle; import javafx.scene.layout.BorderWidths; import javafx.scene.paint.Color; import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.event.Event; import javafx.beans.value.*; // ChangeListener import javafx.collections.*; import javafx.geometry.HPos; import javafx.collections.*; public class UIBspListView03 extends Application { class PunkteCell extends ListCell { @Override protected void updateItem(Double item, boolean empty) { super.updateItem(item, empty); if (item!=null && !empty) { setText(item.toString()+" Pkt"); if (item<50) setTextFill(Color.RED); else setTextFill(Color.BLUE); } else { setText("--"); setTextFill(Color.BLACK); } } } // class PunkteCell private final ObservableList listePunkte = FXCollections.observableArrayList(); private ListView listviewPunkte = new ListView<>() ; private TextField tInput = new TextField("") ; private Button bnInsert = new Button("Punkteeingabe") ; private Button bnEdit = new Button("Edit"); private Button bnDelete = new Button("Delete"); private Button bnDeleteAll = new Button("DeleteAll"); private Button bnSave = new Button("Save") ; private Button bnEsc = new Button("Esc") ; @Override public void start(Stage stage) { BorderPane borderpane = new BorderPane(); Pane pane1 = createTextInputControl(tInput,bnInsert, "Eingabe"); borderpane.setTop(pane1); bnInsert.setOnAction(e->insertPunkte()); listviewPunkte.setItems(listePunkte ); listviewPunkte.setPlaceholder(new Label("Bitte etwas auswaehlen")); listviewPunkte.setStyle("-fx-font: 22px \"Serif\";"); listviewPunkte.setCellFactory((param) -> { return new PunkteCell(); }); listviewPunkte.setOnMouseClicked(e->listviewOnClick()); Pane pane = createListView(listviewPunkte , "Punktliste",bnEdit, bnDelete, bnDeleteAll); borderpane.setCenter(pane); listviewPunkte.getSelectionModel().selectedIndexProperty().addListener( new ChangeListener() { @Override public void changed( ObservableValue observableValue, Number number, Number number2) { showlistviewPunkte(number2); } }); bnEdit.setOnAction((ActionEvent e)->editSeletedItem()); bnDelete.setOnAction((ActionEvent e)->deleteSeletedItem()); bnDeleteAll.setOnAction(e->deleteAllItems()); Pane boxpane = getBottom(); borderpane.setBottom(boxpane); borderpane.setMargin(boxpane, new Insets(0, 0, 10, 0) ); // TRBL Scene scene= new Scene(borderpane, 660, 600); stage.setTitle("UIBspListView03"); stage.setScene(scene); stage.show(); } private Pane createTextInputControl(TextInputControl control, Button bn, String caption) { HBox hbox = new HBox(22); hbox.setFillHeight(true); hbox.setMaxWidth(Double.POSITIVE_INFINITY); Label label = new Label(caption) ; label.setFont(new Font("Courier New",22)); hbox.getChildren().add(label); hbox.setMargin(label, new Insets(5, 0, 0, 10) ); // TRBL control.setFont(new Font("Courier New",22)); control.setMaxWidth(Double.POSITIVE_INFINITY); hbox.getChildren().add(control); hbox.setHgrow(control, Priority.ALWAYS); hbox.setMargin(control, new Insets(0, 10, 0, 10) ); // TRBL bn.setFont(new Font("Courier New",22)); hbox.getChildren().add(bn); hbox.setMargin(bn, new Insets(5, 10, 0, 10) ); // TRBL return hbox; } private Pane createListView(ListView control, String caption, Button bnEdit, Button bnDelete, Button bnDeleteAll) { VBox vboxparent = new VBox(22); vboxparent.setFillWidth(true); vboxparent.setMaxHeight(Double.POSITIVE_INFINITY); Label label = new Label(caption) ; label.setFont(new Font("Courier New",22)); vboxparent.getChildren().add(label); vboxparent.setMargin(label, new Insets(20, 0, 0, 10) ); // TRBL HBox hbox = new HBox(22); hbox.setFillHeight(true); hbox.setMaxWidth(Double.POSITIVE_INFINITY); // control.setFont(new Font("Courier New",22)); // gibt es nicht ?? control.setMaxWidth(Double.POSITIVE_INFINITY); hbox.getChildren().add(control); hbox.setHgrow(control, Priority.ALWAYS); hbox.setMargin(control, new Insets(-20, 10, 10, 10) ); // TRBL VBox vbox = new VBox(22); vbox.setFillWidth(true); vbox.setMaxHeight(Double.POSITIVE_INFINITY); hbox.getChildren().add(vbox); bnEdit.setFont(new Font("Courier New",22)); vbox.getChildren().add(bnEdit); vbox.setMargin(bnEdit, new Insets(5, 0, 0, 10) ); // TRBL bnEdit.setAlignment(Pos.CENTER); //BASELINE_RIGHT); bnDelete.setFont(new Font("Courier New",22)); vbox.getChildren().add(bnDelete); vbox.setMargin(bnDelete, new Insets(5, 0, 0, 10) ); // TRBL bnDelete.setAlignment(Pos.CENTER); //BASELINE_RIGHT); bnDeleteAll.setFont(new Font("Courier New",22)); vbox.getChildren().add(bnDeleteAll); vbox.setMargin(bnDeleteAll, new Insets(5, 0, 0, 10) ); // TRBL bnDeleteAll.setAlignment(Pos.CENTER); vboxparent.getChildren().add(hbox); // --------------------------------------- return vboxparent; } private Pane createButtonBase(ButtonBase control) { HBox hbox = new HBox(22); hbox.setFillHeight(true); hbox.setMaxWidth(Double.POSITIVE_INFINITY); control.setFont(new Font("Courier New",22)); control.setMaxWidth(Double.POSITIVE_INFINITY); hbox.getChildren().add(control); hbox.setHgrow(control, Priority.ALWAYS); hbox.setMargin(control, new Insets(0, 10, 0, 10) ); // TRBL return hbox; } private Pane getBottom() { FlowPane boxpane = new FlowPane(20,20); boxpane.setAlignment(Pos.CENTER); boxpane.setMaxWidth(Double.POSITIVE_INFINITY); bnSave.setFont(new Font("Courier New",22)); bnSave.setMaxWidth(Double.POSITIVE_INFINITY); bnSave.setOnAction(e->saveData()); boxpane.getChildren().add(bnSave); boxpane.setMargin(bnSave, new Insets(0, 10, 0, 10) ); // TRBL bnEsc.setFont(new Font("Courier New",22)); bnEsc.setMaxWidth(Double.POSITIVE_INFINITY); bnEsc.setOnAction(e->Platform.exit()); boxpane.getChildren().add(bnEsc); boxpane.setMargin(bnEsc, new Insets(0, 10, 0, 10) ); // TRBL return boxpane; } private void listviewOnClick() { System.out.println("listviewOnClick()"); // int index = listviewPunkte.getSelectionModel().getSelectedIndex(); // errorBox(Integer.toString(index),"Hinweis"); } private void editSeletedItem() { int index = listviewPunkte.getSelectionModel().getSelectedIndex(); if (index>=0 && index selectedItems = listviewPunkte.getSelectionModel().getSelectedItems(); listePunkte.remove(index); } private void deleteAllItems() { listePunkte.clear(); } double getDoubleNumber(String str_zahl) { try { double zahl = Double.parseDouble(str_zahl); return zahl; } catch (NumberFormatException e) { return Double.NaN; } // try } // getDoubleNumber private void insertPunkte() { String str_pkt = tInput.getText().trim(); if (str_pkt.length()==0) { errorBox( "Bitte geben Sie eine Punktzahl ein","Hinweis"); tInput.requestFocus(); } else { double pkt = getDoubleNumber(str_pkt); if (Double.isNaN(pkt)) { errorBox("Die Punkteingabe ist keine Zahl","Hinweis"); tInput.requestFocus(); } else { //listePunkte.addAll(pkt); listviewPunkte.getItems().add(pkt); tInput.setText(""); tInput.requestFocus(); } } } // insertPunkte private void showlistviewPunkte(Number index) { System.out.println("listviewPunkte: index: "+ index); } private void saveData() { StringBuilder sb = new StringBuilder(100); ObservableList selectedItems = listviewPunkte.getItems(); for (Double pkt : selectedItems) { sb.append( Double.toString(pkt) ); sb.append(" , "); } sb.append(": "); System.out.println(sb.toString()); // tErg.setText(sb.toString()); } private String insertString(String message, String title, String vorgabe) { TextInputDialog dialog = new TextInputDialog(vorgabe); dialog.setTitle(title); dialog.setContentText(message); dialog.setHeaderText(title); dialog.setResizable(true); java.util.Optional result = dialog.showAndWait(); if (result.isPresent()) { return (String)result.get(); } else { return null; } } private void errorBox( String message, String title) { Dialog alert = new Alert(Alert.AlertType.ERROR,message); alert.setTitle(title); alert.setHeaderText(title); alert.setResizable(true); alert.show(); // a.setContentText(content); } // ErrorBox // INFORMATION CONFIRMATION ERROR NONE WARNING public static void main(String[] argv) { launch(argv); } }