JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird

JavaMachtMichFertig

Neues Mitglied
Hallo Leute,

bin mit meinem Latein als Anfänger am Ende.

Mein Ziel ist es, auf eine MySQL – Datenbank mittels JavaFX – GUI zuzugreifen und einzelne Datensätze löschbar zu machen. Die Connection zur Datenbank funktioniert (Ping ist o.k.). Andere Spaltenwerte werden korrekt ausgelesen und angezeigt.

Das GUI wird angezeigt, aber in der Spalte Löschen wird kein Lösch-Button angezeigt. Warum? Wo ist mein Fehler?

Oder eine andere Herangehensweise: Wie kann ich einen in der Tabelle markierten Tupelzeileneintrag per Buttonklick löschen?

upload_2015-9-22_12-3-56.png

Bin für jeden Ratschlag dankbar!

Und wie kann ich den Code im Forum korrekt in seiner Form eingeben, damit er für andere besser lesbar ist? Ist meine erste Frage an die Community?

Ich erhalte keinerlei Fehlermeldungen in eclipse, arbeite auf einem Mac. Es kann höchstens sein, dass jetzt ein paar Klammern irgendwo beim rumkopieren fehlen.

Hier kommt jetzt der Code:
Java:
public class MainWindowController {

   @FXMLprivate TableView<DatenMySQLProperties> tableview;
   @FXMLprivate TableColumn<DatenMySQLProperties, Integer> colUF_ID;
   @FXMLprivate TableColumn<DatenMySQLProperties, String> colUF_Name;
   @FXMLprivate TableColumn<DatenMySQLProperties, Double> colUF_Faktor;
   @FXMLprivate TableColumn<DatenMySQLProperties, ButtonCell> colUF_Loesche;

   @FXMLprivate Button buAktualisieren;
   @FXMLprivate Button buLoeschen;
   @FXMLprivate Button buBeenden;

   Connection con = null;
   ResultSet rs = null;

   @FXML
   public void handlebuLoeschen() {
     buLoeschen.setOnAction(new EventHandler<ActionEvent>(){
       @Override
       publicvoid handle(ActionEvent event) {
         System.out.println("LOESCHE!");
         //Wie lautet hier der Befehl, um einen markierten
         //Datensatz anzusprechen und mit SQL aus MySQL zu löschen??
       }
     });
   }

   @FXML
   void initialize(){
     asserttableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'MYSQLconnection.fxml'.";

     colUF_ID.setCellValueFactory(p -> { returnp.getValue().uf_id.asObject(); });
     colUF_Name.setCellValueFactory(p -> { returnp.getValue().getUf_name(); });
     colUF_Faktor.setCellValueFactory(p -> { returnp.getValue().uf_faktor.asObject(); });

     //hier beginnen die Fehler!!! zur Lösung mittels Lösch-Button je Zeile
     colUF_Loesche.setCellValueFactory(p -> { returnp.getValue().getUf_loesche(); });

     // p -> new ButtonCell() );
     //gibt false zurück, weilüberhauptkeineverbindungbesteht, also entweder in dr Getter Bean allesdefiniern
     // p -> { return p.getTableColumn().visibleProperty(); }); //gibtlogischerweise, weilsichtbar true zurück
     /* new Callback<TableColumn.CellDataFeatures<DatenMySQLProperties, Boolean>,
     ObservableValue<Boolean>>() {
     @Override
     public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<DatenMySQLProperties, Boolean> p) {
     return new SimpleBooleanProperty(p.getValue() != null);
     } */
     // };
     //Endevoninitailize()
     //}

     //Problemeerstmalfxmldazubauen
     //hierentsteht die VerbindungzurKlasse MySQLAufrufVerbindung
     MySQLAufrufVerbindung objDbClass = new MySQLAufrufVerbindung();
     try{
       con = objDbClass.getConnection();
       buildData();
     } catch( ClassNotFoundException ce ){
       System.out.println("Mist1 //Fehler1 war, dass ich vergessen hatte, über Properties MySQL Build Path aufzurufen im Project");
       ce.printStackTrace();
     } catch( SQLException ce2 ){
       System.out.println("Mist2");
       ce2.printStackTrace();
     }
   }


   private ObservableList<DatenMySQLProperties> data;
   //mitdieserMethodekannichauf die Klasse DatenMySQLProperties zugreifen

   public void buildData(){
     data = FXCollections.observableArrayList();
     try{
       String SQL = "Select * from UmFaktor";
       ResultSet rs = con.createStatement().executeQuery(SQL);
       while( rs.next() ){
         //hierwerden die Daten in der while Schleifeausgelesen
         DatenMySQLProperties datenMySQL = new DatenMySQLProperties();
         datenMySQL.uf_id.set(rs.getInt("UF_ID"));
         datenMySQL.uf_name.set(rs.getString("UF_Name"));
         datenMySQL.uf_faktor.set(rs.getDouble("UF_Faktor"));
         //MUSS hier irgendwie der Lösch-Button definiert, eingefügt werden?? habe //ich hier irgendetwas vergessen?
         data.add( datenMySQL );
         tableview.setItems( data );
       }
     } catch(Exception e){
       e.printStackTrace();
       System.out.println("Error on Building Data");
     }
   }

   // Hier wird die Buttonzelle definiert
   class ButtonCell extends TableCell<Record, Boolean> {
     ButtonCell(){
       buLoeschen.setOnAction(new EventHandler<ActionEvent>(){
         @Override
         publicvoid handle(ActionEvent t) {
           /**
           * HIER MUSS ZUGRIFF aus MYSQL gegeben sein plus SQL Delete Abfrage
           */
         }
       });
     }
   }
}


