JTable update: Selektion beibehalten

Status
Nicht offen für weitere Antworten.

cluening

Mitglied
Hallo zusammen,

ist es möglich die Selektion einer JTable beizubehalten wenn sich die Daten der
JTable verändern ? Ist das irgendwie möglich ?

bis denn
cluening 😉
 
Grandios !!! Das hätte ich nicht gedacht wenn du mir sagst wie das geht?
Weil mit getSelectedValue bekomme ich zwar den Wert raus aber ich kann ihn dann nicht wieder
setzen, dass die Selektion wieder auf dem selben Objekt ist.

Threads in Java sind halt manchmal komisch......


bis denn
cluening 😉
 
Selektierte Werte auslesen (zuerst die rows, dann über das Model einen eindeutigen Schlüssel für die Row finden (der Index der Zeile ist ja später nicht sehr aussagekräftig)), und in einer Liste/Set/WasAuchImmer speichern.

Daten ändern (also z.B. das Model ersetzen).

Die selektierten (Schlüssel-)Werte aus der Liste im Model suchen, und mit "addRowSelectionInterval" wieder selektieren.
 
Wie würdest du das denn anwenden ich glaube ich mach das irengwie falsch!

Vor Thread.sleep hole ich mir die row:

Code:
int zeile = meModulTabelle.getSelectedRow();

Dann die Spalte:

Code:
int spalte = meModulTabelle.getSelectedColumn();

Nach dem Thread.sleep mach ich folgendes:

Code:
meModulTabel.setRowSelectionInterval(zeile, spalte);

Also so funktioniert es nicht, vielleicht hast du ja noch einen Tip oder kannst mir das mit ...setRowSelectionInterval erklären!

Gruß
cluening
 
Achso die Daten in der JTable ändern sich nicht nur die Selektion geht durch das Thread.sleep verloren.
Alsodie Zeile bleibt immer gleich.

Gruß
cluening
 
Uf, da kann ich nur sagen: RTFAPI :wink:

hier.

Die Eingaben sind erste und letzte Zeile die selektiert werden sollen, die Spalte hat damit gar nichts zu tun.

Wie man aber vom Code her nur eine Zelle selektiert, weiss ich nicht. Vielleicht eine Kombination von setRow/ColumnSelectionIntervall.
 
Code:
/* 18.2.2006,  4:26 
* TableSelect.java 
*/ 
import java.awt.*; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.table.*; 
public class TableSelect extends JFrame { 
    public TableSelect() { 
        super("DEMO: Die Selektion der JTable wird beibehalten " + 
                "wenn sich die Daten der JTable verändern"); 
        initComponents(); 
        table.setValueAt("SCHAU",3,2); 
        table.changeSelection(2,0,false,false); 
        table.changeSelection(3,2,false,true); 
        model = (DefaultTableModel)table.getModel(); 
        new Thread(new Runnable() { 
            public void run() { 
                message(); 
                for (int i = 0; i < 100; i++) { 
                    model.addRow(new Object[]{"hallo "+i}); 
                    try { Thread.sleep(500);} catch (InterruptedException ex) {} 
                    table.setValueAt("test_"+i,3,2); 
                    table.setValueAt("TEST_"+i,1,1); 
                    table.setValueAt("HALLO_"+i,2,1); 
                } 
                table.setValueAt("Die Selektion ist noch da!",3,2); 
                message(); 
                JOptionPane.showMessageDialog(null,"<html>Bravo! <font color=blue>Sie haben " + 
                        "<font color=green>eine farbige <font color=red>" + 
                        "Waschmaschine <font color=purple>gewonnen!
<font color=gray>" + 
                        "(kleiner Scherz)"); 
            } 
        }).start(); 
    } 
    private void initComponents() { 
        table = new JTable(); 
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
        table.setModel(new DefaultTableModel( 
                new Object [][] { 
                    {null, null, null, null}, 
                    {null, null, null, null}, 
                    {null, null, null, null}, 
                    {null, null, null, null} 
        }, 
                new String [] { 
            "Title 1", "Title 2", "Title 3", "Title 4" 
        } 
        )); 
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); 
        setSize(700,400); 
        setLocationRelativeTo(null); 
    } 
    private void message(){ 
        JOptionPane.showMessageDialog(null, "<html>>>> Die Selektion wird bei " + 
                "Daten-Änderungen beibehalten. <<<
<font color=blue>Selected rows: " 
                +Arrays.toString(table.getSelectedRows())); 
    } 
    public static void main(String args[]) { new TableSelect().setVisible(true); } 
    private DefaultTableModel model ; 
    private JTable table; 
}
 
Beni hat gesagt.:
Uf, da kann ich nur sagen: RTFAPI :wink:

hier.

Die Eingaben sind erste und letzte Zeile die selektiert werden sollen, die Spalte hat damit gar nichts zu tun.

Wie man aber vom Code her nur eine Zelle selektiert, weiss ich nicht. Vielleicht eine Kombination von setRow/ColumnSelectionIntervall.

Morgen,

es soll nicht eine Zelle, sondern die ganze Zeile selektiert bleiben. Also im Großen und Ganzen handelt es sich um eine JTable die Werte aus der Datenbank holt. Dies geschieht im 30sec Takt. Selektiere ich einen Zeile, so bleibt diese 30sec selektiert und danach verliert sie die Selektion von selber. Sie soll die Selektion aber erst dann velieren, wenn der Benutzer eine andere auswählt. Die Daten können sich zwar in ein paar Spalten ändern aber es soll einfach nur die Selektion auf der aktuellen Spalte bestehen bleiben....

Gruß
cluening
 
Andre_Uhres hat gesagt.:
Anonymous hat gesagt.:
...Also im Großen und Ganzen handelt es sich um eine JTable die Werte aus der Datenbank holt. Dies geschieht im 30sec Takt...
Wo die Daten herkommen ist der JTable egal, der Takt auch.

Das ist mir auch klar aber es muss doch eine Möglichkeit geben, wenn die JTable neugezeichnet wird die alte Selektion beizubehalten....

Gruß
cluening
 
Jo Danke,

hat wunderbar mit deinem Code geklappt....
Nächsten mal schau ich mir den Code erst an und poste dann...


Danke nochmal

Könnt einen Haken dran machen!!!

Gruß
cluening
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben