Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » suche Actionlistener für Selectedrow bei Jtable

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.01.2004, 20:23 Uhr
AlfameisterT



Hallo,
ich verzweifle langsam mit diesem JTable.
Ich suche einen Listener der auslöst sobald mit der Maus auf eine Zeile der Tabelle geklickt wird.

Irgendwie bin ich noch nicht fündig geworden,
versuchte es mit einem FocusListener, aber irgenwie lößt der nicht immer aus.

Wer kann mir da weiter helfen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.01.2004, 22:41 Uhr
(un)wissender
Niveauwart


Ist jetzt mal so geschrieben, aber das solle so ähnlich gehen.
Schau in die API.


Code:
addMouseListener(new myMouseListener ());

class myMouseListener extends MouseAdapter {
public void clicked(MouseEvent e) {
mytable.getSelectedRow();
//tu was

}
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.01.2004, 22:42 Uhr
(un)wissender
Niveauwart


Kannst dir auch die Koordinaten des MouseEvents holen und dann mit table.getRowAt(x,y) oder so ähnlich die Zeile holen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.01.2004, 11:12 Uhr
AlfameisterT



Hallo,
MouseListener war eine gute Idee,
leider gibts bei meinem Table keine Methode "getRowAt(x,y)",
und das mit dem MouseAdapter wollte auch nicht so recht.
Konnte es aber so lösen,



Code:
class xyz implements MouseListener{
....
...

    public void mouseClicked(MouseEvent arg0) {
            
        int z[]=((JTable)arg0.getSource()).getSelectedRows();

        tuwas mit z[0];            
    }

}



Danke nochmal,
vielleicht noch eine Frage nebenbei, warum werden bei mir nicht Spaltennamen angezeigt.
Habe die Tabelle so initialisiert,


Code:
...
public static final String  columnNames[] = {"id", "url"};
...
Tab=new JTable(Data,columnNames);


Dieser Post wurde am 09.01.2004 um 11:13 Uhr von AlfameisterT editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.01.2004, 17:39 Uhr
(un)wissender
Niveauwart


Das war alles ausgedacht, z.B. der Methodenname getRowAt(int x, int y).
Die API ist *sehr* logisch, darum kann man sich denken, wo welche Methoden sind.
Ich würde dir empfehlen, einfach mal rein zu schauen, dann hättest du festgestellt, das die Methode, die ich meine "int rowAtPoint(Point point)" heißt.

Mit dem sollte funzen (Achtung, wieder nicht getestet!)

Code:
class xyz implements MouseListener{
....
...

    public void mouseClicked(MouseEvent arg0) {
        //the index of the row that point lies in, or -1 if the result is not in the range [0, getRowCount()-1]
        
        int rowCount =  ((JTable)arg0.getSource()).rowAtPoint(new Point(arg0.getX(), arg0.getY()));  

        if(rowCount  != -1) {
            //tuwas rowCount  
        }          
    }

}




Zu deiner 2-ten Frage weiß ich nichts, ist zu wenig Code, sollte funzen.
Schau mal hier: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html



Bearbeitung:

Obiger Code ist sehr Nullpointer gefährdet, du solltest ihn noch etwas umschreiben, mit instanceof oder equals testen, ob es auch eine JTable ist.


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 09.01.2004 um 17:42 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.01.2004, 22:08 Uhr
AlfameisterT



Hallo,
danke für den Link, werde das mal durchgehen.

Eigentlich sollte es wirklich funktionen das die Spaltennamen angezeigt werden. Vielleicht ist da doch noch ein Fehler drinn,
hier mal der ganze Code, wäre nett wenn du den nochmal überfliegen könntest.


Code:
public class CPatientSearch extends JPanel implements MouseListener{
        
    private Vector Daten;
    public JTable Tab;
    private Container Fenster;
    private int Selected;
    private CAusgabeDlg AusgabeFenster;
    
    
    public static final String  columnNames[] = {"Name", "Geburtsdatum"};
    static String[][] x;
    
    CPatientSearch()
    {                
        Fenster=this;            
        Fenster.setLayout(new BorderLayout());        
    }
    
    public void FillList(Vector obj,CAusgabeDlg form){
        
        Daten=obj;
        AusgabeFenster=form;
        x=new String[obj.size()][2];
        
        for(int i=0; i< obj.size();i++)
        {
            x[i][0]=((CPatientData)Daten.elementAt(i)).getNachname();
            x[i][1]=((CPatientData)Daten.elementAt(i)).getGeburtsdatum().toString();
        }
        
        Tab=new JTable(x,columnNames);
        
        Tab.setRowHeight(20);        
        Tab.setShowVerticalLines(false);
        Tab.setRowSelectionAllowed(true);    
        Tab.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        Tab.setBackground(new Color(0xfa,0xfa,0xfa));
        Tab.addMouseListener(this);            
        Fenster.add(Tab);
    }    


Das ganze wird dann in ein Container (hoffe das nennt man so, meine dies Nord West Center usw. Ding) geladen.

Edit:
wieso ist da jetzt ein Teil kursiv

Dieser Post wurde am 10.01.2004 um 22:10 Uhr von AlfameisterT editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.01.2004, 22:25 Uhr
(un)wissender
Niveauwart


Ist ein LayoutManager, der aber ein Container ist.


Code:
for(int i=0; i< obj.size();i++)
        {
            x[0]=((CPatientData)Daten.elementAt(i)).getNachname();
            x[1]=((CPatientData)Daten.elementAt(i)).getGeburtsdatum().toString();
        }



Dies Zeile ist seltsam, x ist ein zweidimensionaler String und du sprichst ihn eindimensional an.
Außerdem tust du in der Schleife immer das gleiche, d.h. du überschreibst Dinge. Das ist vermutlich nicht deine Absicht.

Versuch mal das zu ändern.

Auch Fenster.add(Tab); ist eigentlich nicht richtig, da du Borderlayout gewählt hast, solltest du auch ein Orientierung angeben, north, south,...

Was soll eigentlich diese Fenster = this?
Benutze lieber getContenPane().

Sorry, aber ich bin schon etwas aus Java raus, auf die Schelle fällt mir nicht mehr ein, müsste dann selber probieren.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.01.2004, 09:32 Uhr
AlfameisterT



Hallo,
jepp die Zeile ist äuserst seltsam,
irgendwie ist das [i] als Kursiv umgesetzt worden, in Wirklichkeit schaut es so aus.

x[i][0]=((CPatientData)Daten.elementAt(i)).getNachname();
x[i][1]=((CPatientData)Daten.elementAt(i)).getGeburtsdatum().toString();

getContentPane? Jetzt macht er mich wieder fertig :D
Die Klasse ist nicht von JFrame sondern von JPanel abgeleitet!
Im der Klasse des Hauptfensters wird das schon in "East" geschrieben.

Das mit den Spaltennamen sollte aber funktionieren, seltsam...

Dieser Post wurde am 11.01.2004 um 09:37 Uhr von AlfameisterT editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.01.2004, 14:10 Uhr
(un)wissender
Niveauwart


Tja, ich weiß nicht.
Mit contantPane hat du recht.
Trotzdem kannste, glaube ich, die Variable window einfach weglassen und die Methoden so ausführen, müsste funzen, da JPanel ja von Container erbt und du diesen ansprechen willst.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: