Releases: JFormDesigner/FlatLaf
1.1.1
This is a bug fix release. Users of version 1.1
are recommended to update to 1.1.1
.
Change log
New features and improvements
- Native window decorations: Support disabling native window decorations per
window. (set client propertyJRootPane.useWindowDecorations
tofalse
on root pane). - Support running on WinPE. (issue #279)
Fixed bugs
- Native window decorations: Fixed missing animations when minimizing,
maximizing or restoring a window using window title bar buttons. (issue #282) - Native window decorations: Fixed broken maximizing window when restoring frame
state at startup. (issue #283) - Native window decorations: Fixed double window title bar when first disposing
a window withframe.dispose()
and then showing it again withframe.setVisible(true)
. (issue #277) - Custom window decorations: Fixed NPE in
FlatTitlePane.findHorizontalGlue()
. (issue #275) - Custom window decorations: Fixed right aligned progress bar in embedded menu
bar was overlapping window title. (issue #272) - Fixed missing focus indicators in heavy-weight popups. (issue #273)
- InternalFrame: Fixed translucent internal frame menu bar background if
TitlePane.unifiedBackground
istrue
. (issue #274) - Extras: UI Inspector: Fixed
InaccessibleObjectException
when running in Java 16.
1.1
Highlights
This release comes with fantastic news for Windows 10 users/developers.
Native window decorations on Windows 10
This enables dark frame/dialog title bar and embedded menu bar with all JREs while still having:
- native Window 10 border drop shadows
- native Window 10 resize functionality
- Windows 10 snapping functionality
- native Windows 10 system window menu when right-clicking on title bar or left-clicking on application icon
This feature is enabled by default on Windows 10.
If you don't like/want it, you can disable it with:
UIManager.put( "TitlePane.useWindowDecorations", false );
It is also possible to disable only the embedded menu bar (and keep the dark title pane) with:
UIManager.put( "TitlePane.menuBarEmbedded", false );
It is also possible to disable this on command line with following VM options:
-Dflatlaf.useWindowDecorations=false
-Dflatlaf.menuBarEmbedded=false
If you have following code in your app, you can remove it (no longer necessary):
// enable window decorations
JFrame.setDefaultLookAndFeelDecorated( true );
JDialog.setDefaultLookAndFeelDecorated( true );
Right aligned components in title pane with embedded menu bar on Windows 10
A usual way to add a component to the right side of the menu bar is to first add a horizontal glue component (Box.createHorizontalGlue()
) and then the own component. In a non-embedded menu bar it looks like this:
This now also works for embedded menu bars:
Example for adding own component to right side of menu bar:
JButton myButton = new JButton();
myButton.setIcon( new FlatSVGIcon( "myicon.svg" ) );
myButton.putClientProperty( "JButton.buttonType", "toolBarButton" );
myButton.setFocusable( false );
myMenuBar.add( Box.createHorizontalGlue() );
myMenuBar.add( myButton );
Unified backgrounds on Windows 10
To give your app an even more modern look, you can now use unified backgrounds for window title bar, menu bar and main content. This is similar to what IntelliJ IDEA does.
Enable with:
UIManager.put( "TitlePane.unifiedBackground", true );
You can try this in the FlatLafDemo app with "Options > Unified Title Bar".
Change log
New features and improvements
- Windows 10 only:
- Native window decorations for Windows 10 enables dark frame/dialog title bar
and embedded menu bar with all JREs, while still having native Windows 10
border drop shadows, resize behavior, window snapping and system window menu. (PR #267) - Custom window decorations: Support right aligned components in
JFrame
title bar with embedded menu bar (usingBox.createHorizontalGlue()
). (PR #268) - Custom window decorations: Improved centering of window title with embedded menu bar. (PR #268; issue #252)
- Custom window decorations: Support unified backgrounds for window title bar,
menu bar and main content. If enabled withUIManager.put( "TitlePane.unifiedBackground", true );
then window title bar and menu bar use same background color as main content. (PR #268; issue #254)
- Native window decorations for Windows 10 enables dark frame/dialog title bar
- JIDE Common Layer: Support
JideButton
,JideLabel
,JideSplitButton
,JideToggleButton
andJideToggleSplitButton
. - JIDE Common Layer: The library on Maven Central no longer depends on
com.jidesoft:jide-oss:3.6.18
to avoid problems when another JIDE library
should be used. (issue #270) - SwingX: The library on Maven Central no longer depends on
org.swinglabs.swingx:swingx-all:1.6.5-1
to avoid problems when another
SwingX library should be used. - Support running in JetBrains Projector.
Fixed bugs
- IntelliJ Themes: Fixed text color of CheckBoxMenuItem and RadioButtonMenuItem
in all "Arc" themes. (issue #259)
1.0
FlatLaf 1.0 is here 🎉 😀
Finally, after one and a half years of development, forty 0.x releases,
32 merged PRs, 191 closed issues and hundreds cups of coffee. 😄
It took longer than expected.
Looking back at all the features already implemented, we could also name it 3.0. 😁
FlatLaf is already used in a lot of open-source and commercial applications.
To name only a few: Apache NetBeans, jclasslib, KeyStore Explorer, DbVisualizer, MagicPlot, OWASP ZAP.
Here is a longer list.
Many, many thanks to the community. 🏆 🥇 🚀
Without your feedback, support, feature requests, bug reports and pull requests,
FlatLaf would not be there where it is now.
What's next? The development continues! Stay tuned... 😉
If you like FlatLaf, please give it a star @ GitHub. Thanks!
Change log
New features and improvements
- Extras: UI Inspector: Tooltip is no longer limited to window bounds.
Fixed bugs
- TabbedPane: Custom
TabbedPane.selectedForeground
color did not work when
TabbedPane.foreground
has also custom color. (issue #257) - FileChooser: Fixed display of date in details view if current user is selected
in "Look in" combobox. (Windows 10 only; issue #249) - Table: Fixed wrong grid line thickness in dragged column on HiDPI screens on
Java 9+. (issue #236) - PopupFactory: Fixed
NullPointerException
whenPopupFactory.getPopup()
is
invoked with parameterowner
set tonull
.
1.0-rc3
Change log
New features and improvements
- Extras:
- UI Inspector: Use HTML in tooltip. Display color value in same format as
used in FlatLaf properties files. Added color preview.
- UI Inspector: Use HTML in tooltip. Display color value in same format as
Fixed bugs
- Label and ToolTip: Fixed font sizes for
<code>
,<kbd>
,<big>
,<small>
and<samp>
tags in HTML text. - Fixed color of
<address>
tag in HTML text. - IntelliJ Themes: Fixed table header background when dragging column in "Dark
Flat" and "Light Flat" themes. - CheckBox: Fixed background of check boxes in JIDE
CheckBoxTree
. (regression in 1.0-rc2)
1.0-rc2
Change log
New features and improvements
- Button:
- In "Flat Light" theme, use a slightly thinner border for focused buttons
(because they already have light blue background). - In "Flat Dark" theme, use slightly wider border for focused buttons.
- In "Flat Light" theme, use a slightly thinner border for focused buttons
- CheckBox and RadioButton: In "Flat Dark" theme, use blueish background for
focused components. - Tree: Support disabling wide selection per component. (set client property
JTree.wideSelection
tofalse
). (PR #245) - Tree: Support disabling selection painting per component. Then the tree cell
renderer is responsible for selection painting. (set client property
JTree.paintSelection
tofalse
). - JIDE Common Layer: Support
JidePopupMenu
.
Fixed bugs
- Button: Fixed behavior of Enter key on focused button on Windows
and Linux, which now clicks the focused button (instead of the default
button).- On Windows, this is a regression in 1.0-rc1.
- On macOS, the Enter key always clicks the default button, which
is the platform behavior. - On all platforms, the default button can be always clicked with
Ctrl+Enter keys, even if another button is focused.
- CheckBox and RadioButton: Fill component background as soon as background
color is different to default background color, even if component is not
opaque (which is the default). This paints selection if using the component as
cell renderer a Table, Tree or List. - TextComponents: Border of focused non-editable text components had wrong color.
- Custom window decorations: Fixed top window border in dark themes when running
in JetBrains Runtime.
1.0-rc1
Highlights
Many small improvements, polishing and fixes.
But the real highlight is the version number. 😉
FlatLaf finally leaves 0.x
and enters 1.x
🥇 🎉 😄
Change log
New features and improvements
- Button: Disabled
Button.defaultButtonFollowsFocus
on Windows (as on other
platforms). If you like to keep the old behavior in your application, use:
if(SystemInfo.isWindows) UIManager.put("Button.defaultButtonFollowsFocus",true);
. - ComboBox, Spinner and SplitPaneDivider: Added pressed feedback to arrow buttons.
- Slider: Support per component custom thumb and track colors via
JSlider.setForeground(Color)
andJSlider.setBackground(Color)
. - Slider: Improved thumb hover and pressed colors.
- TextComponent: Clip placeholder text if it does not fit into visible area. (PR #229)
- macOS: Improved font rendering on macOS when using JetBrains Runtime. (PRs #237, #239 and #241)
- Extras: UI defaults inspector:
- Support embedding UI defaults inspector panel into any window. See
FlatUIDefaultsInspector.createInspectorPanel()
. - Copy selected keys and values into clipboard via context menu.
- Support wildcard matching in filter (
*
matches any number of characters,
?
matches a single character,^
beginning of line,$
end of line).
- Support embedding UI defaults inspector panel into any window. See
- IntelliJ Themes:
- Added hover and pressed feedback to Button, CheckBox, RadioButton and
ToggleButton. (issue #176) - Added "Material Theme UI Lite / Moonlight" theme.
- Updated "Dracula", "Gradianto" and "Material Theme UI Lite" themes.
- Added hover and pressed feedback to Button, CheckBox, RadioButton and
Fixed bugs
- Button and ToggleButton: Threat Unicode surrogate character pair as single
character and make button square. (issue #234) - Button and ToggleButton: ToolBar buttons now respect explicitly set background
color. If no background color is set, then the button background is not
painted anymore. (issue #191) - ToggleButton: Tab style buttons (client property
JButton.buttonType
is
tab
) now respect explicitly set background color. - TabbedPane: Fixed
IndexOutOfBoundsException
when using tooltip text on close
buttons and closing last/rightmost tab. (issue #235) - TabbedPane: Fixed scrolling tabs with touchpads and high-resolution mouse wheels.
- Extras: Added missing export of package
com.formdev.flatlaf.extras.components
to Java 9 module descriptor. - JIDE Common Layer:
- Invoke
LookAndFeelFactory.installJideExtension()
when using FlatLaf UI
delegates. (issue #230) - RangeSlider: Fixed slider focused colors in IntelliJ themes.
- Invoke
- IntelliJ Themes:
- Fixed menu item check colors.
- Fixed
MenuItem.underlineSelectionColor
. - Fixed List, Tree and Table
selectionInactiveForeground
in light Arc themes. - Fixed List and Table background colors in Material UI Lite themes.
- Fixed menu accelerator colors in Monocai theme. (issue #243)
0.46
Highlights
Slider
Clicking on slider track now immediately moves the thumb to mouse location and starts dragging the thumb.
This is how sliders work in current desktop operating systems, in smartphones and even on web pages.
If snap to tick is enabled, then snapping is now done while dragging thumb.
Extras: Component extension classes
Some FlatLaf UI delegates already provide additional features that can be enabled via client properties.
E.g. placeholder text for text fields:
Which can be enabled via client property:
myTextField.putClientProperty("JTextField.placeholderText", "Search");
Starting with this release, there are now component classes available in the FlatLaf Extras addon,
that allows easier access to these features. E.g.:
FlatTextField myTextField = new FlatTextField();
myTextField.setPlaceholderText( "Search" );
See package com.formdev.flatlaf.extras.components Javadoc for complete list of components.
Change log
New features and improvements
- Slider and JIDE RangeSlider: Clicking on track now immediately moves the thumb
to mouse location and starts dragging the thumb.
UseUIManager.put( "Slider.scrollOnTrackClick", true )
to enable old behavior
that scrolls the thumb when clicking on track. - Slider: Snap to ticks is now done while dragging the thumb.
UseUIManager.put( "Slider.snapToTicksOnReleased", true )
to enable old behavior
that snaps to ticks on mouse released. - Extras: Added standard component extension classes that provides easy access
to FlatLaf specific client properties (see packagecom.formdev.flatlaf.extras.components
in FlatLaf Extras). - Extras: Renamed tri-state check box class from
com.formdev.flatlaf.extras.TriStateCheckBox
to
com.formdev.flatlaf.extras.components.FlatTriStateCheckBox
.
Also changed/improved API and added javadoc. - Extras: Renamed SVG utility class from
com.formdev.flatlaf.extras.SVGUtils
tocom.formdev.flatlaf.extras.FlatSVGUtils
. - IntelliJ Themes: Added flag whether a theme is dark to
FlatAllIJThemes.INFOS
. (issue #221) - JIDE Common Layer: Support
TristateCheckBox
.
Fixed bugs
- Slider: Fixed painting of colored track if
JSlider.inverted
istrue
. - Table and TableHeader: Fixed missing right vertical grid line if using table
as row header in scroll pane. (issues #152 and #46) - TableHeader: Fixed position of column separators in right-to-left component orientation.
- ToolTip: Fixed drop shadow for wide tooltips on Windows and Java 9+. (issue #224)
- SwingX: Fixed striping background highlighting color (e.g. alternating table
rows) in dark themes. - Fixed: If text antialiasing is disabled (in OS system settings or via
-Dawt.useSystemAAFontSettings=off
), then some components still did use
antialiasing to render text (not-editable ComboBox, ProgressBar, Slider,
TabbedPane and multiline ToolTip). (issue #227)
0.45
Highlights
New slider look (PR #214)
The slider has a new beautiful look:
Improved slider customizing (PR #214)
JIDE RangeSlider support (PR #209)
Thank to the contribution of @basix86, FlatLaf supports JIDE RangeSlider component:
Change log
New features and improvements
- Slider: New design, added hover and pressed feedback and improved customizing. (PR #214)
- JIDE Common Layer: Support
RangeSlider
. (PR #209) - IntelliJ Themes:
- Added "Gradianto Nature Green" theme.
- Updated "Arc Dark", "Cyan", "Dark purple", "Gradianto", "Gray", "Gruvbox"
and "One Dark" themes.
- TabbedPane: Support hiding tab area if it contains only one tab. (set client
propertyJTabbedPane.hideTabAreaWithOneTab
totrue
) - MenuBar: Support different underline menu selection style UI defaults for
MenuBar
andMenuItem
. (PR #217; issue #216)
Fixed bugs
- Table: Do not paint last vertical grid line if auto-resize mode is not off. (issue #46)
- Table: Fixed unstable grid line thickness when scaled on HiDPI screens. (issue #152)
- TabbedPane: No longer add (internal) tab close button component as child to
JTabbedPane
. (issue #219) - Custom window decorations: Title bar was not hidden if window is in
full-screen mode. (issue #212)
0.44
Highlights
TabbedPane improvements
It started with implementing tab scrolling using mouse wheel
and ended with one of the most powerful Swing tabbed panes...
Try the Tabs tab in the FlatLaf Demo to see it live 😉
See PRs for configuration options.
Mouse wheel scrolling (PR #187)
"Show Hidden Tabs" button/popup (PR #190)
Scroll arrow buttons on both sides of the tab area (PR #211)
Closable tabs (PR #193)
Custom tab area components (PR #192)
Tab icon placement (PR #199)
Tab area alignment (PR #199)
Tab title alignment
Tab width mode (PR #199)
Minimum/maximum tab width (#199)
Change log
New features and improvements
- TabbedPane: In scroll tab layout, added "Show Hidden Tabs" button to trailing
side of tab area. If pressed, it shows a popup menu that contains (partly)
hidden tabs and selecting one activates that tab. (PR #190; issue #40) - TabbedPane: Support forward/backward scroll arrow buttons on both sides of tab
area. Backward button on left side, forward button on right side. Not
applicable scroll buttons are hidden. (PR #211; issue #40) - TabbedPane: Support specifying default tab layout policy for all tabbed panes
in the application via UI valueTabbedPane.tabLayoutPolicy
. E.g. invoke
UIManager.put( "TabbedPane.tabLayoutPolicy", "scroll" );
to use scroll layout. - TabbedPane: Support tab scrolling with mouse wheel (in scroll tab layout). (PR #187; issue #40)
- TabbedPane: Repeat scrolling as long as scroll arrow buttons are pressed. (PR #187; issue #40)
- TabbedPane: Support adding custom components to left and right sides of tab
area. (set client propertyJTabbedPane.leadingComponent
or
JTabbedPane.trailingComponent
to ajava.awt.Component
) (PR #192; issue #40) - TabbedPane: Support closable tabs. (PR #193; issues #31 and #40)
- TabbedPane: Support minimum or maximum tab widths. (set client property
JTabbedPane.minimumTabWidth
orJTabbedPane.maximumTabWidth
to an integer) (PR #199) - TabbedPane: Support alignment of tab area. (set client property
JTabbedPane.tabAreaAlignment
to"leading"
,"trailing"
,"center"
or"fill"
) (PR #199) - TabbedPane: Support horizontal alignment of tab title and icon. (set client
propertyJTabbedPane.tabAlignment
toSwingConstants.LEADING
,
SwingConstants.TRAILING
orSwingConstants.CENTER
) - TabbedPane: Support equal and compact tab width modes. (set client property
JTabbedPane.tabWidthMode
to"preferred"
,"equal"
or"compact"
) (PR #199) - TabbedPane: Support left, right, top and bottom tab icon placement. (set
client propertyJTabbedPane.tabIconPlacement
toSwingConstants.LEADING
,
SwingConstants.TRAILING
,SwingConstants.TOP
orSwingConstants.BOTTOM
) (PR #199) - Support painting separator line between window title and content (use UI value
TitlePane.borderColor
). (issue #184) - Extras:
FlatSVGIcon
now allows specifying icon width and height in
constructors. (issue #196) - SplitPane: Hide not applicable expand/collapse buttons. Added tooltips to
expand/collapse buttons. (issue #198) - SplitPane: Added grip to divider. Can be disabled with
UIManager.put( "SplitPaneDivider.style", "plain" )
. (issue #179)
Fixed bugs
- Custom window decorations: Not visible menu bar is now ignored in layout.
- Popups using
JToolTip
components did not respect their location. (issue
#188; regression in 0.42 in fix for #164) - IntelliJ Themes: Added suffix "(Material)" to names of all Material UI Lite
themes to avoid duplicate theme names. (issue #201) - Extras:
FlatSVGIcon
icons were not painted in disabled labels and disabled
tabs. (issue #205)
0.43
Highlights
TabbedPane styling
Made tabs separator color lighter in dark themes to make it easier for the user to recognize tabbed panes.
Change log
New features and improvements
- TabbedPane: Made tabs separator color lighter in dark themes so that it is
easier to recognize the tabbed pane. - TabbedPane: Added top and bottom tab insets to avoid that large tab icons are
painted over active tab underline. - TabbedPane: Support hiding separator between tabs and content area (set client
propertyJTabbedPane.showContentSeparator
tofalse
). - CheckBoxMenuItem and RadioButtonMenuItem: Improved checkmark background colors
of selected menu items that have also an icon. This makes it is easier to
recognize selected menu items. - Windows: Made scaling compatible with Windows OS scaling, which distinguish
between "screen scaling" and "text scaling". (issue #175)
Fixed bugs
- ComboBox: If using own
JTextField
as editor, default text field border is
now removed to avoid duplicate border. - ComboBox: Limit popup width to screen width for very long items. (issue #182)
- FileChooser: Fixed localizing special Windows folders (e.g. "Documents") and
enabled hiding known file extensions (if enabled in Windows Explorer). (issue
#178) - Spinner: Fixed
NullPointerException
in case that arrow buttons were removed
to create button-less spinner. (issue #181)