Over the years I’ve reported numerous uses for integrating Java components and functionality in Matlab. As I’ve also recently reported, MathWorks is apparently making a gradual shift away from standalone Java-based figures, toward browser-based web-enabled figures. As I surmised a few months ago, MathWorks has created dedicated surveys to solicit user feedbacks on the most important (and undocumented) non-compatible aspects of this paradigm change: one regarding users’ use of the javacomponent function, the other regarding the use of the figure’s JavaFrame property:
- Survey regarding usage of the javacomponent function: http://www.mathworks.com/javacomponent
- Survey regarding usage of the JavaFrame property: http://www.mathworks.com/javaframe
In MathWorks’ words:
In order to extend your ability to build MATLAB apps, we understand you sometimes need to make use of undocumented Java UI technologies, such as the JavaFrame property. In response to your needs, we are working to develop documented alternatives that address gaps in our app building offerings.
To help inform our work and plans, we would like to understand how you are using the JavaFrame property. Based on your understanding of how it is being used within your app, please take a moment to fill out the following survey. The survey will take approximately 1-2 minutes to finish.
I urge anyone who uses one or both of these features to let MathWorks know how you’re using them, so that they could incorporate that functionality into the core (documented) Matlab. The surveys are really short and to the point. If you wish to send additional information, please email George.Caia at mathworks.com.
The more feedback responses that MathWorks will get, the better it will be able to prioritize its R&D efforts for the benefit of all users, and the more likely are certain features to get a documented solution at some future release. If you don’t take the time now to tell MathWorks how you use these features in your code, don’t complain if and when they break in the future…
My personal uses of these features
- Figure: maximize/minimize/restore, enable/disable, always-on-top, toolbar controls, menu customizations (icons, tooltips, font, shortcuts, colors)
- Table: sorting, filtering, grouping, column auto-sizing, cell-specific behavior (tooltip, context menu, context-sensitive editor, merging cells)
- Tree control
- Listbox: cell-specific behavior (tooltip, context menu)
- Tri-state checkbox
- uicontrols in general: various event callbacks (e.g. mouse hover/unhover, focus gained/lost)
- Ability to add Java controls e.g. color/font/date/file selector panel or dropdown, spinner, slider, search box, password field
- Ability to add 3rd-party components e.g. JFreeCharts, JIDE controls/panels
- Figure: undecorated (frameless), other figure frame aspects
- Table: column/cell-specific rendering (alignment, icons, font, fg/bg color, string formatting)
- Listbox: auto-hide vertical scrollbar as needed, cell-specific renderer (icon, font, alignment, fg/bg color)
- Button/checkbox/radio: icons, text alignment, border customization, Look & Feel
- Right-aligned checkbox (button to the right of label)
- Panel: border customization (rounded/matte/…)
You can find descriptions/explanations of many of these in posts I made on this website over the years.
You do great works on matlab.
Yair, thanks for your work to find undocumented features and put pressure on Mathworks so they started to think about really necessary improvements for the Matlab GUI stuff.
Several years ago I was in a clinch with the Mathworks support about the poor support of Matlab for using it as application developement plattform for technical problems. In the last releases I saw some nice improvement in this direction like new data types (string, datetime, categorical …), execution speed improvements, property validation in class definitions, unit testing, Matlab engine API for Java.
I started to develop complex GUI’s (with trees, tables with different renderer like images,check boxes …) directly in Java which I open from inside Matlab. To interact with Matlab (data analysis, numeric computation and graphical representations of results) I used the matconsolectl library to interact with the running Matlab session.
Sadly the newly introduced Matlab Engine API is only useable from outside of Matlab. I have created a request that the MATLAB Engine API is usable from inside MATLAB as well.
From my point of view Matlab should switch to Java8 because more and more Java libraries (Apache Cassandra, Guava, Eclipse collections) require at least Java8. I have opened an issue (case #01673828) in December 2015 but until R2017a Matlab still uses Java7.
Are there other users who like to have a newer Java version?