JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen

Status
Nicht offen für weitere Antworten.

Br4twurscht

Mitglied
Hallo Community,

ich möchte meine JTable vom TableRowSorter sortieren lassen, jedoch die letzte Zeile fest lassen, bzw. fixieren. Dummerweise gibts nur ne Methode setSortable() für Spalten.

Erst dachte ich, ich könne nen Comparator schreiben, aber der hat ja dann keine Kenntnis über die konkreten Zeilenindizes. Naja, und als Notlösung würde mir nur noch einfallen, die Methode convertRowIndexToModel() zu überschreiben. Die scheint er beim zeichnen der Tabelle aufzurufen um das Mapping abzufragen.

Aber gibts da nich noch ne bessere Lösung (mal abgesehen vom entfernen der Zeile, die fest bleiben soll)?


lg
Br4twurscht
 

Ebenius

Top Contributor
Ich hab eben ein bisschen rumgespielt. So in etwa würde ich es lösen:
Java:
/* (@)JTableSortingFun.java */

/* Copyright 2009 Sebastian Haufe

 * Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

 * Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius;

import java.awt.BorderLayout;
import java.util.*;

import javax.swing.*;
import javax.swing.event.RowSorterEvent;
import javax.swing.event.RowSorterListener;
import javax.swing.table.*;

/**
 * Test on customized sorting.
 * 
 * @version $Revision$ as of $Date$
 * @author Sebastian Haufe
 */
public class JTableSortingFun {

  static class AccumulatingIntegerTableModel extends DefaultTableModel {

    private static final long serialVersionUID = 1L;
    private int[] sum = { 0, 0 };

    AccumulatingIntegerTableModel() {
      super(new String[] { "Top Level Sorting", "A", "B" }, 0);
      addRow(new Object[] { null, null, null });
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
      return Integer.class;
    }

    @Override
    public Object getValueAt(int row, int column) {
      if (row == getRowCount() - 1) {
        switch (column) {
        case 0:
          return Integer.valueOf(Integer.MAX_VALUE);
        default:
          return Integer.valueOf(sum[column - 1]);
        }
      }
      return super.getValueAt(row, column);
    }

    @Override
    public boolean isCellEditable(int row, int column) {
      return row < getRowCount() - 1 && super.isCellEditable(row, column);
    }

    @Override
    public void setValueAt(Object aValue, int row, int column) {
      if (row < getRowCount() - 1) {
        super.setValueAt(aValue, row, column);
      }
      if (column > 0) {
        summarize(column);
      }
    }

    private void summarize(int column) {
      int acc = 0;
      final int lastRow = getRowCount() - 1;
      for (int row = 0; row < lastRow; row++) {
        acc += ((Integer) getValueAt(row, column)).intValue();
      }
      if (acc != sum[column - 1]) {
        sum[column - 1] = acc;
        fireTableCellUpdated(lastRow, column);
      }

    }

    @SuppressWarnings("unchecked")
    @Override
    public void addRow(Vector rowData) {
      insertRow(Math.max(0, getRowCount() - 1), rowData);
    }

    @SuppressWarnings("unchecked")
    @Override
    public void insertRow(int row, Vector rowData) {
      super.insertRow(row, rowData);
      for (int column = 1; column < getColumnCount(); column++) {
        summarize(column);
      }
    }
  }

