Selektierte Zeilen von JTable

may24

Bekanntes Mitglied
Hi zusammen,

ich habe folgendes vor:
ein JTable ist mit Werten gefüllt. wird nun eine Zeile angecklickt (und somit markiert) wird diese in einem Vector gespeichert. Mehrfachselektion soll möglich sein.
Über ein Button sollen nun diese Zeilen gelöscht werden.
Ist keine Zeile selektiert soll auch nichts gelöscht werden.
Und genau das ist das Problem. Denn meine "Konstruktion" speichert immer den letzten Wert und drückt man auf löschen so fliegt die Zeile raus obwohl man das gar nicht will.

Der komplette Code wäre etwas viel, daher hier der Auszug um den es geht:
Java:
dtm.addTableModelListener(new TableModelListener() 						// use the standard TableModelListener
		{
		      public void tableChanged(TableModelEvent e) 
		      {
					if (unlockDataFlow)
					{
						//Object cellValue = ((Vector<Object[]>) dtm.getDataVector().elementAt(xy[1])).elementAt(xy[0]);
						Object cellValue = dtm.getValueAt(xy[1],xy[0]);
						dataModel.getCellInfoAndData(xy[0], xy[1], cellValue );
					}
		      }
		});
		
		table.setCellSelectionEnabled(true);
		table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		
		rowLSM = table.getSelectionModel();
		colLSM = table.getColumnModel().getSelectionModel();
		
		rowLSM.addListSelectionListener(new ListSelectionListener() 
		{

			@Override
			public void valueChanged(ListSelectionEvent e) 
			{
				if (e.getValueIsAdjusting())
				{
					return;														// works here like break
		                }

                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                
                if (lsm.isSelectionEmpty())
                {
                	xy[1] = -1;
                }
                else
                {
                	int selectedRow = lsm.getMinSelectionIndex();
                        xy[1] = selectedRow;
                }
			}
		
		});
		

		colLSM.addListSelectionListener(new ListSelectionListener() 
		{

			@Override
			public void valueChanged(ListSelectionEvent e) 
			{
				if (e.getValueIsAdjusting())
				{
					return;
				}

                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                
                if (! lsm.isSelectionEmpty()) 
                {
                	int selectedCol = lsm.getMinSelectionIndex();
            		xy[0] = selectedCol;
                } 
                
			}
		
		});
 
S

SlaterB

Gast
> Denn meine "Konstruktion" speichert immer den letzten Wert und drückt man auf löschen so fliegt die Zeile raus obwohl man das gar nicht will.

du meinst, auch wenn die Selektion aufgehoben wird, bleibt noch der Wert einer bestimmten Zeile gespeichert?
das wäre komisch, kommt kein Selektionsevent beim Aufheben? mit isSelectionEmpty(), oder Zeilenindex -1?
schau dir genau an, evtl. mit Logging, welche Events wann kommen,

wenn doch -1 gespeichert wird und das beim Löschen-Button ein Problem macht musst du dort natürlich schauen
ob -1 oder sonst ein komischer Wert zu löschen ist und dann eben nicht löschen, nix tun,
oder den Button disablen oder irgendwas arbeiten

wo genau besteht also nun ein Problem?
 

Michael...

Top Contributor
wird nun eine Zeile angecklickt (und somit markiert) wird diese in einem Vector gespeichert. Mehrfachselektion soll möglich sein.
Versteh ich das richtig, Du speicherst die Information darüber welche Zeilen selektiert sind in einem eigenen Vector? Ist das nicht doppelt gemoppelt? Die selektierten Zeilen werden doch bereits im SelectionModel gespeichert. Evtl. verstehe ich Dein Vorhaben auch falsch.
 

may24

Bekanntes Mitglied
@Michael: Nein, du verstehst mich nicht falsch. Doch wie komme ich an diese Daten heran ? Besonders bei Mehrfachselektion ?
Ich denke das ist auch genau mein Problem. Den in den Vector wird ja erst eine neue Position gespeichert soblad etwas in der Tabelle angecklickt wurde. Sonst behält er logischerweise den Letzten da er nicht überschrieben wird. Seltsamerweise auch nicht wenn die Selektion "aufgehoben" wird ...
 
S

SlaterB

Gast
> Seltsamerweise auch nicht wenn die Selektion "aufgehoben" wird
seltsam muss da nichts bleiben, siehe mein Posting,

allerdings kannst du auch wirklich einfach das SelectionModel als Speicher verwenden,
an der Stelle, an der du den Array-Wert abfragst, kannst du doch genau das ListSelectionModel holen und dort fragen?
mehrere Werte bei Mehrfachselektion, die du im geposteten Code auch kaum berücksichtigst, kannst du doch genauso abfragen

