# JTable getSelectedRow()



## Gast (24. Okt 2006)

Hallo,

kleines Problemchen.

Wähle in einem JTable mehrere Zeilen aus,
möchte die Zeile haben, die zuletzt angeklickt wurde!
(sprich, ausgewählte Zeilen blau, die zuletzt angeklickte -Zelle- hat ja noch so ein gepunkteten Rahmen drum,
die Reihe möchte ich haben)

=> getSelectedRow() gibt mir immer den niedrigsten Index aus.

Bsp.: Zeile 2, 4 und 9 ausgewählt, egal welche Zeile ich zuletzt anklicke, getSelectedRow() liefert immer 1,...


----------



## AlArenal (24. Okt 2006)

Vielleicht mal Singular und Plural voneinander unterscheiden?

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTable.html#getSelectedRows()


----------



## Gast (24. Okt 2006)

ja, nein...

GetSelectedRows() liefert mir alle Zeilen die ausgewählt wurden...klar

möchte nun den Inhalt der Zeilen zusammen fassen in eine Zeile, und zwar in die Zeile die zuletzt ausgewählt wurde.

sprich meine Auswahl umfasst die Zeilen 2,4 und 9.
Zeile 4 habe ich zuletzt angelklickt (mit shift oder tab)

dann klicke ich irgendeinen Button und dann soll der Inhalt der Zeilen 9 und 2 zu der Zeile 4 hinzugefügt werden
(da diese ja zuletzt ausgewählt wurde)

brauche also diejenige Zeile aus getSelectedRows() die zuletzt gewählt wurde..
dachte das geht mit getSelectedRow(), aber die liefert immer nur den niedrigsten Index der Auswahl von getSelectedRows() , in diesem Beispiel 1 (2-1)


----------



## The_S (24. Okt 2006)

da musste dir imho selber was basteln. Evtl. mit nem MouseListener.


----------



## André Uhres (24. Okt 2006)

Gast hat gesagt.:
			
		

> ..brauche also diejenige Zeile aus getSelectedRows() die zuletzt gewählt wurde..




```
package table;
/*
 * TableFocusedLine.java
 */
import java.awt.*;
import javax.swing.table.*;
import java.awt.event.*;
import javax.swing.*;
public class TableFocusedLine extends JFrame {
    private int focusedRow;
    private JTable table;
    public TableFocusedLine() {
        table = new JTable(10, 5) {
            public TableCellRenderer getCellRenderer(final int row, final int column) {
                focusedRow = row;
                return super.getCellRenderer(row, column);
            }
        };
        table.changeSelection(0,0,false,false);
        getContentPane().add(new JScrollPane(table));
        JButton button = new JButton("Get Focused Row");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Focus    : " + focusedRow);
                table.requestFocus();
            }
        });
        JPanel btnPanel = new JPanel();
        btnPanel.add(button);
        getContentPane().add(btnPanel, BorderLayout.SOUTH);
    }
    
    public static void main(String[] args) {
        TableFocusedLine frame = new TableFocusedLine();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setSize(400,300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
```


----------



## Guest (25. Okt 2006)

thanx


----------



## Guest (27. Okt 2006)

mmh, da gibts jedoch ein kleines Problem

Hab mal eine Ausgabe in den Code eingefügt


```
jTable = new JTable() {
    public TableCellRenderer getCellRenderer(final int row, final int column) { 
        System.out.println("Row: " + String.valueOf(row));
         return super.getCellRenderer(row, column); 
    } 
};
```


Es werden nicht immer die Angaben zur focussierten Zelle ausgegeben, bewegt mal den Mauszeiger auf eine andere Reihe / Zelle, es wird die jenige Zelle ausgebene über der der Mauszeiger ist, nicht die den Focus hat, leider :-(


----------



## André Uhres (27. Okt 2006)

Anonymous hat gesagt.:
			
		

> mmh, da gibts jedoch ein kleines Problem
> 
> Hab mal eine Ausgabe in den Code eingefügt
> 
> ...



Das ist ja auch jetzt wieder eine ganz andere Problemstellung, dein Problem oben war ja:


			
				Gast hat gesagt.:
			
		

> ..dann _klicke ich irgendeinen Button_ und dann soll der Inhalt der Zeilen 9 und 2 zu der Zeile 4 hinzugefügt werden
> (da diese ja zuletzt ausgewählt wurde)..


Deshalb gibt mein Code *beim Klick auf den Button* immer den richtigen Wert aus!

EDIT: Weshalb das so ist, ist leicht zu erklären:
Beim Buttonklick ist die letzte Zelle die durch getCellRenderer läuft *immer *die fokusierte Zelle, 
da diese durch den Buttonklick kurz den Focus verliert und daher neu gerendert werden muss  :wink:


----------



## Guest (27. Okt 2006)

aah, verstehe.

Ja, das hat Sinn. 

Mein Problem war das ich je nachdem was Inhalt der Zellen war Buttons sperren oder freigeben wollte zum klicken, da aber die Tabelle den Focus ja nicht verliert wenn ich nur andere Zellen auswähle...

Bin mittlerweile soweit das ich mir einen eigenen TableCellRenderer geschrieben habe

Das Problem ist also gelöst!
Danke für die Hilfe


----------

