<Swing Dev> customizing L&Fs in JDK9

Alan Snyder javalists at cbfiddle.com
Fri May 15 20:10:10 UTC 2015


Bundled apps run without a Security Manager, at least they do for me. Users have higher expectations for bundled apps.

The customizations are delivered via a JAR file (and perhaps a JNI library). No need to build a custom JRE.

These are some of the APIs that I know have been used by L&F customizations:

      -> sun.font.CFontManager                              JDK internal API (rt.jar)
      -> sun.font.FontManager                               JDK internal API (rt.jar)
      -> sun.font.FontManagerFactory                        JDK internal API (rt.jar)
      -> com.apple.laf.AquaHighlighter                      JDK internal API (rt.jar)
      -> com.apple.laf.AquaHighlighter$AquaHighlightPainter JDK internal API (rt.jar)
      -> sun.awt.AppContext                                 JDK internal API (rt.jar)
      -> sun.swing.UIAction                                 JDK internal API (rt.jar)
      -> sun.awt.SunToolkit                                 JDK internal API (rt.jar)
      -> com.apple.laf.AquaTableHeaderUI                    JDK internal API (rt.jar)
      -> apple.laf.JRSUIConstants                           JDK internal API (rt.jar)
      -> apple.laf.JRSUIConstants$Orientation               JDK internal API (rt.jar)
      -> apple.laf.JRSUIConstants$State                     JDK internal API (rt.jar)
      -> apple.laf.JRSUIConstants$Size                      JDK internal API (rt.jar)
      -> com.apple.laf.AquaSliderUI                         JDK internal API (rt.jar)
      -> com.apple.laf.AquaTreeUI                           JDK internal API (rt.jar)
      -> com.apple.laf.AquaButtonUI                         JDK internal API (rt.jar)
      -> com.apple.laf.AquaComboBoxUI                       JDK internal API (rt.jar)
      -> com.apple.laf.AquaButtonBorder                     JDK internal API (rt.jar)
      -> com.apple.laf.AquaButtonBorder$Dynamic             JDK internal API (rt.jar)
      -> com.apple.laf.AquaUtilControlSize                  JDK internal API (rt.jar)
      -> com.apple.laf.AquaUtilControlSize$SizeDescriptor   JDK internal API (rt.jar)
      -> com.apple.laf.AquaUtilControlSize$SizeVariant      JDK internal API (rt.jar)
      -> com.apple.laf.AquaBorder                           JDK internal API (rt.jar)
      -> com.apple.laf.AquaListUI                           JDK internal API (rt.jar)
      -> com.apple.laf.AquaPanelUI                          JDK internal API (rt.jar)
      -> com.apple.laf.AquaSplitPaneDividerUI               JDK internal API (rt.jar)
      -> com.apple.laf.AquaSplitPaneUI                      JDK internal API (rt.jar)
      -> com.apple.laf.AquaTabbedPaneUI                     JDK internal API (rt.jar)
      -> com.apple.laf.AquaFocusHandler                     JDK internal API (rt.jar)
      -> com.apple.laf.AquaTableUI                          JDK internal API (rt.jar)
      -> com.apple.laf.AquaFocusHandler                     JDK internal API (rt.jar)
      -> com.apple.laf.AquaButtonToggleUI                   JDK internal API (rt.jar)
      -> com.apple.laf.AquaUtilControlSize                  JDK internal API (rt.jar)
      -> com.apple.laf.AquaUtilControlSize$PropertySizeListener JDK internal API (rt.jar)
      -> com.sun.java.swing.Painter                         JDK internal API (rt.jar)

Probably more would be except that they are package private.

A list of all the things that need fixing in the Aqua L&F would be very long, and not worth creating if there is no support for such a large effort.

As just one example, consider that Yosemite has been out for quite a while now and Java is still using Mavericks rendering on Yosemite.

  Alan


> On May 15, 2015, at 12:49 PM, Phil Race <philip.race at oracle.com> wrote:
> 
> My understanding is that the Aqua L&F classes are already inaccessible
> if there's a SecurityManager so its not a completely new thing.
> Whilst there may be ways around the JDK9 restrictions, what internal Aqua APIs do you need
> to customise ? And how do you deliver those customisations ?
> 
> We are already looking at finding ways to expose some com.apple APIs in a supported way as Java APIs.
> Perhaps something in Aqua can be fixed, or perhaps exposed - perhaps being a key word.
> 
> Note that bundling a JRE is not the same thing as building your own & bundling.
> I expect most applications will want to work with a pre-built Oracle JDK which will hide internal APIs.
> 
> Perhaps
> 
> 
> 
> On 5/15/2015 12:09 PM, Alan Snyder wrote:
>> If my understanding is correct, the classes for several JDK specific L&Fs (Aqua, GTK, and Windows) will become inaccessible to applications in JDK9. Is this true?
>> 
>> I am concerned about the impact of this change for the Aqua look and feel, which historically has lagged behind the platform UI and continues to do so (although progress has been made) and for which both small and large customizations have been written. Blocking access to the Aqua look and feel classes will make such customizations much more difficult, possibly even impossible if native code is involved.
>> 
>> While I understand the desire to protect applications from depending upon JDK specific code, the benefit of this restriction seems small. After all, how many JDK implementations are there for desktop applications on OS X? The current OS X application architecture bundles a JRE in each application, so JDK changes will not break installed applications.
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20150515/48198b01/attachment.html>


More information about the swing-dev mailing list