Solved

Open a File from a Table Column Button Click

Posted on 2013-01-08
4
206 Views
Last Modified: 2013-01-14
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
Comment
Question by:jkteater
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
4 Comments
 
LVL 86

Accepted Solution

by:
CEHJ earned 500 total points
ID: 38756098
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
 
LVL 86

Expert Comment

by:CEHJ
ID: 38774606
:)
0
 

Author Comment

by:jkteater
ID: 38774806
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
 
LVL 86

Expert Comment

by:CEHJ
ID: 38774853
and I hope you will continue to be as I continue to learn. :)
Most likely ;)
0

Featured Post

What Is Transaction Monitoring and who needs it?

Synthetic Transaction Monitoring that you need for the day to day, which ensures your business website keeps running optimally, and that there is no downtime to impact your customer experience.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
This video teaches viewers about errors in exception handling.

695 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question