SWT - TableViewer的添加删除按钮到列在表中 [英] SWT - Tableviewer adding a remove button to a column in the table
问题描述
是否有可能一个删除按钮添加到一个单元格在一个表中?我有5列的表,我想补充一个6列。我想第6列有各行中的删除按钮。
例如行:
| 10002 |部分|金属| 001 |是| [删除] |
块引用>这种方式,用户可以通过只点击按钮除去任何不需要的行。
我有在表中的标记栏,它是组合框。我创建了一个扩展
EditingSupport
A类。我会需要做一个扩展其它类
EditingSupport
,但创建一个按钮,而不是组合框的?修改
公共类AplotDataTableViewer TableViewer的扩展
{ 公共AplotDataTableViewer(复合父母,INT风格)
{
超(父,风格); 表的表=的GetTable();
的GridData的GridData =新的GridData(SWT.FILL,SWT.FILL,真实,真实);
table.setLayoutData(的GridData);
createColumns();
table.setHeaderVisible(真);
table.setLinesVisible(真);
setContentProvider(新ArrayContentProvider());
} 私人无效createColumns(){ 的String []标题= {ITEMID,REVID,PRL,数据集名,EC标记};
INT []界限= {150,150,100,150,100}; TableViewerColumn COL = createTableViewerColumn(标题[0],界限[0],0);
col.setLabelProvider(新ColumnLabelProvider(){
公共字符串的getText(Object元素){
如果(元素的instanceof AplotDataModel.AplotDatasetData)
返回((AplotDataModel.AplotDatasetData)元素).getDataset()的toString()。
返回super.getText(元);
}
}); 山口= createTableViewerColumn(标题[1],界限[1],1);
col.setLabelProvider(新ColumnLabelProvider(){
公共字符串的getText(Object元素){
如果(元素的instanceof AplotDataModel.AplotDatasetData)
返回((AplotDataModel.AplotDatasetData)元素).getRev()的toString()。
返回super.getText(元);
}
}); 山口= createTableViewerColumn(标题[2],界限[2],2);
col.setLabelProvider(新ColumnLabelProvider(){
公共字符串的getText(Object元素){
如果(元素的instanceof AplotDataModel.AplotDatasetData)
返回((AplotDataModel.AplotDatasetData)元素).getPRLValue()的toString()。
返回super.getText(元);
}
});
山口= createTableViewerColumn(标题[3],界限[3],3);
col.setLabelProvider(新ColumnLabelProvider(){
公共字符串的getText(Object元素){
如果(元素的instanceof AplotDataModel.AplotDatasetData)
返回((AplotDataModel.AplotDatasetData)元素).getDatasetName()的toString()。
返回super.getText(元);
}
}); 山口= createTableViewerColumn(标题[4],界限[4],4);
col.setLabelProvider(新ColumnLabelProvider(){
公共字符串的getText(Object元素){
如果(元素的instanceof AplotDataModel.AplotDatasetData)
返回((AplotDataModel.AplotDatasetData)元素).getMarkupValue();
返回super.getText(元);
}
}); col.setEditingSupport(新OptionEditingSupport(本)); } 私人TableViewerColumn createTableViewerColumn(字符串头,诠释宽度,INT IDX)
{
TableViewerColumn列=新TableViewerColumn(这一点,SWT.LEFT,IDX);
column.getColumn()的setText(标题)。
column.getColumn()setWidth(宽度)。
。column.getColumn()的setResizable(真);
。column.getColumn()setMoveable(真); 返回列;
}
}修改
山坳= createTableViewerColumn(标题[5],边界[5],5);
col.setLabelProvider(新ColumnLabelProvider(){
@覆盖
公共无效更新(ViewerCell细胞){
表项项=新的表项(的GetTable(),SWT.NONE);
Button按钮=新按钮(的GetTable(),SWT.NONE);
button.setText(X);
。getControl()的setBackground(item.getBackground());
TableEditor编辑器=新TableEditor(的GetTable());
editor.grabHorizontal = TRUE;
editor.grabVertical = TRUE;
editor.setEditor(按钮,项目,参数:columnIndex);
editor.layout();
}
});
解决方案下面是示例工作版本。
公共类TableEditorTest { / **
* @参数ARGS
* /
公共静态无效的主要(字串[] args){
显示显示=新显示();
壳牌=新的外壳(显示); shell.setLayout(新FillLayout的());
TableViewer的观众=新的TableViewer(外壳);
。viewer.getTable()setHeaderVisible(真);
。viewer.getTable()setLinesVisible(真);
viewer.setContentProvider(新ArrayContentProvider()); TableColumn的列=新的TableColumn(viewer.getTable(),SWT.NONE);
column.setText(名);
column.setWidth(100);
TableViewerColumn firstNameCol =新TableViewerColumn(浏览器,列);
firstNameCol.setLabelProvider(新ColumnLabelProvider(){ @覆盖
公共字符串的getText(Object元素){
人P =(人)元素; 返回p.getFirstName();
} }); 列=新的TableColumn(viewer.getTable(),SWT.NONE);
column.setText(姓氏);
column.setWidth(100);
TableViewerColumn lastNameCol =新TableViewerColumn(浏览器,列);
lastNameCol.setLabelProvider(新ColumnLabelProvider(){ @覆盖
公共字符串的getText(Object元素){
人P =(人)元素; 返回p.getLastName();
} });
列=新的TableColumn(viewer.getTable(),SWT.NONE);
column.setText(操作);
column.setWidth(100);
TableViewerColumn actionsNameCol =新TableViewerColumn(浏览器,列);
actionsNameCol.setLabelProvider(新ColumnLabelProvider(){
//确保在处置这些按钮时,浏览器输入的变化
地图<对象,按钮和GT;按钮=新的HashMap<对象,按钮和GT;();
@覆盖
公共无效更新(ViewerCell细胞){ 表项项=(表项)cell.getItem();
Button按钮;
如果(buttons.containsKey(cell.getElement()))
{
按钮= buttons.get(cell.getElement());
}
其他
{
按钮=新按钮((复合)cell.getViewerRow()getControl(),SWT.NONE。);
button.setText(删除);
buttons.put(cell.getElement(),按钮);
}
TableEditor编辑器=新TableEditor(item.getParent());
editor.grabHorizontal = TRUE;
editor.grabVertical = TRUE;
editor.setEditor(按钮,项目,cell.getColumnIndex());
editor.layout();
} }); 人P1 =新的Person();
p1.setFirstName(乔治);
p1.setLastName(伯恩); 人P2 =新的Person();
p2.setFirstName(亚当);
p2.setLastName(Silva的); 人P3 =新的Person();
p3.setFirstName(内森);
p3.setLastName(兜帽); 清单<&人GT;人=新的ArrayList<&人GT;();
persons.add(P1);
persons.add(P2);
persons.add(P3); viewer.setInput(人); shell.open();
而(!shell.isDisposed())
{ 如果(!display.readAndDispatch())
{
display.sleep();
}
} display.dispose(); }
私有静态类Person
{ 字符串的firstName;
字符串的lastName; 人()
{ } 公共字符串的getFirstName(){
返回的firstName;
} 公共字符串getLastName(){
返回lastName的;
} 公共无效setFirstName(字符串的firstName){
this.firstName =名字;
} 公共无效setLastName(字符串的lastName){
this.lastName = lastName的;
} }
}Is it possible to add a remove button to a cell in a table? I have a table with 5 columns, I would like to add a 6th column. I want the 6th column to have a remove button in each row.
Example Row:
| 10002 | part | Metal | 001 | Yes | [Remove] |
That way the user can remove any unwanted rows by just clicking the button.
I have a markup column in the table and it is ComboBox. I created a class that extends
EditingSupport
.Would I need to make a another class extending
EditingSupport
, but creating a button instead of ComboBox?EDIT
public class AplotDataTableViewer extends TableViewer { public AplotDataTableViewer(Composite parent, int style) { super(parent, style); Table table = getTable(); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); table.setLayoutData(gridData); createColumns(); table.setHeaderVisible(true); table.setLinesVisible(true); setContentProvider(new ArrayContentProvider()); } private void createColumns() { String[] titles = { "ItemId", "RevId", "PRL", "Dataset Name", "EC Markup" }; int[] bounds = { 150, 150, 100, 150, 100 }; TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0); col.setLabelProvider(new ColumnLabelProvider() { public String getText(Object element) { if(element instanceof AplotDataModel.AplotDatasetData) return ((AplotDataModel.AplotDatasetData)element).getDataset().toString(); return super.getText(element); } }); col = createTableViewerColumn(titles[1], bounds[1], 1); col.setLabelProvider(new ColumnLabelProvider() { public String getText(Object element) { if(element instanceof AplotDataModel.AplotDatasetData) return ((AplotDataModel.AplotDatasetData)element).getRev().toString(); return super.getText(element); } }); col = createTableViewerColumn(titles[2], bounds[2], 2); col.setLabelProvider(new ColumnLabelProvider() { public String getText(Object element) { if(element instanceof AplotDataModel.AplotDatasetData) return ((AplotDataModel.AplotDatasetData)element).getPRLValue().toString(); return super.getText(element); } }); col = createTableViewerColumn(titles[3], bounds[3], 3); col.setLabelProvider(new ColumnLabelProvider() { public String getText(Object element) { if(element instanceof AplotDataModel.AplotDatasetData) return ((AplotDataModel.AplotDatasetData)element).getDatasetName().toString(); return super.getText(element); } }); col = createTableViewerColumn(titles[4], bounds[4], 4); col.setLabelProvider(new ColumnLabelProvider() { public String getText(Object element) { if(element instanceof AplotDataModel.AplotDatasetData) return ((AplotDataModel.AplotDatasetData)element).getMarkupValue(); return super.getText(element); } }); col.setEditingSupport(new OptionEditingSupport(this)); } private TableViewerColumn createTableViewerColumn(String header, int width, int idx) { TableViewerColumn column = new TableViewerColumn(this, SWT.LEFT, idx); column.getColumn().setText(header); column.getColumn().setWidth(width); column.getColumn().setResizable(true); column.getColumn().setMoveable(true); return column; } }
EDIT
col = createTableViewerColumn(titles[5], bounds[5], 5); col.setLabelProvider(new ColumnLabelProvider() { @Override public void update(ViewerCell cell) { TableItem item = new TableItem(getTable(),SWT.NONE); Button button = new Button(getTable(),SWT.NONE); button.setText("X"); getControl().setBackground(item.getBackground()); TableEditor editor = new TableEditor(getTable()); editor.grabHorizontal = true; editor.grabVertical = true; editor.setEditor(button , item, columnIndex); editor.layout(); } });
解决方案Here is sample working version.
public class TableEditorTest { /** * @param args */ public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); TableViewer viewer = new TableViewer(shell); viewer.getTable().setHeaderVisible(true); viewer.getTable().setLinesVisible(true); viewer.setContentProvider(new ArrayContentProvider()); TableColumn column = new TableColumn(viewer.getTable(), SWT.NONE); column.setText("First Name"); column.setWidth(100); TableViewerColumn firstNameCol = new TableViewerColumn(viewer, column); firstNameCol.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { Person p = (Person)element; return p.getFirstName(); } }); column = new TableColumn(viewer.getTable(), SWT.NONE); column.setText("Last Name"); column.setWidth(100); TableViewerColumn lastNameCol = new TableViewerColumn(viewer, column); lastNameCol.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { Person p = (Person)element; return p.getLastName(); } }); column = new TableColumn(viewer.getTable(), SWT.NONE); column.setText("Actions"); column.setWidth(100); TableViewerColumn actionsNameCol = new TableViewerColumn(viewer, column); actionsNameCol.setLabelProvider(new ColumnLabelProvider(){ //make sure you dispose these buttons when viewer input changes Map<Object, Button> buttons = new HashMap<Object, Button>(); @Override public void update(ViewerCell cell) { TableItem item = (TableItem) cell.getItem(); Button button; if(buttons.containsKey(cell.getElement())) { button = buttons.get(cell.getElement()); } else { button = new Button((Composite) cell.getViewerRow().getControl(),SWT.NONE); button.setText("Remove"); buttons.put(cell.getElement(), button); } TableEditor editor = new TableEditor(item.getParent()); editor.grabHorizontal = true; editor.grabVertical = true; editor.setEditor(button , item, cell.getColumnIndex()); editor.layout(); } }); Person p1 = new Person(); p1.setFirstName("George"); p1.setLastName("Burne"); Person p2 = new Person(); p2.setFirstName("Adam"); p2.setLastName("Silva"); Person p3 = new Person(); p3.setFirstName("Nathan"); p3.setLastName("Cowl"); List<Person> persons = new ArrayList<Person>(); persons.add(p1); persons.add(p2); persons.add(p3); viewer.setInput(persons); shell.open(); while(!shell.isDisposed()) { if(!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } private static class Person { String firstName; String lastName; Person() { } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; } } }
这篇关于SWT - TableViewer的添加删除按钮到列在表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!