es sei denn es spricht konkret etwas dagegen, z.B. kein Weg zum Model
 

may24

Bekanntes Mitglied
Wenn "lsm" das ListSelectionModel ist, wie komme ich dann aber an all Daten der selektierten Zeilen ?
Code:
getMinSelectionIndex
liefert mir ja nur ein Element ...
 
S

SlaterB

Gast
ist das in der derzeitigen Lösung mit dem Event anders? oder bekommst du da mehrere Events und so die Information?
ich sollte es besser alles selber wissen, aber wenn du schon gerade dabei bist..

JList selber bietet nebenbei
> getSelectedIndices()
> Returns an array of all of the selected indices, in increasing order.
 

may24

Bekanntes Mitglied
Hm, scheint aber irgentwie nur bei der JList zu funktionieren.
Weder der Jtable, noch das ListSelectionModel kennt "getSelectedIndices"
 
S

SlaterB

Gast
ganz vergessen nachzuschauen was du dir konkret hattest,
die Methode arbeitet intern eh mit dem SelectionModel, kannst du dir für andere Zwecke kopieren:
Java:
   /**
     * Returns an array of all of the selected indices in increasing
     * order.
     *
     * @return all of the selected indices, in increasing order
     * @see #removeSelectionInterval
     * @see #addListSelectionListener
     */
    public int[] getSelectedIndices() {
        ListSelectionModel sm = getSelectionModel();
        int iMin = sm.getMinSelectionIndex();
        int iMax = sm.getMaxSelectionIndex();

        if ((iMin < 0) || (iMax < 0)) {
            return new int[0];
        }

        int[] rvTmp = new int[1+ (iMax - iMin)];
        int n = 0;
        for(int i = iMin; i <= iMax; i++) {
            if (sm.isSelectedIndex(i)) {
                rvTmp[n++] = i;
            }
        }
        int[] rv = new int[n];
        System.arraycopy(rvTmp, 0, rv, 0, n);
        return rv;
    }
wäre natürlich gut wenn sie in ListSelectionModel selber vorhanden wäre

von der ursprünglichen Frage, warum du überhaupt ein separates Array brauchst, ist das aber nach wie vor recht weit entfernt,
es sei denn du brauchst das Array aus trotz mehrfachen Nachfragen unbeantworteten Gründen für Mehrfachselektion,
na falls dir durch die letzten Postings irgendwie geholten ist, soll mir das Recht sein
 

may24

Bekanntes Mitglied
Hm, es scheint tatsächlich besser zu sein das [c]getSelectedRows[/c] auf den table anzuwenden und nicht so umständlich über einen ListSelectionListener zu gehen.

Java:
public Vector <Object[]> getSelectedCells()
	{
		int numberOfSelectedRows = table.getSelectedRowCount();
		cellData.clear();
		int[] tempRowArray = new int[numberOfSelectedRows];
		tempRowArray = table.getSelectedRows();
		
		for (int i = 0; i<numberOfSelectedRows; i++)
		{
			int x = table.getSelectedColumn();
			int y = tempRowArray[i];
			Object cellValue = dtm.getValueAt(y,x);
			Object[] tempCellLine = new Object[] {x,y,cellValue};
			cellData.add(tempCellLine);
		}	
		return cellData;
	}

