[英]Finding the row index of a clicked button in table cell
我的表的最后一列填充了一個按鈕。 當用戶點擊按鈕時,我想打開一個與按鈕位於同一行的文件。
這是按鈕的列代碼。
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
對於每個按鈕實例,您可以在窗口小部件上設置數據,以幫助您識別按下哪一行按鈕。 創建按鈕時:
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");
...
}
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.