Wie MouseListener bei TableModel anmelden?

Status
Nicht offen für weitere Antworten.

FenchelT

Bekanntes Mitglied
Hallo zusammen,

ich beschaeftige mich zur Zeit mit der Arbeitsweise von Tabellen und experimentiere schon den lieben langen Tag an folgendem Problem.
ICh moechte ganz einfach, dass wenn ich mit der Maus eine Row anklicke, ich den Wert aus einer bestimmten Zelle geliefert bekomme.

Das ganze funktioniert einwandfrei, wenn ich einen WErt aendere.

Code-Beispiel:

Code:
    public SimpleTableDemo() 
    {
    	model = new MyTableModel();
    	table = new JTable(model);
        
        
        initComponents();
        showFrame();
    }
        
    private void initComponents()
    {
    	this.table.getModel().addTableModelListener(this);
    	
    }


    public void tableChanged(TableModelEvent e) 
    {
    	int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnName = model.getColumnName(column);
        Object data = this.model.getValueAt(row, column);

        System.out.println(row + "\n" + column + "\n");
        System.out.println(model.getValueAt(row, column));
    }


Soweit so gut.

Wenn ich nun aber zusaetzlich im Konstruktor noch einen MouseListener anmelde,

Code:
this.table.addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent evt) {machWas();;}});

private void machWas()
{
   System.out.println("Ganz dolle, Du hast in die Zeile geklickt");
}


dann gibt mir das Programm auch brav aus, dass ich in die Tabelle geklickt habe.
Wie komme ich aber nun an die Informationen die ich erhalte, die durch das TableMouseEvent ausgeloest werden?


Waere nett, wenn mir mal jemand den Wald wegholzt, damit ich die Baeume wieder sehe.


Vielen DAnk und viele Gruesse
FenchelT
 
aus dem MouseEvent kriegst Du den Punkt, wo der Klick stattgefunden hat. Dann kannst Du mit JTable#rowAtPoint(Point) und JTable#columnAtPoint(Point) die richtige Zeile/ Spalte/ Zelle im Table finden.
 
also mit dem MouseListener löst du das ganze etwas umständlich. es würde dann funktionieren, wenn du in der mousePressed(MouseEvent) oder mouseReleased(MouseEvent) table.getSelectedRow() bzw. table.getSelectedColumn() abfrägst, um über die selektion etwas zu erfahren und somit dann auf die werte im tabel zuzugreifen. sicherer würdest du das ganze lösen, wenn du dich als ListSelectionListener dem SelectionModel des tabels hinzufügst. somit erhältst du immer ein nachricht, wenn etwas selektiert bzw. deselektiert wird und musst hier nicht mit MouseEvents arbeiten. einfach nur per table.getSelectionModel().addListSelectionListener(myListSelectionListener). die werte selbst aber wirst du dir schon vom table bzw. von dessen model holen müssen, ich denke da führt kein weg dran vorbei.

viel glück

wayne
 
Hallo zusammen,

sowas wie den ListSelectionListener habe ich urspruenglich gesucht und nicht gefunden :roll:

Dac dachte ich etwas zu voreilig, dann gibbet sowas wohl nicht und habe mir dann alternativ die Sache mit dem MouseListener ueberlegt. :autsch:


Vielen Dank, Problem geloest. 🙂

Schoenen Abend noch zusammen, also ich meine nicht gemeinsam, sondern jeder fuer sich versteht sich :wink:


Gruesse
FenchelT
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben