100分求助, 谁帮我修改一下代码,有关TreeTableViewer的编辑问题?

dongle2001 2009-04-05 08:46:20
我已经写了一部分代码了,不过我现在已经做不下去了,那位大侠帮我修改一下。
主要的功能就是,实现一个带树型的表格控件,这个表格控件可以编辑,编辑部分应该有一个使用ComboxCellEditor的例子,我可以根据数据的不同,选择使用TextCellEditor还是ComboxCellEditor实现编辑功能。不用我的代码,如果有这样的例子也可以。

package test;

import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeColumn;

import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;

public class TestFrame extends Shell {
public static Element element = null;
static {
element = DocumentFactory.getInstance().createElement("root");
Element f1 = element.addElement("folder");
f1.addAttribute("name", "folder1");
Element e1 = f1.addElement("data");
e1.addAttribute("name", "e1");
e1.addAttribute("value", "v1");
Element e2 = f1.addElement("data");
e2.addAttribute("name", "e2");
e2.addAttribute("value", "v2");
Element f2 = element.addElement("folder");
f2.addAttribute("name", "folder2");
Element e3 = f2.addElement("data");
e3.addAttribute("name", "e3");
e3.addAttribute("value", "v3");
Element e4 = f2.addElement("data");
e4.addAttribute("name", "e4");
e4.addAttribute("value", "v4");
}

/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
TestFrame shell = new TestFrame(display, SWT.SHELL_TRIM);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Create the shell
* @param display
* @param style
*/
public TestFrame(Display display, int style) {
super(display, style);
createContents();
setLayout(new FillLayout());
}

/**
* Create contents of the window
*/
protected void createContents() {
setText("SWT Application");
setSize(500, 375);

final TreeViewer ttv = new TreeViewer(this, SWT.BORDER);
ttv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));

// Set the content and label providers
ttv.setContentProvider(new PlayerTreeContentProvider());
ttv.setLabelProvider(new PlayerTreeLabelProvider());
ttv.setInput(element);

final CellEditor[] cellEditors = new CellEditor[2];
cellEditors[1] = new TextCellEditor(ttv.getTree());
ttv.setCellEditors(cellEditors);
ttv.setColumnProperties(new String[]{"name", "value"});
ttv.setCellModifier(new ICellModifier() {
public boolean canModify(Object element, String property) {
// TODO Auto-generated method stub
Element data = (Element)element;
if (data.getName().compareTo("folder") == 0) {
return false;
}
if (data.getName().compareTo("data") == 0) {
String strName = data.attributeValue("name");
if (strName.compareTo("e1") == 0) {
cellEditors[1] = new ComboBoxCellEditor(
ttv.getTree(), new String[]{"v1", "v5", "v6"});
}
}
return false;
}

public Object getValue(Object element, String property) {
// TODO Auto-generated method stub
Element data = (Element)element;
return data.attributeValue("value");
}

public void modify(Object element, String property, Object value) {
// TODO Auto-generated method stub
Item item = (Item) ((TreeColumn) element).getData();
if (item instanceof Element) {
((Element)item).setAttributeValue("value", value + "");
}
System.out.println(((Element)item).asXML());
}
});

// Set up the table
TreeColumn column1 = new TreeColumn(ttv.getTree(), SWT.CENTER);
column1.setText("Name");
column1.setWidth(200);
TreeColumn column2 = new TreeColumn(ttv.getTree(), SWT.CENTER);
column2.setText("Value");
column2.setWidth(200);
//Expand everything
ttv.expandAll();
// Pack the columns
for (int i = 0, n = ttv.getTree().getColumnCount(); i < n; i++) {
ttv.getTree().getColumn(i).pack();
}
// Turn on the header and the lines
ttv.getTree().setHeaderVisible(true);
ttv.getTree().setLinesVisible(true);
// Pack the window
pack();
}

@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}