Hier kommt noch die Bean:
Java:
package application;

import com.sun.prism.impl.Disposer.Record;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;

public class DatenMySQLProperties {
   //Bean
   public SimpleIntegerProperty uf_id = new SimpleIntegerProperty( );
   public SimpleStringProperty uf_name = new SimpleStringProperty( );
   public SimpleDoubleProperty uf_faktor = new SimpleDoubleProperty( );
   public ObservableValue<Boolean> uf_loesche = new SimpleBooleanProperty();

   public SimpleIntegerProperty getUf_id() {
     return uf_id;
   }

   public void setUf_id(SimpleIntegerProperty uf_id) {
     this.uf_id = uf_id;
   }

   public SimpleStringProperty getUf_name() {
     return uf_name;
   }

   public void setUf_name(SimpleStringProperty uf_name) {
     this.uf_name = uf_name;
   }

   public SimpleDoubleProperty getUf_faktor() {
     return uf_faktor;
   }

   public void setUf_faktor(SimpleDoubleProperty uf_faktor) {
     this.uf_faktor = uf_faktor;
   }

   //Hier kommt irgendwo der Fehler, kann man die Frage überhaupt mit so //einem Konstrukt lösen? Funktionieren tut es nämlich nicht
   public ObservableValue<application.ButtonCell> getUf_loesche() {
     class ButtonCell extends TableCell<Record, Boolean> {
       final Button cellButton = new Button("Delete");
       ButtonCell() {
         cellButton.setOnAction( new EventHandler<ActionEvent>() {
           @Override
           public void handle(ActionEvent event) {
             // TODO Auto-generated method stub
             ButtonCell.this.getTableView().getItems().get( ButtonCell.this.getIndex());
             System.out.println("Test");
           }
         });
       }
     }
     //return new Button(); funzt nicht
     //return uf_loesche; funzt nicht
   }

   public void setUf_loesche(SimpleBooleanProperty uf_loesche) {
     this.uf_loesche = uf_loesche;
   }
}
 
Zuletzt bearbeitet von einem Moderator:

CursedCookie

Mitglied
Verstehe ich das richtig, du willst den loschbutton von unten direkt in der Zeile haben die gelöscht werden soll, Un dicht die zeile(n) auswählen und dann den einen Knopf drücken?
 

JavaMachtMichFertig

Neues Mitglied
Eine von den beiden möglichen Ansätzen einer Lösung reicht, damit ich ein Verständnis für die Funktion in meinen Kopf bekomme ....

Lösung A: Es erscheint ein Löschbutton in jeder Zeile eines Datensatzes in der Spalte Löschen, wenn ich den dann klicke, wird der Datensatz gelöscht.

Lösung B: Ich markiere die Zeile mit dem zu löschenden Datensatz mit einem Mausklick und klicke dann auf den Löschbutton unten, der bereits in der GUI zu sehen ist und der Datensatz wird gelöscht.

Vielen Dank im Voraus ...
 

CursedCookie

Mitglied
Hmmm ich bin mehr der ulc Mensch, aber an der table könnte ein model hängen und entweder bekommst du über das model, oder über die table die selektierten Zeilen zurück. Würde zumindest mir logisch erscheinen.
Sag Bescheid falls du was findest
 

Tom299

Bekanntes Mitglied
Hier mal ein Code-Ausschnitt von mir:

Java:
        // Delete-Spalte
        colAction.setCellValueFactory(new PropertyValueFactory<IdentnummerVerlauf, String>("identnummerAlt"));
        colAction.setCellFactory(column -> new TableCell<IdentnummerVerlauf, String>(){
            public void updateItem(String string, boolean empty) {
                super.updateItem(string, empty);
                if (string == null || empty) {
                    setGraphic(null);
                }
                else {
                    String sIconDelete = "/icons/16/dialog-error.png";
                    Image imageIcon = new Image(getClass().getResourceAsStream(sIconDelete));
                    ImageView imageView = new ImageView(imageIcon);
                    imageView.setFitWidth(16);
                    imageView.setPreserveRatio(true);
                   
                    Button btnDelete = new Button("Löschen");
                    btnDelete.setUserData(getIndex());
                    btnDelete.setOnAction(new EventHandler<ActionEvent>() {
                        @Override
                        public void handle(ActionEvent event) {
                            Button btnSource = (Button)event.getSource();
                            int index = (int)btnSource.getUserData();
                            deleteIdentnummerverlauf(index);
                        }
                    });
                    btnDelete.setGraphic(imageView);
                    setGraphic(btnDelete);
                    setAlignment(Pos.CENTER);
                }
            }
        });

Das ImageIcon kannst du auch außerhalb erstellen und dann immer nur setzen, ist sicher performanter, aber zum Testen gehts so auch. IdentnummerVerlauf ist bei mir eine Klasse, da kannst du deine eigene Klasse unterbringen oder den entsprechenden Datentyp.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
E Daten aus sortierter Tabelle lesen AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
H Swing Saubere Erstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G Tabelle eine JList anziegen AWT, Swing, JavaFX & SWT 4
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
P Für den Inhalt einer Zelle (aus Tabelle) STRG-C anwenden AWT, Swing, JavaFX & SWT 2
D Zahlen mit nullen in einer Tabelle anzeigen AWT, Swing, JavaFX & SWT 2
W Probleme beim Erstellen einer Tabelle AWT, Swing, JavaFX & SWT 2
? Tabelle formatieren - auch ohne CellRenderer? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben