Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Open a File from a Table Column Button Click

Posted on 2013-01-08
4
Medium Priority
?
211 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 2000 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

Tech or Treat! - Giveaway

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

Question has a verified solution.

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

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…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
This video teaches viewers about errors in exception handling.
Suggested Courses

618 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