Danke für euere Hilfe :)
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
kodela Swing selektierte Zeilen in JTable AWT, Swing, JavaFX & SWT 3
L JTable selektierte Zelle in Bearbeitungs Modus AWT, Swing, JavaFX & SWT 2
X JTable Selektierte Reihe kann nicht gelöscht werden AWT, Swing, JavaFX & SWT 2
L Swing [JTree] Selektierte Nodes nummerieren AWT, Swing, JavaFX & SWT 6
Guybrush Threepwood JTable mit JTableRowSorter: Selektierte Row AWT, Swing, JavaFX & SWT 2
C JTree per code selektierte Node wird nicht farbig hinterlegt AWT, Swing, JavaFX & SWT 2
B Swing JTable merkt sich die zuletzt selektierte Zelle AWT, Swing, JavaFX & SWT 3
S [SWT]Wie selektierte Baumeinträge erhalten AWT, Swing, JavaFX & SWT 3
S JComboBox, ein Renderer und das selektierte Objekt AWT, Swing, JavaFX & SWT 4
Encera TableView Zeilen als Spalten im SceneBuilder AWT, Swing, JavaFX & SWT 0
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
missy72 JavaFX TableView Spalte zwischen den Zeilen AWT, Swing, JavaFX & SWT 5
T TableView Zeilen einfärben AWT, Swing, JavaFX & SWT 13
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
S JavaFX JavaFX TableView scrollen färbt falsche Zeilen AWT, Swing, JavaFX & SWT 1
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
M Befüllung der einzelnen Zeilen des TableView AWT, Swing, JavaFX & SWT 3
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
X Zeilen aus einer Textdatei einzelnd als String abrufen AWT, Swing, JavaFX & SWT 8
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
J JavaFX TableView - Höhe der Zeilen AWT, Swing, JavaFX & SWT 3
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
B Java FX TableView Zeilen mit verschiedenen Typen AWT, Swing, JavaFX & SWT 15
P jtabel Zeilen auswählbar, aber nicht editierbar AWT, Swing, JavaFX & SWT 3
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
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
D Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben AWT, Swing, JavaFX & SWT 5
D JGridLayout zwischen Zeilen bestimmter Abstand AWT, Swing, JavaFX & SWT 3
B Swing BalloonTip erscheint nicht in den ersten Zeilen einer JXTable AWT, Swing, JavaFX & SWT 4
Bluedaishi JTable alle Zeilen löschen AWT, Swing, JavaFX & SWT 7
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
P gleichanfangende Zeilen solange auslesen bis es die gibt AWT, Swing, JavaFX & SWT 12
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
O Swing JTable - Zeilen färben (mit Model) AWT, Swing, JavaFX & SWT 13
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
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 TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
M JTable Zeilen einfärben AWT, Swing, JavaFX & SWT 13
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
L JTableModel - Zeilen mit eigenem Index ausstatten AWT, Swing, JavaFX & SWT 4
S JEditorPane Zeilen zählen AWT, Swing, JavaFX & SWT 5
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
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
B 2D-Grafik Zeilen drehen im JEditorPane AWT, Swing, JavaFX & SWT 3
0 JTable leere Zeilen einfügen AWT, Swing, JavaFX & SWT 3
M Markieren von ganzen Zeilen in transparenten Tabellen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
D JTable mit mehrzeiligen Zeilen AWT, Swing, JavaFX & SWT 5
O Anzahl der Zeilen im TableViewer AWT, Swing, JavaFX & SWT 12
B Swing Zeilen Rotation AWT, Swing, JavaFX & SWT 5
J Swing JList: Neue Zeilen mit fireIntervalAdded sind automatisch selektiert AWT, Swing, JavaFX & SWT 2
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
D Tabellen Header & Abstand der Zeilen AWT, Swing, JavaFX & SWT 8
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
E JTextarea verschluckt Zeilen AWT, Swing, JavaFX & SWT 5
A JComboBox-Zeilen in JTable AWT, Swing, JavaFX & SWT 2
martin82 Swing JXTable gefilterte Zeilen AWT, Swing, JavaFX & SWT 4
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
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
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
A Swing JTable Zeilen einfügen verbieten AWT, Swing, JavaFX & SWT 3
elitebiber Swing Zeilen in einer JTable gruppieren AWT, Swing, JavaFX & SWT 3
Meldanor JTables - Zeilen hinzufügen/löschen AWT, Swing, JavaFX & SWT 4
T Wie Zeilen in Tabellen farblich differenzieren? AWT, Swing, JavaFX & SWT 3
R JScrollBar - Immer drei Zeilen weiter AWT, Swing, JavaFX & SWT 10
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
D Jlist auf 10 Zeilen begrenzen geht bei mir nicht AWT, Swing, JavaFX & SWT 2
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
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
F Per KeyListener Zeilen aus JTable löschen AWT, Swing, JavaFX & SWT 9
K Mehrere Zeilen auf einem Button AWT, Swing, JavaFX & SWT 2
M JScrollbar + JTable + Zeilen wie in Excel hinzufügen AWT, Swing, JavaFX & SWT 14
D Ireport - Summe bilden von einzelnen Zeilen? AWT, Swing, JavaFX & SWT 1
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
Z JTable Zeilen nummerieren AWT, Swing, JavaFX & SWT 2
G Tabellenköpfe für die Zeilen AWT, Swing, JavaFX & SWT 3
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
P Tablle mit Zeilen Header (nicht spaltenheader) AWT, Swing, JavaFX & SWT 3
L JTabels und das Hinzufügen von Zeilen mit Inhalt AWT, Swing, JavaFX & SWT 17
J JTable - Wie Zeilen löschen ? AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben