Y at-il un exemple de travail pour Editable JxTreeTable .. J'ai essayé quelques méthodes. Mais pas de chance ... Seule la première colonne est modifiable.JXTreeTable Exemple modifiable?
Comment rendre toutes les colonnes modifiables?
Désolé les gars,
Voici mon code src:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org;
import java.awt.Color;
import java.awt.Component;
import java.util.EventObject;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.CellEditorListener;
import javax.swing.event.TreeModelListener;
import javax.swing.table.TableCellEditor;
import javax.swing.tree.TreePath;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.JXTreeTable;
import org.jdesktop.swingx.decorator.*;
import org.jdesktop.swingx.decorator.HighlightPredicate.ColumnHighlightPredicate;
import org.jdesktop.swingx.painter.CheckerboardPainter;
import org.jdesktop.swingx.renderer.DefaultTreeRenderer;
import org.jdesktop.swingx.renderer.IconValue;
import org.jdesktop.swingx.renderer.StringValue;
import org.jdesktop.swingx.treetable.*;
public class JTreeTable extends JXTreeTable{
public JTreeTable(){
setTreeTableModel(new RandomTextTreeTableModel(5));
setRowSelectionAllowed(true);
setDragEnabled(true);
setEditable(true);
setTreeCellRenderer(new DefaultTreeRenderer());
setSelectionBackground(new Color(176, 197, 227));
setSelectionForeground(new Color(0, 0, 128));
BorderHighlighter border = new BorderHighlighter(new ColumnHighlightPredicate(1, 2), BorderFactory.createEmptyBorder(0, 6, 0, 6), false, false);
addHighlighter(border);
}
@Override
public TableCellEditor getCellEditor(int row, int column){
System.out.println(column);
return new TableCellEditor() {
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
//throw new UnsupportedOperationException("Not supported yet.");
return new JTextField();
}
public Object getCellEditorValue() {
//throw new UnsupportedOperationException("Not supported yet.");
return "";
}
public boolean isCellEditable(EventObject anEvent) {
//throw new UnsupportedOperationException("Not supported yet.");
return true;
}
public boolean shouldSelectCell(EventObject anEvent) {
//throw new UnsupportedOperationException("Not supported yet.");
return true;
}
public boolean stopCellEditing() {
//throw new UnsupportedOperationException("Not supported yet.");
return false;
}
public void cancelCellEditing() {
//throw new UnsupportedOperationException("Not supported yet.");
}
public void addCellEditorListener(CellEditorListener l) {
//throw new UnsupportedOperationException("Not supported yet.");
}
public void removeCellEditorListener(CellEditorListener l) {
//throw new UnsupportedOperationException("Not supported yet.");
}
};
}
}class RandomTextTreeTableModel extends DefaultTreeTableModel {
DefaultMutableTreeTableNode Root = null;
RandomTextTreeTableModel(int i) {
Root = new DefaultMutableTreeTableNode();
this.setRoot(Root);
for (int x = 0; x < 5; x++) {
DefaultMutableTreeTableNode node = new DefaultMutableTreeTableNode("HI");
Root.add(node);
for (int j = 0; j < i; j++) {
node.add(new DefaultMutableTreeTableNode(j));
}
}
}
@Override
public String getColumnName(int column){
return "dsdsddds";
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(Object arg0, int arg1) {
if (arg1 == 1) {
return new String("hi " + arg0.toString());
}
return arg0;
}
}
Merci .... Je veux modifier toutes les colonnes. Mais ce code ne fonctionne qu'avec la première colonne.
Pensez à poster votre code afin que les autres programmeurs puissent commencer à partir de votre code et essayer de le réparer/l'améliorer. –
devrait fonctionner - à condition que isCellEditable de treetableModel renvoie la valeur true. Comme @GuillaumePolet déjà noté, SSCCE s'il vous plait :-) – kleopatra
merci kleopatra. Je l'ai fait. Les valeurs des cellules sont maintenant modifiables mais les valeurs des cellules sont restaurées automatiquement après la perte de focus. Où remplacer l'événement cellchanged ??? –