Swing Mal wieder JTable Ansicht aktualisieren

Snape

Bekanntes Mitglied
Moin,
ich hänge gerade gedanklich fest und verstehe etwas nicht.
Zum Programm:
- JFrame mit drei JPanels: Button-Panel, Steuerungspanel, Positionspanel (mit JTable)
- Die Tabelle hat ein eigenes TableModel von mir verpasst bekommen und bekomt initial einen Dummy-Eintrag, der auch angezeigt wird.
- Jede Tabellenzeile wird durch ein eigenes Objekt dargestellt.
- Die Tabellenzeilen werden als List im TableModel verwaltet.
- Im Steuerungspanel möchte ich per Buttonklick Tabellenzeilen hinzufügen oder löschen.
- Das Hinzufügen per Button funktioniert im TableModel (Leereintrag der Liste hinzufügen), aber trotz Aufruf von fireTableDataChanged() im TableModel nach Hinzufügen des neuen Eintrags wird die Tabelle in der GUI nicht aktualisiert.
- Die Debugausgaben zeigen mir, dass die zusätzlichen Zeilen in der Liste / TableModel korrekt hinzugefügt wurden.
-> Die Anzeige in der GUI aktualisiert sich erst dann, wenn ich per Doppelklick in die eine (initiale) Tabellenzelle diese editiere. Plötzlich werden die hinzugefügten Zeilen angezeigt.

Wo ist mein Denkfehler, warum wird die GUI nicht sofort aktualisiert?
 

Harry Kane

Top Contributor
Ohne Code zu sehen, wird das ganze zum Blick in die Glaskugel.
Ist dein eigenes TableModel von DefaultTableModel oder AbstractTableModel abgeleitet?
 

Snape

Bekanntes Mitglied
Vom DefaultTableModel.

OK, dann hier mein Code:
Java:
import javax.swing.JOptionPane;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class EditableTableForm extends javax.swing.JFrame implements TableModelListener {

    /**
     * Creates new form EditableTableForm
     */
    public EditableTableForm() {
        initComponents();
        initComponents2();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jpList = new javax.swing.JPanel();
        jscrListe = new javax.swing.JScrollPane();
        jtList = new javax.swing.JTable();
        jpListControls = new javax.swing.JPanel();
        jbAddEntry = new javax.swing.JButton();
        jbDeleteEntry = new javax.swing.JButton();
        jpButtons = new javax.swing.JPanel();
        jbClose = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(400, 800));
        setName("Einkaufsliste"); // NOI18N
        getContentPane().setLayout(new java.awt.GridBagLayout());

        jpList.setMinimumSize(new java.awt.Dimension(350, 750));
        jpList.setPreferredSize(new java.awt.Dimension(350, 750));
        jpList.setLayout(new java.awt.BorderLayout());

        jscrListe.setViewportView(jtList);

        jpList.add(jscrListe, java.awt.BorderLayout.CENTER);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.weighty = 1.0;
        getContentPane().add(jpList, gridBagConstraints);

        jpListControls.setMinimumSize(new java.awt.Dimension(50, 100));
        jpListControls.setPreferredSize(new java.awt.Dimension(50, 100));
        jpListControls.setLayout(new java.awt.GridLayout(2, 0));

        jbAddEntry.setLabel("+");
        jbAddEntry.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbAddEntryActionPerformed(evt);
            }
        });
        jpListControls.add(jbAddEntry);

        jbDeleteEntry.setText("-");
        jbDeleteEntry.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbDeleteEntryActionPerformed(evt);
            }
        });
        jpListControls.add(jbDeleteEntry);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
        getContentPane().add(jpListControls, gridBagConstraints);

        jpButtons.setLayout(new java.awt.BorderLayout());

        jbClose.setText("Schliessen");
        jbClose.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbCloseActionPerformed(evt);
            }
        });
        jpButtons.add(jbClose, java.awt.BorderLayout.EAST);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
        gridBagConstraints.weightx = 1.0;
        getContentPane().add(jpButtons, gridBagConstraints);

        pack();
    }// </editor-fold>                       

    private void jbCloseActionPerformed(java.awt.event.ActionEvent evt) {                                       
        int iReturn = JOptionPane.showConfirmDialog(this, "Programm wirklich beenden?", "Bestätigung", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
        // 0 = OK; 1 = CANCEL
        switch (iReturn) {
            case JOptionPane.OK_OPTION:
                System.exit( 0 );
        }
    }                                      

    private void jbAddEntryActionPerformed(java.awt.event.ActionEvent evt) {                                          
        ((EditableTableModel)jtList.getModel()).addEmptyEntry();
        jtList.validate();
        jtList.repaint();
    }                                         

    private void jbDeleteEntryActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(EditableTableForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(EditableTableForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(EditableTableForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(EditableTableForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new EditableTableForm().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                    
    private javax.swing.JButton jbAddEntry;
    private javax.swing.JButton jbClose;
    private javax.swing.JButton jbDeleteEntry;
    private javax.swing.JPanel jpButtons;
    private javax.swing.JPanel jpList;
    private javax.swing.JPanel jpListControls;
    private javax.swing.JScrollPane jscrListe;
    private javax.swing.JTable jtList;
    // End of variables declaration                  

    private void initComponents2() {
        jtList.setModel(new EditableTableModel());
    }

    @Override
    public void tableChanged(TableModelEvent tme) {
        System.out.println("tableChanged aufgerufen");
    }
}
Java:
import java.util.ArrayList;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

/**
* Klasse fuer das Datenmodell der Liste
  */
public class EditableTableModel extends DefaultTableModel {

    private TableModelListener listener;
    private List<TableRow> entries;
    private final Class[] columnClasses = {String.class, Integer.class};
    private final String[] columnNames = {"Name", "Anzahl"};
   
    public EditableTableModel() {
        addEntry(new TableRow("Schuhe", 5, getEntries().size()));
    }

    @Override
    public int getRowCount() {
        System.out.println("Anzahl Zeilen: " + getEntries().size());
        return ( getEntries().size() );
    }

    @Override
    public int getColumnCount() {
        return columnClasses.length;
    }

    @Override
    public String getColumnName(int i) {
        return columnNames[ i ];
    }

    @Override
    public Class<?> getColumnClass(int i) {
        return columnClasses[ i ];
    }

    @Override
    public boolean isCellEditable(int i, int i1) {
        return true;
    }

    @Override
    public Object getValueAt(int row, int column) {
        Object value;
       
        switch ( column ){
            case 0: // Artikel
                value = ((TableRow)getEntries().get(row)).getPositionsName();
                break;
            case 1: // Anzahl
                value = ((TableRow)getEntries().get(row)).getAmount();
                break;
            default:
                value = null;
                break;
        }
        System.out.println("Value at row " + row + "; column " + column + ": " + value);
        return value;
    }

    @Override
    public void setValueAt(Object theValue, int row, int column) {
        TableRow relevantRow = (TableRow) getEntries().get(row);
        System.out.println("setValueAt() mit value " + theValue.toString() + "; row " + row + "; column " + column);
        switch (column){
            case 0: // Artkelname
                relevantRow.setPositionsName((String) theValue);
                break;
            case 1: // Menge
                relevantRow.setAmount((Integer) theValue);
                break;
        }
    }

    @Override
    public void addTableModelListener(TableModelListener tableModelListener) {
        listener = tableModelListener;
    }


    public List getEntries() {
        if ( entries == null )
            entries = new ArrayList<>();
        return entries;
    }

    public void setEntries(List entries) {
        this.entries = entries;
    }

    public void addEntry(TableRow newEntry){
        getEntries().add(newEntry);
        fireTableDataChanged();
    }
   
    public void addEmptyEntry(){
        getEntries().add(new TableRow());
        System.out.println("Anzahl Einträge neu: " + getEntries().size());
        fireTableDataChanged();
    }
   
}
Java:
/**
* Repräsentiert die einzelne Tabellenzeile
*/
public class TableRow {

    private String positionsName;
    private Integer amount;
    private Integer index;

    public TableRow(String artikel, int theAmount) {
        if ( artikel != null)
            positionsName = artikel;
        amount = theAmount;
    }
   
    public TableRow(String theName, int theAmount, int theIndex) {
        if ( theName != null)
            positionsName = theName;
        amount = theAmount;
        index = theIndex;
    }

    public TableRow() {
        positionsName = "";
        amount = 0;
        index = 0;
    }

    public String getPositionsName() {
        return positionsName;
    }

    public void setPositionsName(String positionsName) {
        this.positionsName = positionsName;
    }

    public Integer getAmount() {
        return amount;
    }

    public void setAmount(Integer amount) {
        this.amount = amount;
    }

    public Integer getIndex() {
        return index;
    }

    public void setIndex(Integer index) {
        this.index = index;
    }

}
 

Harry Kane

Top Contributor
Hm. Sieht ok aus.
Moment. Deine überschriebene addTableModelListener-Methode sieht verdächtig aus. So wie du sie implementiert hast, gibt es immer nur einen TableModelListener, nämlich den, den du als letztes hinzugefügt hast. Eine JTable registriert sich als TableModelListener beim TableModel, und wenn später ein weiterer Listener beim TableModel registriert wird, wird die JTable als Listener deregistriert und nicht mehr über Änderungen am Model informiert.
Schmeiss die addTableModelListener-Methode mal aus deinem TableModel raus.
 

Snape

Bekanntes Mitglied
Argh! Jetzt funktioniert es - so einfach. :eek: Danke!
Wobei ich mich dennoch frage: Wo bzw. wie registriert sich denn die JTable beim TableModel? Ich weise die JTable dem Model ja gar nicht explizit zu und die Methode war eigentlich eine Code-Leiche von einem fehlgeschlagenen Versuch, die JTable dem TableModel explizit zuzuweisen.
 

Harry Kane

Top Contributor
Wo bzw. wie registriert sich denn die JTable beim TableModel
JTable hat einen Konstruktor mit einem TableModel-Parameter, und ausserdem die Methode setModel, mit der man das Model einer bereits fertig konstruierten JTable setzen kann. In beiden Fällen registriert sich die JTable selbst beim TableModel als Listener.
Meine Ausführungen oben gingen zwar in die richtige Richtung, waren aber nur halb richtig. Richtig ist: die fireXXX-Methoden und die addTableModelListener-Methode sind in der AbstractTableModel-Klasse definiert. Diese Klasse hat auch eine interne Liste, in der die TableModelListener abgelegt werden. Bei Aufruf der fireXXX-Methoden wird über alle Einträge in der internen TableModelListener-Liste iteriert, und deren tableChanged-Methode aufgerufen. Wenn du die addTableModelListener-Methode überschreibst, wird die interne TableModelListener-Liste nie gefüllt, und Änderungen am TableModel werden nicht weitergegeben.
 

Snape

Bekanntes Mitglied
Ah ok. Das heißt, wenn ich die addTableModelListener-Methode überschreibe, sollte ich darin die von mir gewünschten Listener bedienen, so dass sie entsprechend individuell reagieren können, wenn z.B. ein fireTableDataChanged-Event aufgerufen wird. Also in der Form

myTableModel.addTableModelListener(this);

Im TableModel dann
Java:
public void addTableModelListener(TableModelListener tableModelListener) {
        listenerList.add(tableModelListener);
    }

    public void fireTableDataChanged(){
        for (int i = 0; i < listenerList.size(); i++) {
            TableModelListener tableModelListener = listenerList.get(i);
            tableModelListener.handleFireTableDataChanged();
        }
    }
Und in der Form-Klasse entsprechend eine Implementierung der handleFireTableDataChanged()-Methode.
Ich frage mich gerade: Macht man sowas und wenn ja wozu?
 

Harry Kane

Top Contributor
Nur, wenn man ein Observer pattern selber programmieren will.
In deinem Fall kannst du dir die Übung aber sparen, weil Swing schon alles mitbringt:
- Ein Observer bzw. Listener interface
- Ein Observable (in deinem Fall AbstractTableModel), was bereits einen Mechanismus zum registrieren und zum benachrichtigen von Observern bereitstellt.
Du musst dich lediglich um die korrekte IMplementierung der Observer/Listener-interfaces kümmern.
 

Snape

Bekanntes Mitglied
Nicht bzgl. Listener, momentan hakt es an anderer Stelle (JSpinner in Tabelle). Mal schauen ob ich selbst auf die Lösung komme, sonst poste ich das in einem separaten Thread.
Jetzt, wo ich Deinen Beitrag und meine Frage noch mal lese, verstehe ich auch nicht mehr, was ich da wissen wollte, die Sache ist ja klar und so, wie ich sie in der vorherigen Antwort schon dargestellt hatte. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O JTable zeigt die alte Daten wieder AWT, Swing, JavaFX & SWT 23
C Schon wieder JTable AWT, Swing, JavaFX & SWT 7
E wieder einmal JTable AWT, Swing, JavaFX & SWT 5
P JTable...mal wieder AWT, Swing, JavaFX & SWT 7
A Wie werde ich beim JTable die Selection wieder los? AWT, Swing, JavaFX & SWT 6
C JTable. Mal wieder AWT, Swing, JavaFX & SWT 10
R Mal wieder JTable AWT, Swing, JavaFX & SWT 11
J Spalte in JTable aus- und wieder einblenden AWT, Swing, JavaFX & SWT 10
G TableModel von JTable wieder entfernen AWT, Swing, JavaFX & SWT 10
richis-fragen Wie kann man den RowSorter dazu bringen die ursprünglich liste wieder anzuzeigen. AWT, Swing, JavaFX & SWT 28
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
R JOptionPane schließt sich nicht wieder AWT, Swing, JavaFX & SWT 2
C Memory Karten nach Paar offen bleiben sonst wieder umdrehen AWT, Swing, JavaFX & SWT 1
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
F Swing Java Swing Array in Datei und wieder raus AWT, Swing, JavaFX & SWT 7
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
M Java anwendung VOR vollbildspielen (schon wieder...) AWT, Swing, JavaFX & SWT 5
P jframe setVisible(false) wieder sichtbar machen? AWT, Swing, JavaFX & SWT 4
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
J Swing Fenster lässt sich nach Schließung nicht wieder öffnen AWT, Swing, JavaFX & SWT 4
A AWT Nach dem generieren von bildern verschwinden diese wieder AWT, Swing, JavaFX & SWT 9
J Mal wieder Probleme mit paintComponent AWT, Swing, JavaFX & SWT 3
C SWT CTabItem wieder sichtbar machen AWT, Swing, JavaFX & SWT 3
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
R Komponente wieder entfernen AWT, Swing, JavaFX & SWT 13
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
L Buttons aus Arrayliste erstellt wie komm ich nun wieder an das Oobjekt aus der arrayliste ran AWT, Swing, JavaFX & SWT 3
Z Swing Buttons wieder entfernen vom Bildschirm AWT, Swing, JavaFX & SWT 5
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
N gezeichnete Graphiken speichern und wieder anzeigen AWT, Swing, JavaFX & SWT 8
hdi SWT Operation auf GUI-Komponente kommt mal wieder nicht an... AWT, Swing, JavaFX & SWT 9
Ollek Swing JPnales nach bestimmtenVorgang wieder anzeigen AWT, Swing, JavaFX & SWT 4
P Swing Hintergrundfarbe auslesen und wieder setzen AWT, Swing, JavaFX & SWT 4
M AWT Zurücksetzbutton, wieder auf das original Bild AWT, Swing, JavaFX & SWT 3
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
M Fenster nach minimierung zum tray wieder öffnen AWT, Swing, JavaFX & SWT 3
E Swing Wieder ein Bild einfügen AWT, Swing, JavaFX & SWT 2
P schon wieder schlange AWT, Swing, JavaFX & SWT 8
Luy Per TAB-Taste aus TextArea wieder raus? AWT, Swing, JavaFX & SWT 5
D Swing JMenu wieder schließen lassen AWT, Swing, JavaFX & SWT 7
F JFileChooser mal wieder AWT, Swing, JavaFX & SWT 2
B Wie kann ich ein event wieder beseitigen AWT, Swing, JavaFX & SWT 2
hdi Swing mal wieder EDT -> nichts passiert AWT, Swing, JavaFX & SWT 20
S Feintuning, mal wieder Threading + swing ... AWT, Swing, JavaFX & SWT 8
S JDialog startet immer wieder neu AWT, Swing, JavaFX & SWT 2
PAX Iconified JFrame per Code wieder anzeigen lassen (deiconify) AWT, Swing, JavaFX & SWT 2
T Mal wieder Swing GUI AWT, Swing, JavaFX & SWT 7
hdi repaint() mag mal wieder nicht. AWT, Swing, JavaFX & SWT 9
T JCheckBox deselektieren (Haken wieder entfernen) - wie? AWT, Swing, JavaFX & SWT 5
M ich will die alten "alte JButtons"wieder haben AWT, Swing, JavaFX & SWT 6
G Ein jTextField im laufe das Programmes immer wieder updaten AWT, Swing, JavaFX & SWT 2
G wieder mal das leidige thema listener AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2
T Ich komme mal wieder nicht mit Swing und Image klar. AWT, Swing, JavaFX & SWT 5
G SWT Toolbar: Toolitem entfernen und wieder hinzufügen AWT, Swing, JavaFX & SWT 16
M wieder einmal JScrollPane und JList AWT, Swing, JavaFX & SWT 4
S getSize gibt keine Größe wieder AWT, Swing, JavaFX & SWT 4
T Linien zeichnen und wieder löschen AWT, Swing, JavaFX & SWT 9
Z Und schon wieder die Linien (Problem beim überzeichnen) AWT, Swing, JavaFX & SWT 4
V mal wieder das gute alte gridbaglayout AWT, Swing, JavaFX & SWT 4
W JTabele Aktualisieren - Wieder einmal AWT, Swing, JavaFX & SWT 4
B Schon wieder ein Problem mit paintComponent(). AWT, Swing, JavaFX & SWT 2
S JScrollPane mal wieder AWT, Swing, JavaFX & SWT 2
R JLabel Icon wieder entfernen AWT, Swing, JavaFX & SWT 4
A Wieder einmal Event-Dispatch-Thread AWT, Swing, JavaFX & SWT 5
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G mal wieder table. AWT, Swing, JavaFX & SWT 3
X wieder mal ein prob mit dnd AWT, Swing, JavaFX & SWT 14
Luma Alle Fenster verstecken und wieder sichtbar machen? AWT, Swing, JavaFX & SWT 6
S JFrame minimieren und wieder herstellen AWT, Swing, JavaFX & SWT 2
R Anonymen CaretListener wieder entfernen AWT, Swing, JavaFX & SWT 4
G JTabbedPane: Tabs verschwinden lassen und wieder anzeigen AWT, Swing, JavaFX & SWT 3
juppi JFrame will nicht wieder verschwinden AWT, Swing, JavaFX & SWT 2
K Und schon wieder JInternalFrame AWT, Swing, JavaFX & SWT 2
S Wieder eine Frage zu javax.swing.text AWT, Swing, JavaFX & SWT 2
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben