JTable getSelectedRow()

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
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,...
 
Vielleicht mal Singular und Plural voneinander unterscheiden?

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTable.html#getSelectedRows()
 
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)
 
Gast hat gesagt.:
..brauche also diejenige Zeile aus getSelectedRows() die zuletzt gewählt wurde..
Code:
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);
    }
}
 
mmh, da gibts jedoch ein kleines Problem

Hab mal eine Ausgabe in den Code eingefügt

Code:
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 :-(
 
Anonymous hat gesagt.:
mmh, da gibts jedoch ein kleines Problem

Hab mal eine Ausgabe in den Code eingefügt

Code:
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 :-(

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:
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben