JTreeTable

  • Themenstarter Themenstarter HtB
  • Beginndatum Beginndatum
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.
 
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.
 
Sorry, war etwas unklar.
also es basiert schon auf AbstractTreeTableModel.

Code:
public class MediumTableModel extends AbstractTableModel {
   ...
}
 
es geht aber net.
die events werden aber nur weitergeleitet an die drunterliegende komponente, wenn die zelle editierbar ist.
 
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.
 
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...
 
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.

Zurück
Oben