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.geometry.VPos; import javafx.collections.*; import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseButton; import javafx.scene.control.ContextMenu; import javafx.scene.input.ContextMenuEvent; public class UIBspListView04 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"); ContextMenu contextmenu = new ContextMenu(); 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\";"); MenuItem mnEdit = new MenuItem("Edit"); MenuItem mnDelete = new MenuItem("Delete"); MenuItem mnDeleteAll = new MenuItem("DeleteAll"); contextmenu.getItems().addAll(mnEdit, mnDelete, mnDeleteAll); mnEdit.setOnAction((ActionEvent e)->editSeletedItem()); mnDelete.setOnAction((ActionEvent e)->deleteSeletedItem()); mnDeleteAll.setOnAction(e->deleteAllItems()); // import javafx.scene.control.ContextMenu; // import javafx.scene.input.ContextMenuEvent; listviewPunkte.setOnContextMenuRequested(new EventHandler() { @Override public void handle(ContextMenuEvent event) { contextmenu.show( listviewPunkte, event.getScreenX(), event.getScreenY()); } }); listviewPunkte.setCellFactory((param) -> { return new PunkteCell(); }); listviewPunkte.setOnMouseClicked(e->listviewOnClick(e)); 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, 760, 600); stage.setTitle("UIBspListView04"); 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 listview, String caption, Button bnEdit, Button bnDelete, Button bnDeleteAll) { GridPane gridpaneparent = new GridPane(); gridpaneparent.setVgap(0); gridpaneparent.setHgap(0); gridpaneparent.setGridLinesVisible(true); // gridpaneparent.setPadding(new Insets(10) ); // TRBL ColumnConstraints column1 = new ColumnConstraints(); column1.setPercentWidth(100); ColumnConstraints column2 = new ColumnConstraints(); column2.setPercentWidth(30); gridpaneparent.getColumnConstraints().addAll(column1, column2); RowConstraints row1 = new RowConstraints(); row1.setPercentHeight(30); RowConstraints row2 = new RowConstraints(); row2.setPercentHeight(30); RowConstraints row3 = new RowConstraints(); row3.setPercentHeight(100); RowConstraints row4 = new RowConstraints(); row4.setPercentHeight(30); gridpaneparent.getRowConstraints().addAll(row1, row2, row3, row4); Label label = new Label(caption) ; label.setFont(new Font("Courier New",22)); gridpaneparent.add(label, 0, 0); // column=1 row=0 gridpaneparent.setMargin(label, new Insets(20, 0, 0, 10) ); // TRBL //listview.setMaxWidth(Double.POSITIVE_INFINITY); gridpaneparent.add(listview, 0, 1, 1,3); // column=1 row=0 gridpaneparent.setHgrow(listview, Priority.ALWAYS); gridpaneparent.setMargin(listview, new Insets(-20, 10, 10, 10) ); // TRBL bnEdit.setFont(new Font("Courier New",22)); gridpaneparent.add(bnEdit, 1, 1 ); // column=1 row=0 gridpaneparent.setMargin(bnEdit, new Insets(0, 10, 0, 10) ); // TRBL gridpaneparent.setValignment(bnEdit, VPos.TOP); gridpaneparent.setHalignment(bnEdit, HPos.RIGHT); bnDelete.setFont(new Font("Courier New",22)); gridpaneparent.add(bnDelete, 1, 2 ); // column=1 row=0 gridpaneparent.setMargin(bnDelete, new Insets(0, 10, 0, 10) ); // TRBL gridpaneparent.setValignment(bnDelete, VPos.CENTER); gridpaneparent.setHalignment(bnDelete, HPos.RIGHT); bnDeleteAll.setFont(new Font("Courier New",22)); gridpaneparent.add(bnDeleteAll, 1, 3 ); // column=1 row=0 gridpaneparent.setMargin(bnDeleteAll, new Insets(0, 10, 0, 10) ); // TRBL gridpaneparent.setValignment(bnDeleteAll, VPos.BOTTOM); gridpaneparent.setHalignment(bnDeleteAll, HPos.RIGHT); // --------------------------------------- return gridpaneparent; } 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; } //import javafx.scene.input.MouseEvent; //import javafx.scene.input.MouseButton; // int getClickCount() private void listviewOnClick(MouseEvent e) { // MIDDLE SECONDARY if (e.getButton()==MouseButton.PRIMARY && e.getClickCount()==2) { System.out.println("listviewOnClick() DoopelClick"); editSeletedItem(); } } private void editSeletedItem() { int index = listviewPunkte.getSelectionModel().getSelectedIndex(); if (index>=0 && index selectedItems = listviewPunkte.getSelectionModel().getSelectedItems(); //listviewPunkte.getItems().removeAll(selectedItems); // listviewPunkte.getItems().removeAll(selectedItems); listviewPunkte.getItems().remove(index); //listePunkte.removeAll(selectedItems); } 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; } } public 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 public static void main(String[] argv) { launch(argv); } }