我桌子的最后一列填充了一个按钮。当用户点击按钮时,我想打开一个与按钮位于同一行的文件。
这是按钮的列代码。
case 6:
Map<Object, Button> buttons = new HashMap<Object, Button>();
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.PUSH);
//button.setText("Adobe");
button.setImage(loadImage("/images/AdobeIcon.png"));
buttons.put(cell.getElement(), button);
}
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button , item, cell.getColumnIndex());
button.addListener(SWT.Selection, new SelectionListener(item, button, cell.getElement()));
editor.layout();
是否可以将所选索引发送到侦听器类? 如果他们点击第一个按钮 - 发送0 如果他们点击第二个按钮 - 发送1
我是否需要TableEditor?
如果可以的话,它会使听众代码变得容易。
这就是我在侦听器代码中正在尝试的。
@Override
public void handleEvent(Event event) {
AplotSaveDataModel.SaveData selected = (( AplotSaveDataModel.SaveData)element);
int index = AplotSaveDataModel.getInstance().getIndexOf(selected);
final File viewerFile = new File(AplotSaveDataModel.getInstance().getSelectedPDFFileName(index));
try {
Desktop.getDesktop().open(viewerFile);
}
catch (IOException e) {
e.printStackTrace();
}
}
修改
我不完全了解如何在按钮的数据中获取行索引。
button.setData("row.id", rowId);
我假设“row.id”是一个键,rowId是值。因此,我需要使用代码填充rowId以获取行索引。
int rowId = "Some code to get the Row Index"?
如果我想获得列索引,我可以做
int rowId = cell.getColumnIndex();
我无法弄清楚如何填充rowId以获取行索引/数字?
以下是获取列号的代码(不需要)
case 6:
Map<Object, Button> buttons = new HashMap<Object, Button>();
TableItem item = (TableItem) cell.getItem();
Button button;
***int rowId = cell.getColumnIndex();***
if(buttons.containsKey(cell.getElement())) {
button = buttons.get(cell.getElement());
}
else
{
button = new Button((Composite) cell.getViewerRow().getControl(),SWT.PUSH);
//button.setText("Adobe");
button.setImage(loadImage("/images/AdobeIcon.png"));
***button.setData("row.id", rowId);***
buttons.put(cell.getElement(), button);
}
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button , item, cell.getColumnIndex());
button.addListener(SWT.Selection, new SelectionListener(item, button, cell.getElement()));
editor.layout();
}
听众类
@Override
public void handleEvent(Event event) {
if (event.widget instanceof Button) {
int rowId = (Integer) event.widget.getData("row.id");
System.out.println("Row Int " + rowId + "\n");
}
请帮助我完成这项工作 - 这是我项目的一个非常重要的部分
***编辑2 *******
public class AplotPDFResultsTableViewer extends TableViewer {
public AplotPDFResultsTableViewer(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());
}
public static Image loadImage(String path)
{
Image newImage = null;
try {
newImage = new Image(null, AplotPDFResultsTableViewer.class.getClassLoader().getResourceAsStream(path));
}
catch(SWTException ex) {
System.out.println("Couldn't find " + path);
ex.printStackTrace();
}
return newImage;
}
private void createColumns() {
TableViewerColumn col = new TableViewerColumn(this , SWT.NONE);
col.getColumn().setWidth(150);
col.getColumn().setText("Creation Date");
col.setLabelProvider(new ColorColumnLabelProvider());
col = new TableViewerColumn(this , SWT.NONE);
col.getColumn().setWidth(150);
col.getColumn().setText("ItemId");
col.setLabelProvider(new ColorColumnLabelProvider());
col = new TableViewerColumn(this , SWT.NONE);
col.getColumn().setWidth(50);
col.getColumn().setText("RevId");
col.setLabelProvider(new ColorColumnLabelProvider());
col = new TableViewerColumn(this , SWT.NONE);
col.getColumn().setWidth(50);
col.getColumn().setText("PRL");
col.setLabelProvider(new ColorColumnLabelProvider());
col = new TableViewerColumn(this , SWT.NONE);
col.getColumn().setWidth(200);
col.getColumn().setText("File Location");
col.setLabelProvider(new ColorColumnLabelProvider());
col = new TableViewerColumn(this , SWT.NONE);
col.getColumn().setWidth(200);
col.getColumn().setText("File Name");
col.setLabelProvider(new ColorColumnLabelProvider());
col = new TableViewerColumn(this , SWT.NONE);
col.getColumn().setWidth(50);
col.getColumn().setText("");
col.setLabelProvider(new ColorColumnLabelProvider());
}
public class ColorColumnLabelProvider extends ColumnLabelProvider {
@Override
public void update(final ViewerCell cell) {
Object element = cell.getElement();
if(element instanceof AplotSaveDataModel.SaveData) {
AplotSaveDataModel.SaveData p = (AplotSaveDataModel.SaveData) element;
switch(cell.getColumnIndex()) {
case 0:
cell.setText(p.getDateTime());
break;
case 1:
cell.setText(p.getItemId());
break;
case 2:
cell.setText(p.getRevId());
break;
case 3:
cell.setText(p.getPRL());
break;
case 4:
//cell.setForeground(black);
cell.setText(p.getFileDir());
break;
case 5:
//cell.setForeground(black);
cell.setText(p.getfileName());
break;
case 6:
Map<Object, Button> buttons = new HashMap<Object, Button>();
TableItem item = (TableItem) cell.getItem();
Button button;
int rowId = cell.getColumnIndex();
if(buttons.containsKey(cell.getElement())) {
button = buttons.get(cell.getElement());
}
else
{
button = new Button((Composite) cell.getViewerRow().getControl(),SWT.PUSH);
//button.setText("Adobe");
button.setImage(loadImage("/images/AdobeIcon.png"));
button.setData("row.id", rowId);
buttons.put(cell.getElement(), button);
}
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button , item, cell.getColumnIndex());
button.addListener(SWT.Selection, new SelectionListener(item, button, cell.getElement()));
editor.layout();
}
}
}
}// End ColorColumnLabelProvider Class
// ===============================================================
//
// SelectionListener Class
//
// ===============================================================
class SelectionListener implements Listener {
TableItem item;
Button editButton;
Object element;
//////////////////////////////////////////////////////////////////////////
// Constructor //
//////////////////////////////////////////////////////////////////////////
public SelectionListener(TableItem item, Button editButton, Object element) {
this.item = item;
this.editButton = editButton;
this.element = element;
}
//////////////////////////////////////////////////////////////////////////
// handleEvent //
//////////////////////////////////////////////////////////////////////////
@Override
public void handleEvent(Event event) {
if (event.widget instanceof Button) {
int rowId = (Integer) event.widget.getData("row.id");
System.out.println("Row Int " + rowId + "\n");
}
//AplotSaveDataModel.SaveData selected = (( AplotSaveDataModel.SaveData)element);
//int index = AplotSaveDataModel.getInstance().getIndexOf(selected);
//final File viewerFile = new File(AplotSaveDataModel.getInstance().getSelectedPDFFileName(index));
//try {
// Desktop.getDesktop().open(viewerFile);
//}
//catch (IOException e) {
// e.printStackTrace();
//}
}
}// End SelectionListener Class
} // End AplotPDFTableViewer Class
答案 0 :(得分:4)
对于每个按钮实例,您可以在窗口小部件上设置数据,以帮助您识别按下哪一行按钮。创建按钮时:
Button button = ...
button.setData("row.id", rowId); // Can also use row index here or something
您也可以将文件路径直接保存为数据。在听众中:
@Override
public void handleEvent(Event event) {
if (event.widget instanceof Button) {
String rowId = event.widget.getData("row.id");
...
}
...
}