class PlayerTreeContentProvider implements ITreeContentProvider {
private static final Object[] EMPTY = new Object[] {};

public Object[] getChildren(Object parentElement) {
// TODO Auto-generated method stub
if (parentElement instanceof Element) {
Object[] objs = ((Element)parentElement).elements().toArray();
return objs;
}
return EMPTY;
}

public Object getParent(Object element) {
// TODO Auto-generated method stub
return ((Element)element).getParent();
}

public boolean hasChildren(Object element) {
// TODO Auto-generated method stub
return getChildren(element).length > 0;
}

public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
return ((Element)inputElement).elements().toArray();
}

public void dispose() {
// TODO Auto-generated method stub

}

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub

}
}

class PlayerTreeLabelProvider implements ITableLabelProvider {
public static final int COLUMN_NAME = 0;
public static final int COLUMN_VALUE = 1;

public String getColumnText(Object element, int columnIndex) {
// TODO Auto-generated method stub
Element data = (Element) element;
System.out.println(data.asXML());
String text = "";
/*switch (columnIndex) {
case COLUMN_NAME:
text = data.attributeValue("name");
break;
case COLUMN_VALUE:
text = data.attributeValue("value");
break;
}*/

return text;
}

public void addListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public void dispose() {
// TODO Auto-generated method stub

}

public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return false;
}

public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
}

...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dantin 2009-04-10
  • 打赏
  • 举报
回复
你看行吗?
package test;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TableTreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;

import org.dom4j.DocumentFactory;
import org.dom4j.Element;

public class TestFrameEx extends Shell {
public static Element element = null;
static {
element = DocumentFactory.getInstance().createElement("root");
Element f1 = element.addElement("folder");
f1.addAttribute("name", "folder1");
Element e1 = f1.addElement("data");
e1.addAttribute("name", "e1");
e1.addAttribute("value", "v1");
Element e2 = f1.addElement("data");
e2.addAttribute("name", "e2");
e2.addAttribute("value", "v2");
Element f2 = element.addElement("folder");
f2.addAttribute("name", "folder2");
Element e3 = f2.addElement("data");
e3.addAttribute("name", "e3");
e3.addAttribute("value", "v3");
Element e4 = f2.addElement("data");
e4.addAttribute("name", "e4");
e4.addAttribute("value", "v4");
}

/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
TestFrameEx shell = new TestFrameEx(display, SWT.SHELL_TRIM);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Create the shell
* @param display
* @param style
*/
public TestFrameEx(Display display, int style) {
super(display, style);
createContents();
setLayout(new FillLayout());
}

/**
* Create contents of the window
*/
protected void createContents() {
setText("SWT Application");
setSize(500, 375);

final TableTreeViewer ttv = new TableTreeViewer(this, SWT.BORDER);
ttv.getTableTree().setLayoutData(new GridData(GridData.FILL_BOTH));

// Set the content and label providers
ttv.setContentProvider(new MyPlayerTreeContentProvider());
ttv.setLabelProvider(new MyPlayerTreeLabelProvider());
ttv.setInput(element);

//final CellEditor[] cellEditors = new CellEditor[2];
//cellEditors[1] = new TextCellEditor(ttv.getTableTree());
/*ttv.setCellEditors(cellEditors);
ttv.setColumnProperties(new String[]{"name", "value"});
ttv.setCellModifier(new ICellModifier() {
public boolean canModify(Object element, String property) {
// TODO Auto-generated method stub
Element data = (Element)element;
if (data.getName().compareTo("folder") == 0) {
return false;
}
if (data.getName().compareTo("data") == 0) {
String strName = data.attributeValue("name");
if (strName.compareTo("e1") == 0) {
cellEditors[1] = new ComboBoxCellEditor(
ttv.getTableTree(), new String[]{"v1", "v5", "v6"});
}
if (property.compareTo("value") == 0)
return true;
}
return false;
}

public Object getValue(Object element, String property) {
// TODO Auto-generated method stub
Element data = (Element)element;
return data.attributeValue("value");
}

public void modify(Object element, String property, Object value) {
// TODO Auto-generated method stub
Item item = (Item) ((TreeColumn) element).getData();
if (item instanceof Element) {
((Element)item).setAttributeValue("value", value + "");
}
System.out.println(((Element)item).asXML());
}
});*/

// Set up the table
TableColumn column1 = new TableColumn(ttv.getTableTree().getTable(), SWT.CENTER);
column1.setText("Name");
column1.setWidth(200);
TableColumn column2 = new TableColumn(ttv.getTableTree().getTable(), SWT.CENTER);
column2.setText("Value");
column2.setWidth(200);
//Expand everything
ttv.expandAll();
// Pack the columns
for (int i = 0, n = ttv.getTableTree().getTable().getColumnCount(); i < n; i++) {
ttv.getTableTree().getTable().getColumn(i).pack();
}
// Turn on the header and the lines
ttv.getTableTree().getTable().setHeaderVisible(true);
ttv.getTableTree().getTable().setLinesVisible(true);
// Pack the window
pack();

ttv.reveal(ttv.getElementAt(0));
}

@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}

class MyPlayerTreeContentProvider implements ITreeContentProvider {
private static final Object[] EMPTY = new Object[] {};

public Object[] getChildren(Object parentElement) {
// TODO Auto-generated method stub
if (parentElement instanceof Element) {
Object[] objs = ((Element)parentElement).elements().toArray();
System.out.println(objs);
return objs;
}
return EMPTY;
}

public Object getParent(Object element) {
// TODO Auto-generated method stub
return ((Element)element).getParent();
}

public boolean hasChildren(Object element) {
// TODO Auto-generated method stub
return getChildren(element).length > 0;
}

public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
return getChildren(inputElement);
}

public void dispose() {
// TODO Auto-generated method stub

}

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub

}
}

class MyPlayerTreeLabelProvider implements ITableLabelProvider {
public static final int COLUMN_NAME = 0;
public static final int COLUMN_VALUE = 1;

public String getColumnText(Object element, int columnIndex) {
// TODO Auto-generated method stub
Element data = (Element) element;
//System.out.println(data.asXML());
String text = "";
switch (columnIndex) {
case COLUMN_NAME:
text = data.attributeValue("name");
break;
case COLUMN_VALUE:
text = data.attributeValue("value");
break;
}

return text;
}

public void addListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public void dispose() {
// TODO Auto-generated method stub

}

public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return false;
}

public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
xuchenxing 2009-04-07
  • 打赏
  • 举报
回复
顶一下
createWang 2009-04-06
  • 打赏
  • 举报
回复
楼主啊,代码太长了。没排版实在...

给个参考:http://www.cn-java.com/www1/?action-viewnews-itemid-2109
pang040328 2009-04-06
  • 打赏
  • 举报
回复
好长啊
dongle2001 2009-04-06
  • 打赏
  • 举报
回复
楼上大哥,我要用SWT做的,不是swing的。
dongle2001 2009-04-06
  • 打赏
  • 举报
回复
楼上大哥,我要用SWT做的,不是swing的。
dongle2001 2009-04-05
  • 打赏
  • 举报
回复
我这还有用TableTreeViewer实现的代码,那位能帮我把编辑部分的实现加上,先谢谢了。

package test;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TableTreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;

import org.dom4j.DocumentFactory;
import org.dom4j.Element;

public class TestFrameEx extends Shell {
public static Element element = null;
static {
element = DocumentFactory.getInstance().createElement("root");
Element f1 = element.addElement("folder");
f1.addAttribute("name", "folder1");
Element e1 = f1.addElement("data");
e1.addAttribute("name", "e1");
e1.addAttribute("value", "v1");
Element e2 = f1.addElement("data");
e2.addAttribute("name", "e2");
e2.addAttribute("value", "v2");
Element f2 = element.addElement("folder");
f2.addAttribute("name", "folder2");
Element e3 = f2.addElement("data");
e3.addAttribute("name", "e3");
e3.addAttribute("value", "v3");
Element e4 = f2.addElement("data");
e4.addAttribute("name", "e4");
e4.addAttribute("value", "v4");
}

/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
TestFrameEx shell = new TestFrameEx(display, SWT.SHELL_TRIM);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Create the shell
* @param display
* @param style
*/
public TestFrameEx(Display display, int style) {
super(display, style);
createContents();
setLayout(new FillLayout());
}

/**
* Create contents of the window
*/
protected void createContents() {
setText("SWT Application");
setSize(500, 375);

final TableTreeViewer ttv = new TableTreeViewer(this, SWT.BORDER);
ttv.getTableTree().setLayoutData(new GridData(GridData.FILL_BOTH));

// Set the content and label providers
ttv.setContentProvider(new MyPlayerTreeContentProvider());
ttv.setLabelProvider(new MyPlayerTreeLabelProvider());
ttv.setInput(element);

//final CellEditor[] cellEditors = new CellEditor[2];
//cellEditors[1] = new TextCellEditor(ttv.getTableTree());
/*ttv.setCellEditors(cellEditors);
ttv.setColumnProperties(new String[]{"name", "value"});
ttv.setCellModifier(new ICellModifier() {
public boolean canModify(Object element, String property) {
// TODO Auto-generated method stub
Element data = (Element)element;
if (data.getName().compareTo("folder") == 0) {
return false;
}
if (data.getName().compareTo("data") == 0) {
String strName = data.attributeValue("name");
if (strName.compareTo("e1") == 0) {
cellEditors[1] = new ComboBoxCellEditor(
ttv.getTableTree(), new String[]{"v1", "v5", "v6"});
}
if (property.compareTo("value") == 0)
return true;
}
return false;
}

public Object getValue(Object element, String property) {
// TODO Auto-generated method stub
Element data = (Element)element;
return data.attributeValue("value");
}

public void modify(Object element, String property, Object value) {
// TODO Auto-generated method stub
Item item = (Item) ((TreeColumn) element).getData();
if (item instanceof Element) {
((Element)item).setAttributeValue("value", value + "");
}
System.out.println(((Element)item).asXML());
}
});*/

// Set up the table
TableColumn column1 = new TableColumn(ttv.getTableTree().getTable(), SWT.CENTER);
column1.setText("Name");
column1.setWidth(200);
TableColumn column2 = new TableColumn(ttv.getTableTree().getTable(), SWT.CENTER);
column2.setText("Value");
column2.setWidth(200);
//Expand everything
ttv.expandAll();
// Pack the columns
for (int i = 0, n = ttv.getTableTree().getTable().getColumnCount(); i < n; i++) {
ttv.getTableTree().getTable().getColumn(i).pack();
}
// Turn on the header and the lines
ttv.getTableTree().getTable().setHeaderVisible(true);
ttv.getTableTree().getTable().setLinesVisible(true);
// Pack the window
pack();

ttv.reveal(ttv.getElementAt(0));
}

@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}

class MyPlayerTreeContentProvider implements ITreeContentProvider {
private static final Object[] EMPTY = new Object[] {};

public Object[] getChildren(Object parentElement) {
// TODO Auto-generated method stub
if (parentElement instanceof Element) {
Object[] objs = ((Element)parentElement).elements().toArray();
System.out.println(objs);
return objs;
}
return EMPTY;
}

public Object getParent(Object element) {
// TODO Auto-generated method stub
return ((Element)element).getParent();
}

public boolean hasChildren(Object element) {
// TODO Auto-generated method stub
return getChildren(element).length > 0;
}

public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
return getChildren(inputElement);
}

public void dispose() {
// TODO Auto-generated method stub

}

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub

}
}

class MyPlayerTreeLabelProvider implements ITableLabelProvider {
public static final int COLUMN_NAME = 0;
public static final int COLUMN_VALUE = 1;

public String getColumnText(Object element, int columnIndex) {
// TODO Auto-generated method stub
Element data = (Element) element;
//System.out.println(data.asXML());
String text = "";
switch (columnIndex) {
case COLUMN_NAME:
text = data.attributeValue("name");
break;
case COLUMN_VALUE:
text = data.attributeValue("value");
break;
}

return text;
}

public void addListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public void dispose() {
// TODO Auto-generated method stub

}

public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return false;
}

public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