  static class CustomRowSorter extends RowSorter<TableModel>
    implements RowSorterListener {

    private DefaultRowSorter<TableModel, Integer> sorter;

    CustomRowSorter(TableModel model) {
      sorter = new TableRowSorter<TableModel>(model);
      sorter.addRowSorterListener(this);
      sorter.setSortKeys(Collections.singletonList(new SortKey(0,
            SortOrder.ASCENDING)));
      sorter.setSortsOnUpdates(true);
    }

    @Override
    public int convertRowIndexToModel(int index) {
      return sorter.convertRowIndexToModel(index);
    }

    @Override
    public int convertRowIndexToView(int index) {
      return sorter.convertRowIndexToView(index);
    }

    @Override
    public TableModel getModel() {
      return sorter.getModel();
    }

    @Override
    public int getModelRowCount() {
      return sorter.getModelRowCount();
    }

    @Override
    public int getViewRowCount() {
      return sorter.getViewRowCount();
    }

    // -----------------------------------------------------------------------
    // Sorter controlling
    // -----------------------------------------------------------------------

    @Override
    public List<? extends SortKey> getSortKeys() {
      final LinkedList<SortKey> result = new LinkedList<SortKey>();
      final List<? extends SortKey> keys = sorter.getSortKeys();
      for (Iterator<? extends SortKey> it = keys.iterator(); it.hasNext();) {
        final SortKey sk = it.next();
        if (sk.getColumn() != 0) {
          result.add(sk);
        }
      }
      return result;
    }

    @Override
    public void setSortKeys(List<? extends SortKey> keys) {
      final LinkedList<SortKey> copy = new LinkedList<SortKey>(keys);
      copy.add(0, new SortKey(0, SortOrder.ASCENDING));
      sorter.setSortKeys(copy);
    }

    @Override
    public void toggleSortOrder(int column) {
      if (column != 0) {
        List<SortKey> keys = new ArrayList<SortKey>(sorter.getSortKeys());
        int sortIndex;
        for (sortIndex = keys.size() - 1; sortIndex >= 1; sortIndex--) {
          if (keys.get(sortIndex).getColumn() == column) {
            break;
          }
        }
        if (sortIndex == 0) {
          final SortKey sortKey = new SortKey(column, SortOrder.ASCENDING);
          keys.add(1, sortKey);
        } else if (sortIndex == 1) {
          final SortOrder order =
                keys.get(1).getSortOrder() == SortOrder.ASCENDING
                      ? SortOrder.DESCENDING
                      : SortOrder.ASCENDING;
          keys.set(1, new SortKey(column, order));
        } else {
          keys.remove(sortIndex);
          keys.add(1, new SortKey(column, SortOrder.ASCENDING));
        }

        sorter.setSortKeys(keys);
      }
    }

    // -----------------------------------------------------------------------
    // Event delegation from our controller to the sorter
    // -----------------------------------------------------------------------

    @Override
    public void allRowsChanged() {
      sorter.allRowsChanged();
    }

    @Override
    public void modelStructureChanged() {
      sorter.modelStructureChanged();
    }

    @Override
    public void rowsDeleted(int firstRow, int endRow) {
      sorter.rowsDeleted(firstRow, endRow);
    }

    @Override
    public void rowsInserted(int firstRow, int endRow) {
      sorter.rowsInserted(firstRow, endRow);
    }

    @Override
    public void rowsUpdated(int firstRow, int endRow) {
      sorter.rowsUpdated(firstRow, endRow);
    }

    @Override
    public void rowsUpdated(int firstRow, int endRow, int column) {
      sorter.rowsUpdated(firstRow, endRow, column);
    }

    // -----------------------------------------------------------------------
    // Event delegation from sorter to our listeners
    // -----------------------------------------------------------------------

    public void sorterChanged(RowSorterEvent e) {
      if (e.getType() == RowSorterEvent.Type.SORT_ORDER_CHANGED) {
        fireSortOrderChanged();
      } else if (e.getType() == RowSorterEvent.Type.SORTED) {
        final int[] indices = new int[e.getPreviousRowCount()];
        for (int i = 0; i < indices.length; i++) {
          indices[i] = e.convertPreviousRowIndexToModel(i);
        }
        fireRowSorterChanged(indices);
      }
    }
  }

