JTable: Selektion nur mit einem Doppelklick?

Status
Nicht offen für weitere Antworten.

eForest

Mitglied
Hallo zusammen!
Normalerweise wird eine Zeile in JTable mit einem einfachen Klick selektiert. Wie kann ich dies unterbinden und stattdessen die Selection nur mit einem Doppelklick zulassen?

Für jeden Tipp bin ich sehr dankbar.
 
einen MouseListener draufhängen und einen FocusListener

wird die Maus 2mal geklickt, speicherst du es ab und selektierst es

setzt du ne Variable auf true


ungefähr so

Code:
    m_tab.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
              if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2)
                {
                  bSelect = true;
                  m_tab.changeSelection(m_tab.getSelectedRow(),m_tab.getSelectedColumn(),false,true);
                }
        if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1)
       {
   m_tab.clearSelection();
bSelect = false;
}

            }
          });
    m_tab.addFocusListener(new FocusAdapter() {
            public void focusGained(FocusEvent e) {
              if(!bSelect)
                m_tab.clearSelection();
            }
          });

keine Ahnung obs geht 🙂



GEHT NET 😉

Habs aber editiert, jetzt sollte es funken


Ich glaub den focuslistener kannst dir sogar sparen, bei mir gings sogar ohne!!
 
so will nima editieren!! 😉

so gehts, ganz einfach 😛
Code:
    m_tab.addMouseListener(new MouseAdapter()
    {
      public void mousePressed(MouseEvent e)
      {
        if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) // wenn Klick auf eine zeile
           m_tab.clearSelection();
       }
     });

ganz einfach 😉
 
Danke für die Antwort.
Ungefähr die gleiche Idee hatte ich auch. Ich habe mir die selectierte Zeile zuerst beim Doppelklick gesichert und beim einfachen Klick die gesicherte Selection wiederhergestellt. Ungefähr so:
Code:
int indexSelectedRow = -1;
  m_tab.addMouseListener(new MouseAdapter()
      {
        public void mousePressed(MouseEvent e)
        {
          if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() > 1) 
          	indexSelectedRow = m_tab.getSelectedRow();
        }
        	if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) // wenn Klick auf eine zeile
             m_tab.setRowSelectionInterval(indexSelectedRow, indexSelectedRow);
         }
       });
Doch das ist irgendwie unsauber: Wenn man in die Zeile klickt ohne loszulassen, wird diese selectiert und beim Loslassen wieder deslectiert. Ich hätte gerne die Selection bei einem einfachen Klick komplett unterbunden.
 
probier doch mal beim ersten Klick per consume(); ob sich dadurch das unterbinden lässt
Code:
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) {
             e.consume();
         }
??!!
 
Vielen Dank Leute!

Ich muss nur noch den „mousePressed“–Event abfangen und diesen von dem Doppelklick unterscheiden 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben