簡體   English   中英

查找表格單元格中單擊按鈕的行索引

[英]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();
  1. 是否可以將選定的索引發送到偵聽器類? 如果他們點擊第一個按鈕 - 如果他們點擊第二個按鈕則發送0 - 發送1

  2. 我甚至需要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();
     }
  }
  1. 為什么上面的代碼總是返回索引0?

編輯

我不完全了解如何獲取按鈕數據中的行索引。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM