Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt
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
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
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
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;
/**
* 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);
}
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;
/**
* 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);
}
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
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;
/**
* 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);
}
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
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
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