  /**
   * Test main method.
   * 
   * @param args ignored
   */
  public static void main(String[] args) {
    final DefaultTableModel tm = new AccumulatingIntegerTableModel();
    for (int i = 0, j = 2 << i; i < 10; i++, j = 2 << i) {
      tm.addRow(new Object[] { Integer.valueOf(0), Integer.valueOf(i),
        Integer.valueOf(j), });
    }

    final JTable table = new JTable(tm);

    // use custom row sorter
    table.setAutoCreateRowSorter(false);
    table.setRowSorter(new CustomRowSorter(tm));

    // hide first column
    table.setAutoCreateColumnsFromModel(false);
    table.createDefaultColumnsFromModel();
    final TableColumnModel cm = table.getColumnModel();
    cm.removeColumn(cm.getColumn(0));

    final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
    contentPane.add(new JScrollPane(table));

    final JFrame f = new JFrame("Test Frame: JTableSortingFun"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}
Das Beispiel benutzt ein Tabellenmodel das automatisch die letzte Zeile mit der Summe aller Werte der selben Spalte aktualisiert. Das Tabellenmodell hat eine Spalte 0 die für die Sortierung herangezogen wird. Außerdem gibt es einen RowSorter der wiederum einen anderen RowSorter die Arbeit erledigen lässt und selbst nur die SortKeys um einen ersten Eintrag erweitert, damit stets zuerst nach Spalte null sortiert wird. Darüber hinaus wird die Spalte 0 aus dem TableColumnModel entfernt. In etwa sollte das Deine Bedürfnisse decken.

Ebenius
 

Br4twurscht

Mitglied
Hallo Ebenius,

zunächst erstmal ein großes Danke für die Mühe. Is ja ganz schön groß geworden. Und beim ansehen is mir ne Idee gekommen, wie mans vielleicht einfacher lösen könnte. Wenns klappt werd ichs posten.

lg
Br4twurscht
 

Ebenius

Top Contributor
Sind doch grad 150 Zeilen RowSorter. Mir gefällt die Variante ganz gut so, besonders weil sie wiederverwendbar ist. Mal sehen was Du dazu findest. :)

Ebenius
 

Br4twurscht

Mitglied
Also meine Idee war gewesen, vor dem Sortieren die fest stehende Zeile zu entnehmen und nach dem Sortieren wieder einzufügen. Aber irgendwie bekomm ichs nich hin :(. Hier mal in Auszügen mein Lösungsansatz:
Java:
public class MyTableModel extends AbstractTableModel implements RowSorterListener {

private boolean sortiert = false;

...

public int getRowCount() {
		if (this.sortiert){
			return this.berechnung.getDieListe().size();
		}
		else
			return this.berechnung.getDieListe().size() + 1;

	}
}

...

@Override
	public void sorterChanged(RowSorterEvent e) {
		if (e.getType() == RowSorterEvent.Type.SORT_ORDER_CHANGED){
			this.sortiert = true;			
		}else{
			this.sortiert = false;
			this.fireTableRowsUpdated(this.berechnung.getDieListe().size() - 1, this.berechnung.getDieListe().size() - 1);
		}
	}
}

Also ich wende mein Flag sortiert nur bei getRowCount an, weil nur die letzte Zeile fest bleiben soll. Die letzte Zeile is nämlich, wie auch zufällig bei deinem Beispiel, ne Zeile, wo Daten aufsummiert und angezeigt werden.
Ich hab auch noch ne Menge mit dem feuern anderer Events probiert, aber bin auf keinen grünen Zweig gekommen. Ich kann halt anhand der Doku nicht nachvollziehen, wann was gezeichnet wird und wann genau das Event RowSorterEvent.Type.SORT_ORDER_CHANGED und RowSorterEvent.Type.SORTED kommt. Da find ich die Doku etwas ungenau. Aber es erschien mir schon so, als würde SORT_ORDER_CHANGED kommen, bevor sortiert wird und SORTED, wenns fertig is.
 

Br4twurscht

Mitglied
Oh, den ersten Fehler hab ich grad gefunden: Die -1 beim feuern muss jeweils weg. Da bekomm ich jetzt zwar ne ArrayIndexOutOfBoundsException und kann mir auch vorstellen warum, aber das müsste sich doch lösen lassen, hoff ich...
 

Ebenius

Top Contributor
Nein, es ist kein Zufall. Ich habe darüber nachgedacht, was Du wohl machen willst und dachte mir, dass Du eine Summenzeile brauchst. :)

