Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt

sserio

Bekanntes Mitglied
Sehr geehrte comunity, frage steht in dem Titel. Ich habe jetzt das grundsätzliche design fertig gemacht. Würde aber gerne meine Infromationen irgendwie in eine TableView Packen
package com.example.demo3;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class HelloApplication extends Application {
public static void main(String[] args) {
launch(args);
System.out.println("Application closed");
}

@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Tab Intiliasation");
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 340, 225);
TabPane tabPane = new TabPane();
Tab tab1 = new Tab("FirstTab");
Tab tab2 = new Tab("SecondTab");
tab1.setClosable(false);
tab2.setClosable(false);
tabPane.getTabs().addAll(tab1, tab2);
GridPane gridPane = new GridPane();
gridPane.setPadding(new Insets(15, 15, 15, 15));
gridPane.setVgap(10);
gridPane.setHgap(10);
Label vorname = new Label("Vorname");
Label nachname = new Label("Nachname");
Label von = new Label("von:");
Label bis = new Label("bis:");
TextField vornamenField = new TextField();
TextField nachnamenField = new TextField();
DatePicker datePicker1 = new DatePicker();
DatePicker datePicker2 = new DatePicker();
Button button = new Button("Beantragen");
gridPane.add(vorname, 0, 0);
gridPane.add(nachname, 0, 1);
gridPane.add(von, 0, 2);
gridPane.add(bis, 0, 3);
gridPane.add(vornamenField, 1, 0, 1, 1);
gridPane.add(nachnamenField, 1, 1, 1, 1);
gridPane.add(datePicker1, 1, 2);
gridPane.add(datePicker2, 1, 3);
gridPane.add(button, 1, 4, 1, 1);
ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setHgrow(Priority.NEVER);
ColumnConstraints columnConstraints1 = new ColumnConstraints();
columnConstraints1.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(columnConstraints, columnConstraints1);
AnchorPane anchorPane = new AnchorPane();
AnchorPane.setTopAnchor(gridPane, 10.0);
AnchorPane.setLeftAnchor(gridPane, 10.0);
AnchorPane.setRightAnchor(gridPane, 10.0);
anchorPane.getChildren().add(gridPane);
tab1.setContent(anchorPane);
TableView tableView = new TableView();
TableColumn columnVorname = new TableColumn("Vorname");
TableColumn columnNachname = new TableColumn("Nachname");
TableColumn columnVon = new TableColumn("Von:");
TableColumn columnBis = new TableColumn("Bis:");
tableView.getColumns().addAll(columnVorname, columnNachname, columnVon, columnBis);
AnchorPane anchorPane1 = new AnchorPane();
AnchorPane.setTopAnchor(tableView, 10.0);
AnchorPane.setLeftAnchor(tableView, 10.0);
AnchorPane.setRightAnchor(tableView, 10.0);
AnchorPane.setBottomAnchor(tableView, 10.0);
anchorPane1.getChildren().add(tableView);
tab2.setContent(anchorPane1);
button.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {

}
});
root.setCenter(tabPane);
stage.setScene(scene);
stage.show();
}

}
 
wo ist jetzt das problem ... du hast nen eventhandler.. du hast ne tableview... und 100 zielen code in einer methode

wo brennts denn
 
Du musst erstmal etwas bauen womit deine Table view umgehen kann

dann musst du ein objekt von dem erzeugen mit dem diene tableview umgehen kann und das fügst du ein
in dem du im eventhandler ein neues objekt erstellst und der tableview hinzufügst

 
Du musst erstmal etwas bauen womit deine Table view umgehen kann

dann musst du ein objekt von dem erzeugen mit dem diene tableview umgehen kann und das fügst du ein
in dem du im eventhandler ein neues objekt erstellst und der tableview hinzufügst

