JTreeTable

Status
Nicht offen für weitere Antworten.
H

HtB

Gast
Hallo,
ich habe mir wie in einem sun-tutorial einen tree-table componente geschrieben, also ein JTree ist in der ersten spalte einer JTable. So die anischt selber funzt wunderbar und die blätter macher auch wenn ich sie anklicke was sie sollen.
Aber dass ich den baum auf und zu klappen muss muss die erste spalte "editable" sein. also habe ich in meinen TreeTableModel folgende Methode überschrieben, die ja dank den schönen polimorphismus aufgerufen werden sollte.

Code:
public class SearchMediumTableModel extends MediumTableModel {
   ...


   public boolean isCellEditable(int row, int col) {
        if( col == 0 ) {
            return true;
        }
        
        return false;
    }


}

aber die isCellEditable(..) Methode wird nie aufgerufen. Bin am verzweifeln, weil ich weiss net warum.

Danke schon mal für schnelle hilfe.
 

AlArenal

Top Contributor
Dein Model basiert wohl nicht auf dem AbstractTreeTableModel? Dort findest du nämlich dieses:

Code:
/** By default, make the column with the Tree in it the only editable one.
	 *  Making this column editable causes the JTable to forward mouse
	 *  and keyboard events in the Tree column to the underlying JTree.
	 */
	public boolean isCellEditable(Object node, int column) {
		return getColumnClass(column) == TreeTableModel.class;
	}

Das ist im Grunde das was du erreichen willst, nur in einer variablen Fassung, für die es egal ist in welcher Spalte sich bei dir der Tree befindet. Ich arbeite auf Basis des AbstractTableModels, überschreibe isCellEditable() nicht und habe auch keine Propleme.
 
H

HtB

Gast
Sorry, war etwas unklar.
also es basiert schon auf AbstractTreeTableModel.

Code:
public class MediumTableModel extends AbstractTableModel {
   ...
}
 
H

HtB

Gast
es geht aber net.
die events werden aber nur weitergeleitet an die drunterliegende komponente, wenn die zelle editierbar ist.
 

AlArenal

Top Contributor
Sorry, aber meine ferndiagnostischen Fähigkeiten sind begrenzt.

Wenn du den Code einfach nur übernommen hast, wie er ist, dann funktioniert es auch. Sonst hätten sie bei Sun ja Blödsinn ins Netz gesetzt. Also musst du irgendwo noch Modifikationen drin haben, die sich mit dem Default-Verhalten beißen.
 

Bleiglanz

Gesperrter Benutzer
bei Sun gibt es kein AbstractTreeTableModel

sondern nur ein AbstractTableModel

warum aber
Code:
   public boolean isCellEditable(int row, int col) {
        return (col == 0);
    }
nicht funktionieren soll ist unklar...
 

AlArenal

Top Contributor
Bleiglanz hat gesagt.:
bei Sun gibt es kein AbstractTreeTableModel

sondern nur ein AbstractTableModel

Nope, es gibt in den Tutorials von denen sowas..

Code:
/**
 * @version 1.2 10/27/98
 * An abstract implementation of the TreeTableModel interface, handling the list
 * of listeners.
 * @author Philip Milne
 */

public abstract class AbstractTreeTableModel implements TreeTableModel {
 
Status
Nicht offen für weitere Antworten.

Oben