以下是有什么区别的:
何时使用查看器和常规小部件?
PS:如果你能帮我找到理解它们的好资源,那将是一个很大的帮助.谢谢你!
我正在为我的主GUI添加一个表.它确实显示并且具有它想要显示的数据.但我觉得我的代码很乱,而且结构不正确.我正在寻找一个使用SWT的人来帮助我将正确的代码放在正确的位置.
A类 - 主GUI TableViewer
B类 - (ArrayList)表格/ B1类数据 - ArrayList结构数据模型
A类 - 有创造方法 TableViewer
//////////////////////////////////////////////////////////////////////////
// createTableViewer() //
//////////////////////////////////////////////////////////////////////////
private TableViewer createTableViewer(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
createColumns(parent, viewer);
table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
// Layout the viewer
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
viewer.setContentProvider(new ArrayContentProvider());
*** Getting Array from Class B ***
viewer.setInput(AplotDataModel.getInstance().getArrayData());
viewer.getControl().setLayoutData(gridData);
return viewer;
}
Run Code Online (Sandbox Code Playgroud)
A类也有createColumns()方法和createTableViewerColumn()方法.
////////////////////////////////////////////////////////////////////////// …Run Code Online (Sandbox Code Playgroud) 我正在使用TableViewer内容提供商,标签提供商,a ICellModifier和TextCellEditors每列.
当用户选择单元格时,如何添加箭头键导航和单元格编辑?我希望这是一种尽可能自然的行为.
在查看了一些在线示例后,似乎有一种旧的方式(使用a TableCursor)和新的方式(TableCursor不与CellEditors?? 混合).
目前,我TableViewer没有光标只会在第一列滚动.底层SWT表将游标显示为null.
是否有通过键盘TableViewer使用CellEditors和单元格导航的好例子?
谢谢!
是否可以向表格中的单元格添加" 删除"按钮?
我有一个包含5列的表,我想添加第6列.我希望第6列在每行中都有一个删除按钮.
示例行:
| 10002 | 部分| 金属| 001 | 是的| Remove |
这样,用户只需单击按钮即可删除任何不需要的行.
我在表中有一个标记列,它是ComboBox.我创建了一个扩展的类EditingSupport.
我是否需要扩展另一个类EditingSupport,但是创建一个按钮而不是ComboBox?
编辑
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 = { …Run Code Online (Sandbox Code Playgroud) 我正在使用SWT创建一个新项目.我将在项目中有3或4个不同的表.我对SWT很新,我发现自己要问我应该使用Table或者它应该是一个TableViewer.
我想学习一些关于何时使用Table和何时TableViewer是最佳路线的良好指导.
TableViewer而不是a 的好处是Table什么?TableViewer吗?Table是最好的方法吗?只是真的想要一些清晰度,所以当我创建项目时,我会以正确的方式做到这一点.
编辑
我创建了一个Tablemodel我用于第一个表的类.但该createColumns方法专用于该特定表.
是否可以拥有模板TableViewer类?
我可以将方法更改为更适用于不同的表吗?
以下是该方法的片段:
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 …Run Code Online (Sandbox Code Playgroud) 我使用TableViewer两列.第一个应该包含文本,第二个应该包含取决于对象状态的图像.标签提供程序是一个扩展LabelProvider和实现的自定义提供程序ITableLayoutProvider.
如果未显示图像,则布局正确,第一列中的文本与左侧对齐.

但是当显示至少一个图像时,第一列中的文本在右侧和中间之间的某处对齐 - 看起来有点难看.

布局很简单:
availableDevicesList = new TableViewer(this, SWT.SINGLE | SWT.BORDER
| SWT.FULL_SELECTION);
availableDevicesList.setContentProvider(new ArrayContentProvider());
Table table = availableDevicesList.getTable();
TableLayout tableLayout = new TableLayout();
table.setLayout(tableLayout);
table.setLinesVisible(true);
tableLayout.addColumnData(new ColumnWeightData(3));
new TableColumn(table, SWT.LEFT);
tableLayout.addColumnData(new ColumnWeightData(1));
new TableColumn(table, SWT.RIGHT);
Run Code Online (Sandbox Code Playgroud)
是什么导致这个问题?
所以我有一个问题,当我将图像添加到JFace表的任何列时,第一列的行为就像它有一个图像,文本缩进了该图像的大小.
这是一个截图,说明了生成它所需代码的观点.反正有没有阻止它发生,因为它真的在我的灯芯上?
问候,
格伦x

package widgets;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class ComponentTest {
private static Image image;
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, true));
TableViewer viewer1 = getViewer(shell, true);
TableViewer viewer2 = getViewer(shell, false);
List<String> rows = new ArrayList<String>(); …Run Code Online (Sandbox Code Playgroud) 我一直想知道为什么我们需要 JFace TableViewers 的 ContentProviders?我知道ContentProvider类的getElements()方法将返回与表上的行相对应的对象数组或集合,当我们在表上时将调用 getElements 。但我的问题会更具体..setInput(input)
getElements 返回一个数组或对象集合,相反,我可以编写自己的方法来返回一个对象数组,然后在表查看器的实例上执行 setInput ,对吗?
有人可以就我们为什么需要 ContentProviders 给我一个不太技术但简短而令人满意的答案吗?如果没有 ContentProviders,如果我尝试在表上设置输入,那么什么也不会显示......所以当谈到 JFace 时,ContentProvider 和 LabelProvider 是必须的......
实际上,我像往常一样构建了一个tableviewer,但最初并没有根据为排序定义的列对所有行进行排序.
我正在使用的代码:
viewer.getTable().setSortColumn(viewer.getTable().getColumn(4));
viewer.getTable().setSortDirection(SWT.UP);
Run Code Online (Sandbox Code Playgroud)
只有在手动单击#4列后,我才能获得正确的顺序,否则它将完全遵循链接到ViewContentProvider的对象列表的"插入顺序".你能帮帮我吗?TNX
我有以下代码,允许我的表中的列按升序或降序排序.
protected void setSortColumn(GridPanelColumn gridPanelColumn, TableColumn column) {
table.setRedraw(false);
// check if already selected
if (sortGridPanelColumn != null && sortGridPanelColumn == gridPanelColumn) {
// toggle sort order
sortAscending = !sortAscending;
} else {
// set new sort column
sortGridPanelColumn = gridPanelColumn;
sortAscending = false;
table.setSortColumn(column);
}
// set sort direction
table.setSortDirection(sortAscending ? SWT.UP : SWT.DOWN);
// refresh table
tableViewer.refresh();
table.setRedraw(true);
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,当用户单击列标题进行排序时,箭头会导致列名出点(例如:Ccy .. ^)而不是(CCy1 Amount).有没有办法关闭箭头的显示?我宁愿不必费心调整我的网格列只是为了适应箭头,以便不形成点.
关于如何做到这一点的任何想法?