Re: add a uicontainer or uipanel to a JPanel
- From: "Yair Altman" <altmanyDEL@xxxxxxxxxxxxxxx>
- Date: Mon, 23 Feb 2009 18:14:02 +0000 (UTC)
"Amir " <amir_ben-dor.nospam@xxxxxxxxxxxxxxxxxx> wrote in message <figibp$3tn$1@xxxxxxxxxxxxxxxxxx>...
"Andrew Watson" <andruwatson@xxxxxxxxxxx> wrote in message
<fclie6$q6i$1@xxxxxxxxxxxxxxxxxx>...
"Yair Altman" <altmanyDEL@xxxxxxxxxxxxxxx> wrote in messagemessage
<fch8o8$ee7$1@xxxxxxxxxxxxxxxxxx>...
"Bill York" <BillDotYork@xxxxxxxxxxxxx> wrote in message
<fc9ttj$eh5$1@xxxxxxxxxxxxxxxxxx>...
"Andrew Watson" <andruwatson@xxxxxxxxxxx> wrote in
JPanel<f9hje3$62v$1@xxxxxxxxxxxxxxxxxx>...
Thanks Yair,
An axis is ultimately what I wanted to add to to a
ton ofbut I figured that a uicontanier or uipanel in which anaxis
can sit might be more native to the Java environment.
The short answer to the posted question is you can't do
that.
The uicontainers and uipanels and axes, for that matter,
just can't be put in arbitrary Java components. It's not
that we don't want to make it possible, it's just a
use thework and other priorities keep coming up.
As for putting an axes in a Java container, you can
figureprint or imwrite commands to dump the contents of a
takeinto a bitmap then shove that into any Java canvas which
can show a bitmap. We've done some hackery where you
couldthe output from imwrite and stuff it onto a JButton for
example.
As for putting non-bitmap axes into Java containers,
theyou tell me more about why you want to do it? What is
Bill,MATLAB thing you can't do without this capability?
Thanks,
Bill
Thanks a lot for your comment Bill. It is sometimes
important to place Matlab axes in Java containers, since
Java (Swing in particular) enables richer GUI than Matlab
enables. For example, if I need JSplitPane functionality I
have to rely on Java, not Matlab, but then I cannot add a
Matlab axes to either side of the split-pane, which is a
major drawback. You'll agree with me, I hope, that
reprogramming a JSplitPane from scratch in Matlab just to
solve the axes issue would be a shameful waste...
Remember that Matlab axes (& children) are rich objects
themselves, and simple imwrite falls far short of the needs
(callbacks and online data updates are just two examples).
If only an axes could be placed within a JContainer, that
would automatically solve all these issues, for all Swing
components.
Yair Altman
Bill,
At the time of posting I was looking for the same
functionality that Yair Altman has mentioned, that of a
JSplitPane. It is not a trivial exercise to code one up
from scratch. Also the results will never be as robust,
fluid or aesthetically pleasing as a JSplitPane.
Thanks for your suggestion of using imwrite or some other
such method but as Yair has pointed out, I also want to
maintain the functionality of an axis object i.e callbacks
and what not.
Andrew
As you know from our past correspondence, there are ways (at
least two I'm aware of) to make a java/matlab figure hybrid
that have java GUI and matlab graphic (aka "the holly
grail"). However, both are non-trivial, non-intuitive, have
limitations (for example, making sure the java components
resize after the user resize the matlab figure) and require
heavy usage of undocumented features. Moreover, it seems
that new Matlab version frequently break such hacks that
worked in the previous version (no real complains here, as
those hacks use UNDOCUMENTED features). However, one gets
tired from using those hacks and want to just implement the
needed business logic instead of fighting with Java/Matlab
integration issues.
Can you comment on when (if at all) will Mathwork be able to
implement a java wrapper around matlab axis that extends
java.com.Component, so we could just drop it inside our
favorite java container as god intended and go on with our
lives.
Amir
For those interested, I've just uploaded a new contribution to the File Exchange called UISplitPane (http://www.mathworks.com/matlabcentral/fileexchange/23073), which mimics JSplitPane behavior with full Matlab support. This means that you can add axes and controls to the split-panes (2 uipanels), and they resize automatically when the split-pane divider is moved interactively or programatically. Feedback is most welcome.
Behind the scenes, the basis is much as Amir has hinted, and similar to the uitab/uitabgroup implementation: I've taken the divider portion of the JSplitPane and coupled it to 2 standard Matlab uipanels as sub-panes. Matlab axes and controls can now easily be added to the uipanels. Property listeners and schema property set-function setup then ensure consistency between the Java and Matlab parts. Special handling was added to ensure usability even in non-Java-enabled Matlabs (e.g., Matlab 6.0 aka R12).
I assume this alleviates a major need in Matlab-Java integration but the basic request from all responders in this thread remains unchanged, quoting Amir: *PLEASE* "implement a java wrapper around matlab axis that extends java.com.Component, so we could just drop it inside our favorite java container as god intended"
Yair Altman
.
- Prev by Date: Reading data from a matrix
- Next by Date: Re: "global" keyboard shortcuts in GUIs
- Previous by thread: Reading data from a matrix
- Next by thread: Maximum point spread in point cloud
- Index(es):