ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
6643
6643
EMPFEHLEN
-
Hallo ich hab ein Problem,
und zwar möchte ich in einem TreeViewer (JFace) die Items bearbeiten. Das soll folgendermaßen aussehen. Ich möchte ein Doppelklick auf ein Element machen und dann soll ich den Itemtext bearbeiten können IM TreeViewer. Ähnlich wie zum Windows Explorer, wenn ich auf eine Datei rechtsklick mache -> Umbenennen. Bloß halt mit Doppelklick.
Kann mir da jemand helfen?
-
18.12.07 13:57 #2kaMii Tutorials.de Gastzugang
Habs nicht getestet, aber damit müsste es doch gehen:
Code java:1 2 3 4 5 6
treeViewer.addDoubleClickListener(new IDoubleClickListener(){ public void doubleClick(DoubleClickEvent event){ TreeSelection ts = (TreeSelection)event.getSelection(); System.out.println(ts.getFirstElement()); } });
Danach müsstest du ts auf den entsprechenden Typ casten können und für diesen dann den Namen ändern können.
Das ganze ist nicht 100% ausgereift aber sollte dir mal nen deut in die richtige Richtung geben.
Gruss Ben
-
Damit bekomm ich ja nur die Daten aus dem Tree die Selektiert sind wenn ich drauf Doppelklicke, aber ich kann sie nicht IM!! Tree bearbeiten so wie im Windows Explorer. So könnte ich die ja z.B. nur in einer extra TextControll bearbeiten, aber das will ich ja nicht.
-
18.12.07 14:16 #4kaMii Tutorials.de Gastzugang
Eine allroundfunktion für das von dir Gewünscht kenne ich leider nicht, ich kann dir nur Tipps für die Umsetzung geben...
Vielleicht weiß ja jemand anderes eine bessere Möglichkeit
-
das macht doch ein cell editor......
-
08.09.08 11:40 #6
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
da gibts mehrere Möglichkeiten:
Per SWT:
http://dev.eclipse.org/viewcvs/index...1.java?view=co
Per JFace:
TreeViewerEditor
Per Eclipse API:
Siehe RenameResourceAction
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
08.09.08 13:54 #7
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
hier mal ein Beispiel für In-Place Editing eines Baum Elements mit einem JFace TreeViewer per Doppelklick oder F2.
schau mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
package de.tutorials; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnViewerEditor; import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent; import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.viewers.TreeViewerEditor; import org.eclipse.jface.viewers.TreeViewerFocusCellManager; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class JFaceTreeViewerExample extends ApplicationWindow { public JFaceTreeViewerExample(Shell parentShell) { super(parentShell); setBlockOnOpen(true); open(); } protected Control createContents(Composite parent) { final TreeViewer treeViewer = createTreeVewer(parent); treeViewer.setInput(initModel()); return super.createContents(parent); } private TreeViewer createTreeVewer(Composite parent) { final TreeViewer treeViewer = new TreeViewer(parent); treeViewer.setContentProvider(new DefaultTreeContentProvider()); treeViewer.setLabelProvider(new LabelProvider()); treeViewer.getTree().setLinesVisible(true); treeViewer.getTree().setHeaderVisible(true); TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager( treeViewer, new FocusCellOwnerDrawHighlighter(treeViewer)); ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy( treeViewer) { protected boolean isEditorActivationEvent( ColumnViewerEditorActivationEvent event) { return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == SWT.CR) || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; } }; TreeViewerEditor.create(treeViewer, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION); final TextCellEditor textCellEditor = new TextCellEditor(treeViewer .getTree()); TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.NONE); column.getColumn().setWidth(300); column.getColumn().setMoveable(true); column.getColumn().setText("Name"); column.setLabelProvider(new ColumnLabelProvider()); column.setEditingSupport(new EditingSupport(treeViewer) { protected boolean canEdit(Object element) { return true; } protected CellEditor getCellEditor(Object element) { return textCellEditor; } protected Object getValue(Object element) { if (element instanceof Named) { return ((Named) element).getName(); } return element.toString(); } protected void setValue(Object element, Object value) { if (element instanceof Named) { ((Named) element).setName(String.valueOf(value)); } treeViewer.update(element, null); } }); treeViewer.getTree().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.F2) { // TODO find right column... treeViewer.editElement(((IStructuredSelection) treeViewer .getSelection()).getFirstElement(), 0); } } }); return treeViewer; } static class DefaultTreeContentProvider implements ITreeContentProvider { @Override public Object getParent(Object element) { return null; } @Override public boolean hasChildren(Object element) { if (element == null) return false; if (element instanceof Disc) { return !((Disc) element).getTracks().isEmpty(); } return false; } final static Object[] EMPTY = new Object[0]; @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof List) { return ((List) parentElement).toArray(); } else if (parentElement instanceof Disc) { return ((Disc) parentElement).getTracks().toArray(); } return EMPTY; } @Override public Object[] getElements(Object inputElement) { return getChildren(inputElement); } @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } private List<Disc> initModel() { List<Disc> compactDiscs = new ArrayList<Disc>(); for (int i = 0; i < 3; i++) { Disc compactDisc = new Disc("cd name " + i); for (int j = 0; j < 10; j++) { Track t = new Track("track " + j, j * j, compactDisc); compactDisc.addTrack(t); } compactDiscs.add(compactDisc); } return compactDiscs; } /** * @param args */ public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); new JFaceTreeViewerExample(shell); } static interface Named { String getName(); void setName(String name); } static class Disc implements Named { String name; List<Track> tracks; public Disc(String name) { this.name = name; tracks = new ArrayList<Track>(); } public boolean addTrack(Track o) { return tracks.add(o); } public List<Track> getTracks() { return tracks; } public String getName() { return name; } @Override public String toString() { return name; } @Override public void setName(String name) { this.name = name; } } static class Track implements Named { private String name; private int length; // in seconds private Disc associatedCompactDisc; public Track(String name, int length, Disc associatedCompactDisc) { this.associatedCompactDisc = associatedCompactDisc; this.length = length; this.name = name; } public Disc getAssociatedCompactDisc() { return associatedCompactDisc; } public String getName() { return name; } @Override public String toString() { return name; } @Override public void setName(String name) { this.name = name; } } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
01.03.10 14:08 #8Benni1984 Tutorials.de Gastzugang
Hallo,
entschuldigung für daas Ausgraben dieses Themas,
aber ich habe gerade ein Problem.
Ich habe anhand dieses Beispiels, einen TreeViewer mit zwei Columns erstellt bei dem die zweite Column mit CellEditoren versorgt wird. Es funktioniert auch alles einwandfrei außer in dem Falle das mein TreeViewer nur ein Element enhält also:
-------------------------
| Element | Value |
-------------------------
Klicke ich jetzt auf Element oder Auf Value soll der Cell Editor angehen, was auch problemlos klappt wenn mehr als ein Element mit Value angezeigt wird.
Bei einem Element erhalte ich folgenden StackTrace:
------------------------
eclipse.buildId=M20090917-0800
java.version=1.6.0_17
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Framework arguments: -product org.eclipse.platform.ide
Command-line arguments: -product org.eclipse.platform.ide -data C:\XXXX/../runtime-EclipseApplication -dev file:C:/XXXXX/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os win32 -ws win32 -arch x86 -console -clean
!ENTRY org.eclipse.jface 4 2 2010-03-01 13:35:44.944
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface".
!STACK 0
java.lang.ClassCastException: org.eclipse.swt.widgets.Tree cannot be cast to org.eclipse.swt.widgets.TreeItem
at org.eclipse.jface.viewers.TreeViewer.getViewerRowFromItem(TreeViewer.java:785)
at org.eclipse.jface.viewers.ColumnViewer.editElement(ColumnViewer.java:434)
at org.eclipse.jface.viewers.TreeViewer.editElement(TreeViewer.java:1148)
at com.XXXXXX.configView.ConfigView$3.run(ConfigView.java:171)
at com.XXXXXX.configView.ConfigView$2.selectionChanged(ConfigView.java:120)
at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:162)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.runtime.Platform.run(Platform.java:888)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:160)
at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2132)
at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1160)
at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1190)
at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:228)
at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:222)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:389)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3880)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3473)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java: 110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
at org.eclipse.equinox.launcher.Main.main(Main.java:1287)
---------------------
Irgendwie gibt die Methode getViewerRowFromItem einen Tree zurück anstatt ein TreeItem und der Vorgang schlägt fehl.
Hat jemand vielleicht eine Idee woran das liegen könnte? Ich bin mit meinem Látein am Ende.
Danke auf jedenfall für eure Hilfe!
Benni
-
01.03.10 14:40 #9Benni1984 Tutorials.de Gastzugang
Ergänzend hier noch der Code meines TreeViewers:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
public class ConfigView extends ViewPart { public TreeViewer viewer; public static final String ID = "XXXXXXX.ConfigView"; //$NON-NLS-1$ private Action selectionChangedAction; private XmlCursor lastsel = null; private DetailedView detailedView; public ConfigView() { } /** * Create contents of the view part. * * @param parent */ @Override public void createPartControl(Composite parent) { // make tree view viewer = new TreeViewer(parent, SWT.MULTI | SWT.FULL_SELECTION); { // make element colum of tree view TreeViewerColumn treeViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); TreeColumn treeColumn = treeViewerColumn.getColumn(); treeColumn.setWidth(300); treeColumn.setText("Element"); // make value column of tree view TreeViewerColumn treeViewerColumn2 = new TreeViewerColumn(viewer, SWT.NONE); TreeColumn treeColumn2 = treeViewerColumn2.getColumn(); treeColumn2.setWidth(300); treeColumn2.setText("Value"); // adding editingsupport to the column treeViewerColumn2.setEditingSupport(new ConfigViewEditingSupport( viewer, 2, this)); // making the activation strategy for the editors TreeViewerEditor.create(viewer, new ColumnViewerEditorActivationStrategy(viewer), ColumnViewerEditor.DEFAULT); // making cellFocus manger that reacts on key, mouse etc. TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager( viewer, new FocusCellOwnerDrawHighlighter(viewer)); // activation strategy for editor in cell which events he react ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy( viewer) { protected boolean isEditorActivationEvent( ColumnViewerEditorActivationEvent event) { return event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; } }; // create the editors with defined cellmanger and activation // strategy TreeViewerEditor.create(viewer, focusCellManager, actSupport, TreeViewerEditor.DEFAULT); } // configurate tree viewer.getTree().setHeaderVisible(true); viewer.getTree().setLinesVisible(true); // set content provider viewer.setContentProvider(new ConfigViewContentProvider()); // set label provider viewer.setLabelProvider(new ConfigViewLabelProvider()); // add selection changed listener viewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { selectionChangedAction.run(); } }); // define action selectionChangedAction = new Action() { public void run() { XmlCursor cursor = (XmlCursor) ((IStructuredSelection) viewer .getSelection()).getFirstElement(); if (detailedView == null) { // getting detailed view try { detailedView = (DetailedView) PlatformUI .getWorkbench() .getActiveWorkbenchWindow() .getActivePage() .showView("XXXXXX.DetailView"); } catch (PartInitException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (lastsel == null) { viewer.editElement(((IStructuredSelection) viewer.getSelection()).getFirstElement(), 1); } } else if (((IStructuredSelection) viewer.getSelection()).getFirstElement()= null) { if (!((IStructuredSelection) viewer.getSelection()).getFirstElement().equals(lastsel)) { viewer.editElement(((IStructuredSelection) viewer.getSelection()).getFirstElement(), 1); } } }; } /** * Create the actions. */ private void createActions() { // Create the actions } /** * Initialize the toolbar. */ private void initializeToolBar() { IToolBarManager toolbarManager = getViewSite().getActionBars() .getToolBarManager(); } /** * Initialize the menu. */ private void initializeMenu() { IMenuManager menuManager = getViewSite().getActionBars() .getMenuManager(); } @Override public void setFocus() { // Set the focus } }
-
Hi,
auf den Code von Thomas Darimont hab ich ein paar Fragen.
den TreeViewerColumn, kann ich es irgendwie erreichen, dass die die Colum die gesamte Viewbreite nutzt? Ich hab nur eine Spalte, wäre gut wenn die den ganzen Raum ausfüllen würde.
dann als zweite Frage, kann dieser TreeEditorViewer keine mehrfach Selektion? Das krieg ich bei mir nicht aktiviert?
Ähnliche Themen
-
Drag Support für JFace Treeviewer
Von TLang im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 03.01.08, 12:28 -
JFace - TreeViewer -> Nur für Explorer ?
Von Trash im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 05.05.07, 17:33 -
JFace TreeViewer und User-Interaktion
Von chris_sit im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 27.01.07, 17:33 -
JFace TreeViewer
Von chris_sit im Forum JavaAntworten: 2Letzter Beitrag: 22.11.06, 18:19 -
JFace: TreeViewer.setInput
Von testalucida im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 12.09.04, 15:13





Zitieren

Login





