2016-08-05 22 views
0

Ich habe 7 Tabellen auf meinem Bildschirm. Da es sich um unabhängige Tabellen handelt, kann ich aus jedem eine Zelle auswählen.Reihen von JTable abwählen

Obwohl ich will, dass jedes Mal, wenn ich eine Zelle in einer Tabelle auswähle, möchte ich eine Abwahl der Zelle aus der Tabelle, aus der Zelle zuvor ausgewählt wurde und so auch für andere Tabellen.

Grundsätzlich möchte ich die Auswahl einer Zelle aus einer einzelnen Tabelle auf einmal.

Auch ich möchte Abwahl der ausgewählten Zelle, wenn Maus irgendwo auf dem Bildschirm angeklickt wird.

Ich habe versucht clearselection(), aber es scheint nicht zu funktionieren.

+1

* "Ich habe' clearselection() 'versucht, aber es scheint nicht zu funktionieren." * Natürlich funktioniert es, wenn es richtig verwendet wird. Die einzige Schlussfolgerung, zu der wir kommen können, ist, dass der Code sie nicht korrekt verwendet. Zu diesem Thema .. Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. (Fügen Sie zwei Tabellen anstelle von 7 hinzu.) –

+0

Reduzierung der Anzahl der Tabellen entspricht nicht den Anforderungen – shashank

+1

* "Verringerung der Anzahl der Tabellen entspricht nicht den Anforderungen" * Die ultimative Anforderung ist irrelevant. Wenn Sie es mit nur zwei Tabellen schaffen, sollte es leicht mit 3, 10 oder 1000 zu tun sein. Ich werde darauf hinweisen, dass "das Fehlen eines MCVE" in zwei separaten "close this question" -Gründen aufgeführt ist. Ich habe bereits eine enge Abstimmung basierend auf einer dieser Stimmen hinzugefügt. Entscheiden Sie sich also, ob Sie eine Lösung für das angegebene Problem haben möchten, und wenn ja, schreiben Sie MCVE. Denn wenn 4 weitere Personen meiner Einschätzung zustimmen, wird diese Frage geschlossen. –

Antwort

1

Erstellen Sie eine TableGroup, um SINGLE_SELECTION über eine Gruppe von Tabellen zu erzwingen, die jeweils ihre eigenen ListSelectionModel haben. Das folgende Beispiel enthält eine List<JTable>, die die Auswahl für eine beliebige Anzahl von Tabellen verwalten kann.

Verbrauch:

SelectionGroup group = new SelectionGroup(); 
group.add(new JTable(…)); 
group.add(new JTable(…)); 
… 

Code:

private static class TableGroup { 

    private final List<JTable> list = new ArrayList<>(); 

    private void add(JTable table) { 
     list.add(table); 
     ListSelectionModel model = table.getSelectionModel(); 
     model.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     model.addListSelectionListener(new ListSelectionListener() { 
      @Override 
      public void valueChanged(ListSelectionEvent e) { 
       if (!e.getValueIsAdjusting()) { 
        for (JTable t : list) { 
         if (!t.equals(table)) { 
          t.clearSelection(); 
         } 
        } 
       } 
      } 
     }); 
    } 
} 

TableGroup ist vom Konzept her ähnlich einem ButtonGroup, here und here gesehen.

+0

Der Code funktioniert nicht wie vorgesehen Sobald ich eine Tabelle ausgewählt habe, wird die zuvor ausgewählte Tabelle abgewählt, aber auch die aktuell ausgewählte Tabelle wird abgewählt. Aber ich möchte die Auswahl für die aktuell ausgewählte Tabelle beibehalten. – shashank

+0

Ich kann den beschriebenen Effekt nicht reproduzieren; Bitte bearbeiten Sie Ihre Frage so, dass sie eine [mcve] enthält, die Ihre aktuelle Vorgehensweise anzeigt. – trashgod