Tabelle nach JOptionPane updaten

Status
Nicht offen für weitere Antworten.
K

kriizz

Gast
Hallo...

ich hab nun echt keine Ahnung mehr wie ich das machen muss...
Mein Problem ist, dass ich Buttons in einer Tabelle habe.
Wenn ich auf den Button klicke, öffnet sich ein JOptionPane mit einer Abfrage ob man den Benutzer löschen möchte.
Dies ist alles kein Problem.. diese Methoden funktionieren so wie sie es sollen.

Nun soll, nach dem beim OP auf ja geklickt wurde und der Benutzer aus der DB gelöscht worden ist, die Tabelle aktualisiert werden, sodass der gelöschte Mitarbeiter nicht mehr drin steht.

Da hab ich nun schon mit setValueAt, Listenern etc rumprobiert.. ich bin zu doof dazu ^^

kann mri jemand helfen?
Hier der bereinigte Code, in der getCellEditorValue wird das JOptionPane ausgeführt.

Code:
package employees;



import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.border.*;
import javax.swing.ImageIcon;
 import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.TableCellRenderer;
import javax.swing.JScrollPane;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;



/**
 *
 * @author Administrator
 */
public class EmployeeEditGui extends JPanel {
    static Color color = new Color(255,220,164);
    static String[][] datenString = EmployeeEditData.selectData();
    static Object[][] daten = fillConent();
    
public static Object[][] fillConent() {
    int anz = 0;
    for(int i = 0; i< datenString.length; i++) {
        anz++;
    }
    Object[][] tableData = new Object[anz][3];
    for(int j = 0; j<anz; j++) {
        tableData[j][0] = datenString[j][1] + "," + datenString[j][0];
        tableData[j][1] = datenString[j][2];
        tableData[j][2] = datenString[j][2];
        
    }
    return tableData;
}


  private static class ButtonColumnEditor extends AbstractCellEditor implements TableCellEditor {
    private JButton theButton;

    public ButtonColumnEditor() {
      super();
      theButton = new JButton();
      
      
      theButton.setHorizontalAlignment(SwingConstants.LEFT);
      theButton.setHorizontalTextPosition(SwingConstants.LEFT);
      theButton.setPreferredSize(new Dimension(10,10));
      theButton.setBorderPainted(false);
      theButton.setOpaque(true);      
      theButton.setBackground(Color.WHITE);
      theButton.setContentAreaFilled(false);
      theButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {          
          fireEditingStopped();          
        }
      });
    }

    public Component getTableCellEditorComponent(JTable table, Object obj, boolean isSelected, int row, int col) {
      
      Boolean lValueAsBoolean = (Boolean)obj;
      theButton.setSelected(lValueAsBoolean.booleanValue());
      Object[][] ma = daten;
      theButton.setActionCommand(row+"|"+col);
      return theButton;
    }

    public Object getCellEditorValue() {
        String rowString = theButton.getActionCommand().substring(0, theButton.getActionCommand().indexOf("|"));
        int row = Integer.valueOf(rowString).intValue();
        String colString = theButton.getActionCommand().substring(theButton.getActionCommand().indexOf("|")+1);
        int col = Integer.valueOf(colString).intValue();
        
        String firstname = datenString[row][0];
        String surname = datenString[row][1];
        String directdialing = datenString[row][3];
        String email = datenString[row][2];
        String userid = datenString[row][4];
        
        if(col == 2) {
            int dialog = JOptionPane.showConfirmDialog(null, firstname+" "+surname+" wirklich löschen?","Löschen?",JOptionPane.YES_NO_OPTION);
      
            if(dialog == JOptionPane.YES_OPTION) {
            EmployeeEditData.deleteEmployee(userid,firstname+" "+surname);

            }
             // Hier brauche ich noch eine Methode, die die Tabelle updated...
     
        } else {
         
        JOptionPane.showMessageDialog(null,new EmployeeEditInsertGui(firstname,surname,directdialing,email),"MA",JOptionPane.PLAIN_MESSAGE);
            
            
        }

     
      return new Boolean(theButton.isSelected());
    }
  }

  private static class ButtonColumnRenderer extends JButton implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      if (value == null) {
        this.setSelected(false);
      }
      
      Boolean ValueAsBoolean = (Boolean)value;
      this.setSelected(ValueAsBoolean.booleanValue());
      if(column == 1){
      this.setIcon(new ImageIcon("src\\employees\\bearbeiten.gif"));
      this.setToolTipText("bearbeiten");
      } else {
      this.setIcon(new ImageIcon("src\\employees\\loeschen.png"));
      this.setToolTipText("löschen");
      }
      this.setHorizontalAlignment(SwingConstants.LEFT);
      this.setHorizontalTextPosition(SwingConstants.LEFT);
      
      
      this.setPreferredSize(new Dimension(10,10));
      this.setBorderPainted(false);
      this.setOpaque(true);
      if(row%2 == 0) {
      this.setBackground(Color.WHITE);
      } else {
      this.setBackground(color);
      }
      
      this.setContentAreaFilled(false); 
      
       
      return this;
    }
  }

  
  public class DefaultCellRenderer extends JLabel implements TableCellRenderer {
   public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column )
   {
    
     
    this.setText(""+value);
    this.setOpaque(true);
    //table.setRowHeight(row,100);
    if(row%2 == 0) {
      this.setBackground(Color.WHITE);
      } else {
      this.setBackground(color);
      }
    return this;
   }
  }
  
  
  
   
  private static class MyTableModel extends AbstractTableModel {
    private String[] columnNames = {"Mitarbeiter", "bearbeiten", "löschen"};
    private Object[][] data =  daten;
    private int selectedIndex = -1;
    

    public Object getValueAt(int rowIndex, int columnIndex) {
      if (columnIndex == 1 || columnIndex == 2) {
        return new Boolean(rowIndex == selectedIndex);
      } else {
        return data[rowIndex][columnIndex];
      }
    }

    public int getColumnCount() {
      return columnNames.length;
    }

    public int getRowCount() {
      return data.length;
    }
    

    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        if(columnIndex == 1 || columnIndex == 2) {
            return true;
        } else {
            return false;
        }
    }

    public Class getColumnClass(int c) {
      if (c == 1 || c == 2) return Boolean.class;
      
      return String.class;
    }

    public String getColumnName(int column) {
      return columnNames[column];
    }

    public void setValueAt(Object value, int row, int col) {
      if (col == 1 || col == 2) {
        int oldIndex = selectedIndex;
        selectedIndex = row;
        if (oldIndex != -1) {
          fireTableCellUpdated(oldIndex, col);
        }
        fireTableCellUpdated(row, col);
      } else {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
      }
      
    }
  }

 


    
    final EmployeeEditGui EmployeeEdit = this ;
public EmployeeEditGui() {
  Border border = new LineBorder(Color.BLACK);




    TableModel myModel = new MyTableModel();
    JTable table = new JTable(myModel);
    
    //table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    JScrollPane scrollPane = new JScrollPane(table);

    
    
    table.setPreferredScrollableViewportSize(new Dimension(500,300));
    table.setShowVerticalLines(false);
    table.getColumnModel().getColumn(2).setCellRenderer(new ButtonColumnRenderer());
    table.getColumnModel().getColumn(2).setCellEditor(new ButtonColumnEditor());
    table.getColumnModel().getColumn(1).setCellRenderer(new ButtonColumnRenderer());
    table.getColumnModel().getColumn(1).setCellEditor(new ButtonColumnEditor());
    table.getColumnModel().getColumn(0).setCellRenderer(new DefaultCellRenderer());
    table.getColumnModel().getColumn(1).setMaxWidth(30);
    table.getColumnModel().getColumn(2).setMaxWidth(30);
 
    JTableHeader header = table.getTableHeader();
    header.setVisible(false);
    scrollPane.setHorizontalScrollBarPolicy(scrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);   
    add(scrollPane);
       

    

}
}
 
S

SlaterB

Gast
versuch doch erstmal mit einem ganz normalen Button im Programm eine Zeile zu löschen,
dann sparst du dir oder zumindest dem Forum hunderte Zeilen ButtonColumnRenderer und wer weiß noch alles

-------

in MyTableModel musst du die Zeile löschen, was ist an dem Gedanken denn so schwierig?
wenn die Daten in einem Array stehen hast du natürlich ein gewisses Problem, ein Array kann man nicht kürzen,
also entweder alle bleibenden Zeilen in ein neues kleineres Array kopieren und das weiterbenutzen
oder die Daten in einer Liste speichern und daraus schlicht die fragliche Zeile entfernen
 

André Uhres

Top Contributor
Mach dir im TableModel eine Methode, die ungefähr sowas macht:
Code:
data.remove(row);
fireTableRowsDeleted(row, row);
 
G

Guest

Gast
SlaterB hat gesagt.:
in MyTableModel musst du die Zeile löschen, was ist an dem Gedanken denn so schwierig?


an dem Gedanken ist nichts schwer.. das war mir klar.. nru an der Umsetzung hapert es ganz gewaltig...
Naja dank euch beidne mal ich versuch aml mein Bestes :D
 
S

SlaterB

Gast
naja

> die Tabelle aktualisiert werden, sodass der gelöschte Mitarbeiter nicht mehr drin steht.

> Da hab ich nun schon mit setValueAt, Listenern etc rumprobiert..

klingt irgendwie anders als die konkrete deutsche Frage:
"ich habe ein TableModel, wie lösche ich eine Zeile daraus?" ;)

was sollte das mit setValueAt zu tun haben, das ändert doch nur einen Wert?
Listener haben auch keinen Einfluss, du bist ja schon in der Reaktion, musst nur die Daten aktiv ändern,

aber genug gelästert, voran im Galopp
 
G

Guest

Gast
Hehe... das liegt einfach daran, dass ich seit 6 Monaten JAVA programmiere und noch nicht so fit darin bin.
Also probiert man einfach mal alles und schaut ob es funktioniert.
Und wenn es dann funktioniert versteht man meistens auch die Funktionsweise.. so zumindest ist es bei mir
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
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
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
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
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
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
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
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

Ähnliche Java Themen

Neue Themen


Oben