• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 213
  • Last Modified:

Open a File from a Table Column Button Click

The Table Viewer is created and displayed in a Dialog Class.  The columns and button creation is in a TableViewer class.  

I have added a column in my  table that is populated with buttons
Table with Buttons in Column

I want the corresponding file open when the user clicks the button in the same row.

Column / Button Code

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();
                  }

Open in new window



Selection Listener Class Code

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) {
         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();
        }
      }

Open in new window



   
AplotSaveDataModel.SaveData selected = (( AplotSaveDataModel.SaveData)element);

Open in new window

This value does change when a differnt row is clicked

   
int index = AplotSaveDataModel.getInstance().getIndexOf(selected);

Open in new window

Allways Returns 0

This is the getIndexOf method in AplotSaveDataModel
 
     
public int getIndexOf(SaveData selected) {
       return data.indexOf(selected); //data is a arraylist
     }

Open in new window


I think that the above method may be the issue.  

What is happening - It does not matter which button is clicked.  The file in row 0 is always opened, because the index it always return 0

I am wondering if data.indexOf(selected) returns 0 is element is found and -1 if not.

I would be glad to change the code above, if there is a easier way to preform what is needed.  I just want when the button is clicked the file opens that is in the same row has the button.

Thanks in advance for any help you can give me.
0
jkteater
Asked:
jkteater
  • 3
1 Solution
 
CEHJCommented:
I don't know which parts of the app are SWT, but the correct way to do what you want in Swing is to return a JButton as the CellEditor for the cell in question. You can build in an Action that will open the file
0
 
CEHJCommented:
:)
0
 
jkteaterAuthor Commented:
CEHJ,  I always appreciate your time and suggestions.  You have been a huge help to me and I hope you will continue to be as I continue to learn. :)
0
 
CEHJCommented:
and I hope you will continue to be as I continue to learn. :)
Most likely ;)
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now