package com.example.demo3;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class HelloApplication extends Application {
public static void main(String[] args) {
launch(args);
System.out.println("Application closed");
}

@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Tab Intiliasation");
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 340, 225);
TabPane tabPane = new TabPane();
Tab tab1 = new Tab("FirstTab");
Tab tab2 = new Tab("SecondTab");
tab1.setClosable(false);
tab2.setClosable(false);
tabPane.getTabs().addAll(tab1, tab2);
GridPane gridPane = new GridPane();
gridPane.setPadding(new Insets(15, 15, 15, 15));
gridPane.setVgap(10);
gridPane.setHgap(10);
Label vorname = new Label("Vorname");
Label nachname = new Label("Nachname");
Label von = new Label("von:");
Label bis = new Label("bis:");
TextField vornamenField = new TextField();
TextField nachnamenField = new TextField();
DatePicker datePicker1 = new DatePicker();
DatePicker datePicker2 = new DatePicker();
Button button = new Button("Beantragen");
gridPane.add(vorname, 0, 0);
gridPane.add(nachname, 0, 1);
gridPane.add(von, 0, 2);
gridPane.add(bis, 0, 3);
gridPane.add(vornamenField, 1, 0, 1, 1);
gridPane.add(nachnamenField, 1, 1, 1, 1);
gridPane.add(datePicker1, 1, 2);
gridPane.add(datePicker2, 1, 3);
gridPane.add(button, 1, 4, 1, 1);
ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setHgrow(Priority.NEVER);
ColumnConstraints columnConstraints1 = new ColumnConstraints();
columnConstraints1.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(columnConstraints, columnConstraints1);
AnchorPane anchorPane = new AnchorPane();
AnchorPane.setTopAnchor(gridPane, 10.0);
AnchorPane.setLeftAnchor(gridPane, 10.0);
AnchorPane.setRightAnchor(gridPane, 10.0);
anchorPane.getChildren().add(gridPane);
tab1.setContent(anchorPane);
TableView<Urlaubsantag> tableView = new TableView<>();
TableColumn columnVorname = new TableColumn<Urlaubsantag, Object>("Vorname");
TableColumn columnNachname = new TableColumn("Nachname");
TableColumn columnVon = new TableColumn("Von:");
TableColumn columnBis = new TableColumn("Bis:");
tableView.getColumns().addAll(columnVorname, columnNachname, columnVon, columnBis);
AnchorPane anchorPane1 = new AnchorPane();
AnchorPane.setTopAnchor(tableView, 10.0);
AnchorPane.setLeftAnchor(tableView, 10.0);
AnchorPane.setRightAnchor(tableView, 10.0);
AnchorPane.setBottomAnchor(tableView, 10.0);
anchorPane1.getChildren().add(tableView);
tab2.setContent(anchorPane1);
button.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
Urlaubsantag urlaubsantag = new Urlaubsantag(vorname.getText(), nachname.getText(), datePicker1.getValue(), datePicker2.getValue());
tableView.getItems().add(urlaubsantag);
}
});
root.setCenter(tabPane);
stage.setScene(scene);
stage.show();
}

}
Habe es jetzt so versucht, die Werte werden dennoch nicht hinzugefügt
 
Du musst erstmal etwas bauen womit deine Table view umgehen kann

dann musst du ein objekt von dem erzeugen mit dem diene tableview umgehen kann und das fügst du ein
in dem du im eventhandler ein neues objekt erstellst und der tableview hinzufügst

schau mal bei meiner neusten antwort vorbei
 
mnja... du hast ja auch keine cellfactory gebaut wie im link beschrieben
 
ok gut.. KEINE AHNUNG was da wieder schief läuft.. war mein fehler hätte es genauer anschauen sollen also kurzer umschwenk....


ich habe meine Magie gewirkt

und selber probiert
ich fang so an
Java:
public class Launcher extends Application {
   public void start(Stage stage) {
      NamensProgramm program = new NamensProgramm();
      //Setting the scene
      Scene scene = new Scene(program.getRoot(), 595, 230);
      stage.setTitle("Table View Exmple");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}
mehr gehört auch NICHT in die start methode .... MACH KLASSEN

[CODE lang="java" title="das ist mein Objekt das in die Listview gespeichert wird"]class Zelle{
public StringProperty val = new SimpleStringProperty();
Zelle(String s ){
val.set(s);
}

}[/CODE]





Java:
class NamensProgramm{
 
