jkteater
asked on
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
I want the corresponding file open when the user clicks the button in the same row.
Column / Button Code
Selection Listener Class Code
This is the getIndexOf method in AplotSaveDataModel
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.
I have added a column in my table that is populated with buttons
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();
}
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();
}
}
AplotSaveDataModel.SaveData selected = (( AplotSaveDataModel.SaveData)element);
This value does change when a differnt row is clickedint index = AplotSaveDataModel.getInstance().getIndexOf(selected);
Allways Returns 0This is the getIndexOf method in AplotSaveDataModel
public int getIndexOf(SaveData selected) {
return data.indexOf(selected); //data is a arraylist
}
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.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
:)
ASKER
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. :)
and I hope you will continue to be as I continue to learn. :)Most likely ;)