Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

jchooser embeded in GUI - obtain status of buttons and change to save type

Asked by Robert Cumming on 7 Aug 2012

This is a follow on from a previous question.

I am trying to embed a uifile load/save file dialog into another GUI, I'm having issues determining which button was pressed (load/save or cancel) and changing the "open" button to say "Save"

How can I:

1. In the ActionPerformedCallback obtain the jchooser status (i.e. which button was pressed)

2. Change the jchooser to be a save dialog rather than open.

Thanks

%%
import javax.swing.JFileChooser;
d = dialog('windowstyle', 'normal', 'position', [0 0 750 400] );
centerfig ( d )
set ( d, 'visible', 'on' );
[jPanel,hPanel] = javacomponent(javax.swing.JPanel, [], d);
hControl = uicontrol('style','checkbox', 'parent',d,'string','click me', 'units','normalized','position', [0.9 0.8 0.1 0.2]);
set(hPanel, 'units','normalized','position',[0 0 0.9 1.0]);
jchooser = javaObjectEDT('javax.swing.JFileChooser', pwd );
set(handle(jchooser, 'callbackproperties'),'ActionPerformedCallback', 'disp(''Action'')')
% Show the actual dialog
jPanel.add(jchooser)

0 Comments

Robert Cumming

Products

1 Answer

Answer by Malcolm Lidierth on 16 Aug 2012
Edited by Malcolm Lidierth on 16 Aug 2012
Accepted answer

@Robin

Replace 'disp(''Action'')' with a callback

function callback(hObj,evt)
...
end

Within the callback, evt.getActionCommand() will give the button e.g.

evt.getActionCommand()==javax.swing.JFileChooser.APPROVE_SELECTION

will return true for the OK button and

evt.getActionCommand==javax.swing.JFileChooser.CANCEL_SELECTION

for cancel.

For dialog types use e.g.

   setDialogType(javax.swing.JFileChooser.OPEN_DIALOG)

Google "grep JFileChooser" to get links to the source code for JFileChooser.

1 Comment

Robert Cumming on 28 Aug 2012

excellent Batman....

Malcolm Lidierth

Contact us