  private Button addButton = new Button("name");
  private TableView<Zelle> table = new TableView<>();
  private VBox root = new VBox(addButton,table);
  private ZellenEinfueger<Zelle> einfueger = new ZellenEinfueger<>(table.getItems());
 
  NamensProgramm(){
    TableColumn<Zelle, String> nameCol = new TableColumn<>("Name");
    nameCol.setCellValueFactory(features -> features.getValue().val);
   
    table.getColumns().add(nameCol);
    addButton.onActionProperty().set(event -> einfueger.add(new Zelle("BOB")).add(new Zelle("Neuer Bob")));
  }
  VBox getRoot() {
    return root;
  }
 
}
hier wird die View zusammen gebaut und dem Button den eventhandler gegeben => der macht on action führ beim einfueger das aus und füg hinzu



[CODE lang="java" title="das bindings bidirectional musst du nicht sofort verstehen"]class ZellenEinfueger<TYP extends Zelle>{
ObservableList<TYP> list = FXCollections.observableArrayList();
ZellenEinfueger(ObservableList<TYP> list){
Bindings.bindContentBidirectional(this.list, list);
}
ZellenEinfueger<TYP> add(TYP... element){
list.addAll(element);
return this;
}
ZellenEinfueger<TYP> remove(TYP... element){
list.removeAll(element);
return this;
}
}[/CODE]
hier wird einer zweiten liste die exakt synchron mit der Liste in der Tableview ist gefüllt diese wird befüllt und damit automatisch auch die tableview liste


soooo und jetzt nochmal der ganze Code zum copy pasten... erstell ne datei Mit Launcher als name und copy paste das rein das funktioniert auch
[CODE lang="java" title="ganze programm"]/*
*
*/
package de.github.yfons.rapidfx.examples.HelloWorld;

import de.github.yfons.rapidfx.premade.UI.ContainerFactory;
import de.github.yfons.rapidfx.premade.UI.elements.BorderPaneContainer;
import de.github.yfons.rapidfx.premade.UI.elements.PaneContainer;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
* The Class Launcher.
*/
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
public class Launcher extends Application {
public void start(Stage stage) {
NamensProgramm program = new NamensProgramm();
//Setting the scene
Scene scene = new Scene(program.getRoot(), 595, 230);
stage.setTitle("Table View Exmple");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
class Zelle{
public StringProperty val = new SimpleStringProperty();
Zelle(String s ){
val.set(s);
}

}
class ZellenEinfueger<TYP extends Zelle>{
ObservableList<TYP> list = FXCollections.observableArrayList();
ZellenEinfueger(ObservableList<TYP> list){
Bindings.bindContentBidirectional(this.list, list);
}
ZellenEinfueger<TYP> add(TYP... element){
list.addAll(element);
return this;
}
ZellenEinfueger<TYP> remove(TYP... element){
list.removeAll(element);
return this;
}
}
class NamensProgramm{

private Button addButton = new Button("name");
private TableView<Zelle> table = new TableView<>();
private VBox root = new VBox(addButton,table);
private ZellenEinfueger<Zelle> einfueger = new ZellenEinfueger<>(table.getItems());

NamensProgramm(){
TableColumn<Zelle, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(features -> features.getValue().val);

table.getColumns().add(nameCol);
addButton.onActionProperty().set(event -> einfueger.add(new Zelle("BOB")).add(new Zelle("Neuer Bob")));
}
VBox getRoot() {
return root;
}

}

[/CODE]

ja ich hab mich kurz gehalten... frag mich explizit nachdem was du wissen willst ... bin im moment eher so auf "ich beantworte nur das was gefragt wird ansonsten wird wieder gemerkt schiene" ... solange ihc die fragen versteh versuch ich es zu beantworten


ich weis ja incht inwiefern du generics hattest...bindings... usw ...usw
 
ok gut.. KEINE AHNUNG was da wieder schief läuft.. war mein fehler hätte es genauer anschauen sollen also kurzer umschwenk....


ich habe meine Magie gewirkt

und selber probiert
ich fang so an
Java:
public class Launcher extends Application {
   public void start(Stage stage) {
      NamensProgramm program = new NamensProgramm();
      //Setting the scene
      Scene scene = new Scene(program.getRoot(), 595, 230);
      stage.setTitle("Table View Exmple");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}
mehr gehört auch NICHT in die start methode .... MACH KLASSEN

[CODE lang="java" title="das ist mein Objekt das in die Listview gespeichert wird"]class Zelle{
public StringProperty val = new SimpleStringProperty();
Zelle(String s ){
val.set(s);
}

}[/CODE]





Java:
class NamensProgramm{
 
  private Button addButton = new Button("name");
  private TableView<Zelle> table = new TableView<>();
  private VBox root = new VBox(addButton,table);
  private ZellenEinfueger<Zelle> einfueger = new ZellenEinfueger<>(table.getItems());
 
  NamensProgramm(){
    TableColumn<Zelle, String> nameCol = new TableColumn<>("Name");
    nameCol.setCellValueFactory(features -> features.getValue().val);
  
    table.getColumns().add(nameCol);
    addButton.onActionProperty().set(event -> einfueger.add(new Zelle("BOB")).add(new Zelle("Neuer Bob")));
  }
  VBox getRoot() {
    return root;
  }
 
}
hier wird die View zusammen gebaut und dem Button den eventhandler gegeben => der macht on action führ beim einfueger das aus und füg hinzu



[CODE lang="java" title="das bindings bidirectional musst du nicht sofort verstehen"]class ZellenEinfueger<TYP extends Zelle>{
ObservableList<TYP> list = FXCollections.observableArrayList();
ZellenEinfueger(ObservableList<TYP> list){
Bindings.bindContentBidirectional(this.list, list);
}
ZellenEinfueger<TYP> add(TYP... element){
list.addAll(element);
return this;
}
ZellenEinfueger<TYP> remove(TYP... element){
list.removeAll(element);
return this;
}
}[/CODE]
hier wird einer zweiten liste die exakt synchron mit der Liste in der Tableview ist gefüllt diese wird befüllt und damit automatisch auch die tableview liste


soooo und jetzt nochmal der ganze Code zum copy pasten... erstell ne datei Mit Launcher als name und copy paste das rein das funktioniert auch
[CODE lang="java" title="ganze programm"]/*
*
*/
package de.github.yfons.rapidfx.examples.HelloWorld;

import de.github.yfons.rapidfx.premade.UI.ContainerFactory;
import de.github.yfons.rapidfx.premade.UI.elements.BorderPaneContainer;
import de.github.yfons.rapidfx.premade.UI.elements.PaneContainer;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
* The Class Launcher.
*/
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
public class Launcher extends Application {
public void start(Stage stage) {
NamensProgramm program = new NamensProgramm();
//Setting the scene
Scene scene = new Scene(program.getRoot(), 595, 230);
stage.setTitle("Table View Exmple");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
class Zelle{
public StringProperty val = new SimpleStringProperty();
Zelle(String s ){
val.set(s);
}

}
class ZellenEinfueger<TYP extends Zelle>{
ObservableList<TYP> list = FXCollections.observableArrayList();
ZellenEinfueger(ObservableList<TYP> list){
Bindings.bindContentBidirectional(this.list, list);
}
ZellenEinfueger<TYP> add(TYP... element){
list.addAll(element);
return this;
}
ZellenEinfueger<TYP> remove(TYP... element){
list.removeAll(element);
return this;
}
}
class NamensProgramm{

private Button addButton = new Button("name");
private TableView<Zelle> table = new TableView<>();
private VBox root = new VBox(addButton,table);
private ZellenEinfueger<Zelle> einfueger = new ZellenEinfueger<>(table.getItems());

NamensProgramm(){
TableColumn<Zelle, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(features -> features.getValue().val);

table.getColumns().add(nameCol);
addButton.onActionProperty().set(event -> einfueger.add(new Zelle("BOB")).add(new Zelle("Neuer Bob")));
}
VBox getRoot() {
return root;
}

}

[/CODE]

ja ich hab mich kurz gehalten... frag mich explizit nachdem was du wissen willst ... bin im moment eher so auf "ich beantworte nur das was gefragt wird ansonsten wird wieder gemerkt schiene" ... solange ihc die fragen versteh versuch ich es zu beantworten


ich weis ja incht inwiefern du generics hattest...bindings... usw ...us
Das ist jetzt mein zweiter Tag mit JavaFx und das was du dort gemacht hast kommt plausibel rüber(außer das mit den Bindings). Außerdem fehlt mir glaube ich auch noch das Grundverständnis mit den ganzen Begriffen der Sdk. Generics kenne ich schon . Aber danke ich versuche mal bisschen weiter zu kommen. Wenn nicht dann wird man mal wieder nen Post von mir sehen
 
indem fall heißt
Bindings.bindContentBidirectional(list list)
dass der inhalt der einen liste immer genau so ausschaut wie der inhalt der anderen und umgekehrt


ich hab ein framework für javafx gebaut das nur mit bindings arbeitet alsoooooo joa bindings sind schon ne fancy sache
 
ein framework ist etwas das dir den umgang mit etwas leichter machen soll

EDIT
zb sowas kann mein framework
Java:
    HBox box = ContainerFactory.getBox(HBox::new)
        .add(new Button())
        .disable()
        .invisible()
        .toFront()
        .id("Bob")
        .get();
 
außerdem würde ich dir raten immer den deppen ansatz zu wählen... dh kein fancy drum her rum sondern den direktesten weg zu nehmen nennt man auch KISS keep it stupid simple aber deppen ansatz hat ne überzeugendere wirkung 😀
 
ok gut.. KEINE AHNUNG was da wieder schief läuft.. war mein fehler hätte es genauer anschauen sollen also kurzer umschwenk....


ich habe meine Magie gewirkt

und selber probiert
ich fang so an
Java:
public class Launcher extends Application {
   public void start(Stage stage) {
      NamensProgramm program = new NamensProgramm();
      //Setting the scene
      Scene scene = new Scene(program.getRoot(), 595, 230);
      stage.setTitle("Table View Exmple");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}
mehr gehört auch NICHT in die start methode .... MACH KLASSEN

[CODE lang="java" title="das ist mein Objekt das in die Listview gespeichert wird"]class Zelle{
public StringProperty val = new SimpleStringProperty();
Zelle(String s ){
val.set(s);
}

}[/CODE]





Java:
class NamensProgramm{
 
  private Button addButton = new Button("name");
  private TableView<Zelle> table = new TableView<>();
  private VBox root = new VBox(addButton,table);
  private ZellenEinfueger<Zelle> einfueger = new ZellenEinfueger<>(table.getItems());
 
  NamensProgramm(){
    TableColumn<Zelle, String> nameCol = new TableColumn<>("Name");
    nameCol.setCellValueFactory(features -> features.getValue().val);
  
    table.getColumns().add(nameCol);
    addButton.onActionProperty().set(event -> einfueger.add(new Zelle("BOB")).add(new Zelle("Neuer Bob")));
  }
  VBox getRoot() {
    return root;
  }
 
}
hier wird die View zusammen gebaut und dem Button den eventhandler gegeben => der macht on action führ beim einfueger das aus und füg hinzu



[CODE lang="java" title="das bindings bidirectional musst du nicht sofort verstehen"]class ZellenEinfueger<TYP extends Zelle>{
ObservableList<TYP> list = FXCollections.observableArrayList();
ZellenEinfueger(ObservableList<TYP> list){
Bindings.bindContentBidirectional(this.list, list);
}
ZellenEinfueger<TYP> add(TYP... element){
list.addAll(element);
return this;
}
ZellenEinfueger<TYP> remove(TYP... element){
list.removeAll(element);
return this;
}
}[/CODE]
hier wird einer zweiten liste die exakt synchron mit der Liste in der Tableview ist gefüllt diese wird befüllt und damit automatisch auch die tableview liste


soooo und jetzt nochmal der ganze Code zum copy pasten... erstell ne datei Mit Launcher als name und copy paste das rein das funktioniert auch
[CODE lang="java" title="ganze programm"]/*
*
*/
package de.github.yfons.rapidfx.examples.HelloWorld;

import de.github.yfons.rapidfx.premade.UI.ContainerFactory;
import de.github.yfons.rapidfx.premade.UI.elements.BorderPaneContainer;
import de.github.yfons.rapidfx.premade.UI.elements.PaneContainer;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
* The Class Launcher.
*/
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
public class Launcher extends Application {
public void start(Stage stage) {
NamensProgramm program = new NamensProgramm();
//Setting the scene
Scene scene = new Scene(program.getRoot(), 595, 230);
stage.setTitle("Table View Exmple");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
class Zelle{
public StringProperty val = new SimpleStringProperty();
Zelle(String s ){
val.set(s);
}

}
class ZellenEinfueger<TYP extends Zelle>{
ObservableList<TYP> list = FXCollections.observableArrayList();
ZellenEinfueger(ObservableList<TYP> list){
Bindings.bindContentBidirectional(this.list, list);
}
ZellenEinfueger<TYP> add(TYP... element){
list.addAll(element);
return this;
}
ZellenEinfueger<TYP> remove(TYP... element){
list.removeAll(element);
return this;
}
}
class NamensProgramm{

private Button addButton = new Button("name");
private TableView<Zelle> table = new TableView<>();
private VBox root = new VBox(addButton,table);
private ZellenEinfueger<Zelle> einfueger = new ZellenEinfueger<>(table.getItems());

NamensProgramm(){
TableColumn<Zelle, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(features -> features.getValue().val);

table.getColumns().add(nameCol);
addButton.onActionProperty().set(event -> einfueger.add(new Zelle("BOB")).add(new Zelle("Neuer Bob")));
}
VBox getRoot() {
return root;
}

}

[/CODE]

ja ich hab mich kurz gehalten... frag mich explizit nachdem was du wissen willst ... bin im moment eher so auf "ich beantworte nur das was gefragt wird ansonsten wird wieder gemerkt schiene" ... solange ihc die fragen versteh versuch ich es zu beantworten


ich weis ja incht inwiefern du generics hattest...bindings... usw ...usw
Wie importiert man etwas wenn diese imports garnicht in der JavaFx labrary sind. Damit meine ich die ersten 3 imports
 
uh die sind von mir von meinen klassen ... die kannst du weg löschen die haben 0 effekt

hatte eine test app mugeschrieben und da sind die übersehen wordne

das package musst du natürlich anpassen das muss da sein
 
uh die sind von mir von meinen klassen ... die kannst du weg löschen die haben 0 effekt

hatte eine test app mugeschrieben und da sind die übersehen wordne

das package musst du natürlich anpassen das muss da sein
also nochmal zu dem Code. Er funktioniert nicht, aufgrund von : Error: JavaFX runtime components are missing, and are required to run this application. Also jaa, außerdem, was bedeuten diese ... nach der variable TYP
 
Java:
 Error: JavaFX runtime components are missing, and are required to run this application.
dh deine module info und dein javafx import funktioniert nich

du weist dass jede "extends application" klasse in der module info als "exports xyz" drin stehen muss


die ... bedeuten dass eine beliebige anzahl bzw ein iterable übergeben werden kann.. is egal obs eine liste mehrere objekte sind oder ein array in der methjode wirds dann als array behandelt
 

Zurück
Oben