Aber ich verstehe Dich jetzt nicht mehr. Du hast oben eine funktionierende, getestete, wiederverwendbare Lösung die Du geschenkt bekommst. Was genau bewegt Dich nun dazu, Zeilen hin und her sortieren zu wollen, wenn der Ansatz offensichtlich problematischer ist, als ein sauberer RowSorter?

Nachtrag: Was Du da tust ist höchst gefährlich und mit MVC nicht zu vereinbaren. Du verheiratest ein Modell mit einem RowSorter (View). Das rächt sich. Das Modell sollte niemals etwas vom Filtern und Sortieren der View mitbekommen. Ansonsten bekommst Du ganz lustige Effekte. :)

Ebenius
 
Zuletzt bearbeitet:

Br4twurscht

Mitglied
Aber ich verstehe Dich jetzt nicht mehr. Du hast oben eine funktionierende, getestete, wiederverwendbare Lösung die Du geschenkt bekommst. Was genau bewegt Dich nun dazu, Zeilen hin und her sortieren zu wollen, wenn der Ansatz offensichtlich problematischer ist, als ein sauberer RowSorter?
Irgendwie erscheint mir deine Lösung zu komplex und kompliziert. Und ehrlich gesagt, seh ich im Detail noch nich durch :oops:. Dein Ansatz is mir klar.

Nachtrag: Was Du da tust ist höchst gefährlich und mit MVC nicht zu vereinbaren. Du verheiratest ein Modell mit einem RowSorter (View). Das rächt sich. Das Modell sollte niemals etwas vom Filtern und Sortieren der View mitbekommen. Ansonsten bekommst Du ganz lustige Effekte. :)
Ja, den Gedanken hatte ich auch schon, aber irgendwie fand ich die Idee toll :)

Dann werd ich mir wohl doch nochmal deine Lösung zu Gemüte führen.
 

skorpionking

Mitglied
@Br4twurscht:
Hast du für das von dir beschriebene Problem (Sortierung ohne die letzte Zeile) eine einfachere Lösung finden können?
Falls ja, würde mich dein Ansatz sehr interessieren.

MFG skorpionking
 

Br4twurscht

Mitglied
Also ich vermute mal, dass der Vorschlag von Ebenius der sauberste ist. Allerdings war mir der Aufwand dann doch nicht Wert. Naja, und da ich sowieso Zeitprobleme hatte, hatte ich das Projekt, wo ich das nutzen wollte, sowieso erstmal auf Eis gelegt.

Also nein, ich habe keine einfache/kurze Lösung gefunden. Hatte aber auch nicht mehr danach gesucht und hätte die Zeile, die fest bleiben sollte dann wohl eher ausgegliedert in ein anderes Element.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
Bluedaishi JTable alle Zeilen löschen AWT, Swing, JavaFX & SWT 7
O Swing JTable - Zeilen färben (mit Model) AWT, Swing, JavaFX & SWT 13
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
M JTable Zeilen und Zellen einfärben AWT, Swing, JavaFX & SWT 11
M Selektierte Zeilen von JTable AWT, Swing, JavaFX & SWT 10
M JTable Zeilen einfärben AWT, Swing, JavaFX & SWT 13
S Swing JTable Zeilen löschen AWT, Swing, JavaFX & SWT 21
J Swing JTable-Daten Speichern und bei zeilen-änderung beibehalten. AWT, Swing, JavaFX & SWT 6
B JTable Zeilen und Spalten selektieren AWT, Swing, JavaFX & SWT 5
kniffel Ausgabe von leeren JTable Zeilen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
0 JTable leere Zeilen einfügen AWT, Swing, JavaFX & SWT 3
D JTable mit mehrzeiligen Zeilen AWT, Swing, JavaFX & SWT 5
kodela Swing selektierte Zeilen in JTable AWT, Swing, JavaFX & SWT 3
D Swing JTable: über sichtbare Zeilen iterieren AWT, Swing, JavaFX & SWT 2
U JTable: Zeilen abhängig vom Datensatz einfärben AWT, Swing, JavaFX & SWT 4
A JComboBox-Zeilen in JTable AWT, Swing, JavaFX & SWT 2
B Swing JTable: mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 3
M JTable - mehrere Zeilen selektieren AWT, Swing, JavaFX & SWT 7
M JTable einzelne Zeilen färben AWT, Swing, JavaFX & SWT 2
A Swing JTable Zeilen einfügen verbieten AWT, Swing, JavaFX & SWT 3
elitebiber Swing Zeilen in einer JTable gruppieren AWT, Swing, JavaFX & SWT 3
O Zeilen in JTable auf Grund eines Wertes einfärben AWT, Swing, JavaFX & SWT 6
R Suchbare Zeilen von JTable in JScrollPane ermitteln AWT, Swing, JavaFX & SWT 9
O JTable Zeilen "nach oben" verschieben AWT, Swing, JavaFX & SWT 3
R Daten in JTable in mehreren Zeilen darstellen AWT, Swing, JavaFX & SWT 11
A Multiple Zeilen in einer JTable Zelle AWT, Swing, JavaFX & SWT 6
F Per KeyListener Zeilen aus JTable löschen AWT, Swing, JavaFX & SWT 9
M JScrollbar + JTable + Zeilen wie in Excel hinzufügen AWT, Swing, JavaFX & SWT 14
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
Z JTable Zeilen nummerieren AWT, Swing, JavaFX & SWT 2
G JTable mit JTextAreaEditor - Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 4
S Welcher Listener ? In JTable mehrere Zeilen markieren & AWT, Swing, JavaFX & SWT 2
J JTable - Wie Zeilen löschen ? AWT, Swing, JavaFX & SWT 8
A Attribute von Objekten in JTable-Zeilen anzeigen AWT, Swing, JavaFX & SWT 2
E JTable; Zeilen der ersten Spalte definieren? AWT, Swing, JavaFX & SWT 4
A JTable, bestimmte Zeilen blau hinterlegen AWT, Swing, JavaFX & SWT 3
S JTable Makierungen über mehrere Zeilen nicht akzeptieren AWT, Swing, JavaFX & SWT 5
M JTable. Beim löschen der Zeilen Fehlermeldung AWT, Swing, JavaFX & SWT 22
S JTable, mehrere Spalten/Zeilen zeitlich versetzt hinzufügen AWT, Swing, JavaFX & SWT 6
G JTable zur Laufzeit Spalten und Zeilen hinzufügen AWT, Swing, JavaFX & SWT 7
B JTable - Zeilen nachträglich hinzufügen? AWT, Swing, JavaFX & SWT 3
javasdann JTable sichtbare Zeilen innerhalb von JScrollPane ermitteln AWT, Swing, JavaFX & SWT 5
S Im JTable Zeilen ein-/ausblenden AWT, Swing, JavaFX & SWT 6
J Markierte Zeilen in einem JTable AWT, Swing, JavaFX & SWT 3
J JTable-Zeilen mit Werten füllen AWT, Swing, JavaFX & SWT 7
Student JTable - Zeilen und Spalten vertauschen AWT, Swing, JavaFX & SWT 4
W JTable: Zeilen nicht editierbar setzen AWT, Swing, JavaFX & SWT 6
L JTable -> Zeilen hinzufügen AWT, Swing, JavaFX & SWT 9
M JTable - unterschiedliche Hintergrundfarben von Zeilen AWT, Swing, JavaFX & SWT 2
S Zeilen einer JTable verstecken 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
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben