Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4487c9985c | ||
|
|
a53ce99977 | ||
|
|
5444719895 | ||
|
|
b66139281d | ||
|
|
8925c27eb9 | ||
|
|
99be346387 | ||
|
|
81d46ba8ee | ||
|
|
ef4c467b20 | ||
|
|
44d196fb8c | ||
|
|
867c4fff58 | ||
|
|
5643546117 | ||
|
|
549832ba96 | ||
|
|
a8744b2bb4 | ||
|
|
e292d3444c | ||
|
|
ee6a1da709 | ||
|
|
8c15bc746b | ||
|
|
aebb083180 | ||
|
|
5438549b6d | ||
|
|
0077708235 | ||
|
|
2fd99ec9f3 | ||
|
|
0d266c4990 | ||
|
|
0982675b5f | ||
|
|
3bac5d3c80 | ||
|
|
58338f4848 | ||
|
|
9c261d3a3f | ||
|
|
5441ac6640 | ||
|
|
015b04a29a | ||
|
|
12ec0abf54 | ||
|
|
c8d461cdee | ||
|
|
faecffeadd | ||
|
|
b3c76c21b4 | ||
|
|
1697735162 | ||
|
|
ecb94bac6d | ||
|
|
7ebeacf16e | ||
|
|
d0079ab66b | ||
|
|
147e400bd6 | ||
|
|
c44905ea5e | ||
|
|
98b9df06fe | ||
|
|
02473080a5 | ||
|
|
c6beb9dc0a | ||
|
|
dcce14b122 | ||
|
|
a2ac24ac74 | ||
|
|
600f812f45 | ||
|
|
e945f46f25 | ||
|
|
c78c653b0a | ||
|
|
e0b3663239 | ||
|
|
3cc9c98040 | ||
|
|
ec8213b891 | ||
|
|
ae61383742 | ||
|
|
cc90a2ad75 | ||
|
|
28634cda56 | ||
|
|
3b71fcd690 | ||
|
|
5923ac65df | ||
|
|
faffc9393d | ||
|
|
6da220f36c | ||
|
|
21d78671d6 | ||
|
|
af5a0ec0b7 | ||
|
|
ff214455a3 | ||
|
|
3e941e3e42 | ||
|
|
2f876d553f | ||
|
|
b208017117 | ||
|
|
a1dab94a61 | ||
|
|
e55b2afd60 | ||
|
|
535c3ddf6c | ||
|
|
3008d99fcd | ||
|
|
fd37339e2f | ||
|
|
e29eca203c |
62
CHANGELOG.md
@@ -1,6 +1,68 @@
|
||||
FlatLaf Change Log
|
||||
==================
|
||||
|
||||
## 0.42
|
||||
|
||||
#### New features and improvements
|
||||
|
||||
- Demo: Improved "SplitPane & Tabs" and "Data Components" tabs.
|
||||
- Demo: Menu items "File > Open" and "File > Save As" now show file choosers.
|
||||
- InternalFrame: Support draggable border for resizing frame inside of the
|
||||
visible frame border. (issue #121)
|
||||
- `FlatUIDefaultsInspector` added (see [FlatLaf Extras](flatlaf-extras)). A
|
||||
simple UI defaults inspector that shows a window with all UI defaults used in
|
||||
current theme (look and feel).
|
||||
- Made disabled text color slightly lighter in dark themes for better
|
||||
readability. (issue #174)
|
||||
- PasswordField: Support disabling Caps Lock warning icon. (issue #172)
|
||||
|
||||
#### Fixed bugs
|
||||
|
||||
- TextComponents: Fixed text color of disabled text components in dark themes.
|
||||
- Custom window decorations: Fixed wrong window placement when moving window to
|
||||
another screen with different scaling factor. (issue #166)
|
||||
- Custom window decorations: Fixed wrong window bounds when resizing window to
|
||||
another screen with different scaling factor. (issue #166)
|
||||
- Fixed occasional wrong positioning of heavy weight popups when using multiple
|
||||
screens with different scaling factors. (issue #166)
|
||||
- ToolTip: Avoid that tooltip hides owner component. (issue #164)
|
||||
|
||||
|
||||
## 0.41
|
||||
|
||||
#### New features and improvements
|
||||
|
||||
- Added API to register packages or folders where FlatLaf searches for
|
||||
application specific properties files with custom UI defaults (see
|
||||
`FlatLaf.registerCustomDefaultsSource(...)` methods).
|
||||
- Demo: Show hint popups to guide users to some features of the FlatLaf Demo
|
||||
application.
|
||||
- Extras: `FlatSVGIcon` now allows specifying `ClassLoader` that is used to load
|
||||
SVG file. (issue #163)
|
||||
- Smoother transition from old to new theme, independent of UI complexity, when
|
||||
using animated theme change (see [FlatLaf Extras](flatlaf-extras)).
|
||||
|
||||
#### Fixed bugs
|
||||
|
||||
- Button: "selected" state was not shown. (issue #161)
|
||||
- TextArea: Update background color property if enabled or editable state
|
||||
changes in the same way as Swing does it for all other text components. (issue
|
||||
#147)
|
||||
- Demo: Fixed restoring last used theme on startup. (regression in 0.39)
|
||||
- Custom window decorations: Fixed iconify, maximize and close icon colors if
|
||||
window is inactive.
|
||||
- Custom window decorations: Fixed title pane background color in IntelliJ
|
||||
themes if window is inactive.
|
||||
- Fixed sub-pixel text rendering in animated theme change (see
|
||||
[FlatLaf Extras](flatlaf-extras)).
|
||||
|
||||
#### Other Changes
|
||||
|
||||
- Extras: Updated dependency
|
||||
[svgSalamander](https://github.com/JFormDesigner/svgSalamander) to version
|
||||
1.1.2.3.
|
||||
|
||||
|
||||
## 0.40
|
||||
|
||||
#### New features
|
||||
|
||||
@@ -11,9 +11,9 @@ scales on **HiDPI** displays and runs on Java 8 or newer.
|
||||
The look is heavily inspired by **Darcula** and **IntelliJ** themes from
|
||||
IntelliJ IDEA 2019.2+ and uses almost the same colors and icons.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
IntelliJ Platform Themes
|
||||
@@ -22,9 +22,7 @@ IntelliJ Platform Themes
|
||||
FlatLaf can use 3rd party themes created for IntelliJ Platform (see
|
||||
[IntelliJ Themes Pack](flatlaf-intellij-themes)):
|
||||
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
Demo
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
val releaseVersion = "0.40"
|
||||
val developmentVersion = "0.41-SNAPSHOT"
|
||||
val releaseVersion = "0.42"
|
||||
val developmentVersion = "0.43-SNAPSHOT"
|
||||
|
||||
version = if( java.lang.Boolean.getBoolean( "release" ) ) releaseVersion else developmentVersion
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ import java.awt.image.ImageFilter;
|
||||
import java.awt.image.ImageProducer;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -76,6 +77,8 @@ public abstract class FlatLaf
|
||||
static final Logger LOG = Logger.getLogger( FlatLaf.class.getName() );
|
||||
private static final String DESKTOPFONTHINTS = "awt.font.desktophints";
|
||||
|
||||
private static List<Object> customDefaultsSources;
|
||||
|
||||
private String desktopPropertyName;
|
||||
private String desktopPropertyName2;
|
||||
private PropertyChangeListener desktopPropertyListener;
|
||||
@@ -552,6 +555,87 @@ public abstract class FlatLaf
|
||||
defaults.put( key, value );
|
||||
}
|
||||
|
||||
static List<Object> getCustomDefaultsSources() {
|
||||
return customDefaultsSources;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a package where FlatLaf searches for properties files with custom UI defaults.
|
||||
* <p>
|
||||
* This can be used to specify application specific UI defaults that override UI values
|
||||
* of existing themes or to define own UI values used in custom controls.
|
||||
* <p>
|
||||
* There may be multiple properties files in that package for multiple themes.
|
||||
* The properties file name must match the used theme class names.
|
||||
* E.g. {@code FlatLightLaf.properties} for class {@link FlatLightLaf}
|
||||
* or {@code FlatDarkLaf.properties} for class {@link FlatDarkLaf}.
|
||||
* {@code FlatLaf.properties} is loaded first for all themes.
|
||||
* <p>
|
||||
* These properties files are loaded after theme and addon properties files
|
||||
* and can therefore override all UI defaults.
|
||||
* <p>
|
||||
* Invoke this method before setting the look and feel.
|
||||
*
|
||||
* @param packageName a package name (e.g. "com.myapp.resources")
|
||||
*/
|
||||
public static void registerCustomDefaultsSource( String packageName ) {
|
||||
registerCustomDefaultsSource( packageName, null );
|
||||
}
|
||||
|
||||
public static void unregisterCustomDefaultsSource( String packageName ) {
|
||||
unregisterCustomDefaultsSource( packageName, null );
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a package where FlatLaf searches for properties files with custom UI defaults.
|
||||
* <p>
|
||||
* See {@link #registerCustomDefaultsSource(String)} for details.
|
||||
*
|
||||
* @param packageName a package name (e.g. "com.myapp.resources")
|
||||
* @param classLoader a class loader used to find resources, or {@code null}
|
||||
*/
|
||||
public static void registerCustomDefaultsSource( String packageName, ClassLoader classLoader ) {
|
||||
if( customDefaultsSources == null )
|
||||
customDefaultsSources = new ArrayList<>();
|
||||
customDefaultsSources.add( packageName );
|
||||
customDefaultsSources.add( classLoader );
|
||||
}
|
||||
|
||||
public static void unregisterCustomDefaultsSource( String packageName, ClassLoader classLoader ) {
|
||||
if( customDefaultsSources == null )
|
||||
return;
|
||||
|
||||
int size = customDefaultsSources.size();
|
||||
for( int i = 0; i < size - 1; i++ ) {
|
||||
Object source = customDefaultsSources.get( i );
|
||||
if( packageName.equals( source ) && customDefaultsSources.get( i + 1 ) == classLoader ) {
|
||||
customDefaultsSources.remove( i + 1 );
|
||||
customDefaultsSources.remove( i );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a folder where FlatLaf searches for properties files with custom UI defaults.
|
||||
* <p>
|
||||
* See {@link #registerCustomDefaultsSource(String)} for details.
|
||||
*
|
||||
* @param folder a folder
|
||||
*/
|
||||
public static void registerCustomDefaultsSource( File folder ) {
|
||||
if( customDefaultsSources == null )
|
||||
customDefaultsSources = new ArrayList<>();
|
||||
customDefaultsSources.add( folder );
|
||||
}
|
||||
|
||||
public static void unregisterCustomDefaultsSource( File folder ) {
|
||||
if( customDefaultsSources == null )
|
||||
return;
|
||||
|
||||
customDefaultsSources.remove( folder );
|
||||
}
|
||||
|
||||
private static void reSetLookAndFeel() {
|
||||
EventQueue.invokeLater( () -> {
|
||||
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
|
||||
|
||||
@@ -531,6 +531,7 @@ public class IntelliJTheme
|
||||
uiKeyMapping.put( "Slider.trackWidth", "" ); // ignore (used in Material Theme UI Lite)
|
||||
|
||||
// TitlePane
|
||||
uiKeyCopying.put( "TitlePane.inactiveBackground", "TitlePane.background" );
|
||||
uiKeyMapping.put( "TitlePane.infoForeground", "TitlePane.foreground" );
|
||||
uiKeyMapping.put( "TitlePane.inactiveInfoForeground", "TitlePane.inactiveForeground" );
|
||||
|
||||
|
||||
@@ -19,14 +19,18 @@ package com.formdev.flatlaf;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Insets;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Properties;
|
||||
import java.util.function.Function;
|
||||
import java.util.logging.Level;
|
||||
@@ -115,6 +119,46 @@ class UIDefaultsLoader
|
||||
addonClassLoaders.add( addonClassLoader );
|
||||
}
|
||||
|
||||
// load custom properties files (usually provides by applications)
|
||||
List<Object> customDefaultsSources = FlatLaf.getCustomDefaultsSources();
|
||||
int size = (customDefaultsSources != null) ? customDefaultsSources.size() : 0;
|
||||
for( int i = 0; i < size; i++ ) {
|
||||
Object source = customDefaultsSources.get( i );
|
||||
if( source instanceof String && i + 1 < size ) {
|
||||
// load from package in classloader
|
||||
String packageName = (String) source;
|
||||
ClassLoader classLoader = (ClassLoader) customDefaultsSources.get( ++i );
|
||||
|
||||
// use class loader also for instantiating classes specified in values
|
||||
if( classLoader != null && !addonClassLoaders.contains( classLoader ) )
|
||||
addonClassLoaders.add( classLoader );
|
||||
|
||||
packageName = packageName.replace( '.', '/' );
|
||||
if( classLoader == null )
|
||||
classLoader = FlatLaf.class.getClassLoader();
|
||||
|
||||
for( Class<?> lafClass : lafClasses ) {
|
||||
String propertiesName = packageName + '/' + lafClass.getSimpleName() + ".properties";
|
||||
try( InputStream in = classLoader.getResourceAsStream( propertiesName ) ) {
|
||||
if( in != null )
|
||||
properties.load( in );
|
||||
}
|
||||
}
|
||||
} else if( source instanceof File ) {
|
||||
// load from folder
|
||||
File folder = (File) source;
|
||||
for( Class<?> lafClass : lafClasses ) {
|
||||
File propertiesFile = new File( folder, lafClass.getSimpleName() + ".properties" );
|
||||
if( !propertiesFile.isFile() )
|
||||
continue;
|
||||
|
||||
try( InputStream in = new FileInputStream( propertiesFile ) ) {
|
||||
properties.load( in );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add additional defaults
|
||||
if( additionalDefaults != null )
|
||||
properties.putAll( additionalDefaults );
|
||||
@@ -154,6 +198,29 @@ class UIDefaultsLoader
|
||||
}
|
||||
}
|
||||
|
||||
// get (and remove) globals, which override all other defaults that end with same suffix
|
||||
HashMap<String, String> globals = new HashMap<>();
|
||||
Iterator<Entry<Object, Object>> it = properties.entrySet().iterator();
|
||||
while( it.hasNext() ) {
|
||||
Entry<Object, Object> e = it.next();
|
||||
String key = (String) e.getKey();
|
||||
if( key.startsWith( GLOBAL_PREFIX ) ) {
|
||||
globals.put( key.substring( GLOBAL_PREFIX.length() ), (String) e.getValue() );
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
|
||||
// override UI defaults with globals
|
||||
for( Object okey : defaults.keySet() ) {
|
||||
if( okey instanceof String && ((String)okey).contains( "." ) ) {
|
||||
String key = (String) okey;
|
||||
String globalKey = key.substring( key.lastIndexOf( '.' ) + 1 );
|
||||
String globalValue = globals.get( globalKey );
|
||||
if( globalValue != null && !properties.containsKey( key ) )
|
||||
properties.put( key, globalValue );
|
||||
}
|
||||
}
|
||||
|
||||
Function<String, String> propertiesGetter = key -> {
|
||||
return properties.getProperty( key );
|
||||
};
|
||||
@@ -161,37 +228,10 @@ class UIDefaultsLoader
|
||||
return resolveValue( value, propertiesGetter );
|
||||
};
|
||||
|
||||
// get globals, which override all other defaults that end with same suffix
|
||||
HashMap<String, Object> globals = new HashMap<>();
|
||||
// parse and add properties to UI defaults
|
||||
for( Map.Entry<Object, Object> e : properties.entrySet() ) {
|
||||
String key = (String) e.getKey();
|
||||
if( !key.startsWith( GLOBAL_PREFIX ) )
|
||||
continue;
|
||||
|
||||
String value = resolveValue( (String) e.getValue(), propertiesGetter );
|
||||
try {
|
||||
globals.put( key.substring( GLOBAL_PREFIX.length() ),
|
||||
parseValue( key, value, null, resolver, addonClassLoaders ) );
|
||||
} catch( RuntimeException ex ) {
|
||||
logParseError( Level.SEVERE, key, value, ex );
|
||||
}
|
||||
}
|
||||
|
||||
// override UI defaults with globals
|
||||
for( Object key : defaults.keySet() ) {
|
||||
if( key instanceof String && ((String)key).contains( "." ) ) {
|
||||
String skey = (String) key;
|
||||
String globalKey = skey.substring( skey.lastIndexOf( '.' ) + 1 );
|
||||
Object globalValue = globals.get( globalKey );
|
||||
if( globalValue != null )
|
||||
defaults.put( key, globalValue );
|
||||
}
|
||||
}
|
||||
|
||||
// add non-global properties to UI defaults
|
||||
for( Map.Entry<Object, Object> e : properties.entrySet() ) {
|
||||
String key = (String) e.getKey();
|
||||
if( key.startsWith( VARIABLE_PREFIX ) || key.startsWith( GLOBAL_PREFIX ) )
|
||||
if( key.startsWith( VARIABLE_PREFIX ) )
|
||||
continue;
|
||||
|
||||
String value = resolveValue( (String) e.getValue(), propertiesGetter );
|
||||
|
||||
@@ -67,8 +67,11 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault Button.focusedBackground Color optional
|
||||
* @uiDefault Button.hoverBackground Color optional
|
||||
* @uiDefault Button.pressedBackground Color optional
|
||||
* @uiDefault Button.selectedBackground Color
|
||||
* @uiDefault Button.selectedForeground Color
|
||||
* @uiDefault Button.disabledBackground Color optional
|
||||
* @uiDefault Button.disabledText Color
|
||||
* @uiDefault Button.disabledSelectedBackground Color
|
||||
* @uiDefault Button.default.background Color
|
||||
* @uiDefault Button.default.startBackground Color optional; if set, a gradient paint is used and Button.default.background is ignored
|
||||
* @uiDefault Button.default.endBackground Color optional; if set, a gradient paint is used
|
||||
@@ -84,6 +87,7 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault Button.toolbar.spacingInsets Insets
|
||||
* @uiDefault Button.toolbar.hoverBackground Color
|
||||
* @uiDefault Button.toolbar.pressedBackground Color
|
||||
* @uiDefault Button.toolbar.selectedBackground Color
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
@@ -101,8 +105,11 @@ public class FlatButtonUI
|
||||
protected Color focusedBackground;
|
||||
protected Color hoverBackground;
|
||||
protected Color pressedBackground;
|
||||
protected Color selectedBackground;
|
||||
protected Color selectedForeground;
|
||||
protected Color disabledBackground;
|
||||
protected Color disabledText;
|
||||
protected Color disabledSelectedBackground;
|
||||
|
||||
protected Color defaultBackground;
|
||||
protected Color defaultEndBackground;
|
||||
@@ -119,6 +126,7 @@ public class FlatButtonUI
|
||||
protected Insets toolbarSpacingInsets;
|
||||
protected Color toolbarHoverBackground;
|
||||
protected Color toolbarPressedBackground;
|
||||
protected Color toolbarSelectedBackground;
|
||||
|
||||
private Icon helpButtonIcon;
|
||||
|
||||
@@ -150,8 +158,11 @@ public class FlatButtonUI
|
||||
focusedBackground = UIManager.getColor( prefix + "focusedBackground" );
|
||||
hoverBackground = UIManager.getColor( prefix + "hoverBackground" );
|
||||
pressedBackground = UIManager.getColor( prefix + "pressedBackground" );
|
||||
selectedBackground = UIManager.getColor( prefix + "selectedBackground" );
|
||||
selectedForeground = UIManager.getColor( prefix + "selectedForeground" );
|
||||
disabledBackground = UIManager.getColor( prefix + "disabledBackground" );
|
||||
disabledText = UIManager.getColor( prefix + "disabledText" );
|
||||
disabledSelectedBackground = UIManager.getColor( prefix + "disabledSelectedBackground" );
|
||||
|
||||
if( UIManager.getBoolean( "Button.paintShadow" ) ) {
|
||||
shadowWidth = FlatUIUtils.getUIInt( "Button.shadowWidth", 2 );
|
||||
@@ -174,6 +185,7 @@ public class FlatButtonUI
|
||||
toolbarSpacingInsets = UIManager.getInsets( "Button.toolbar.spacingInsets" );
|
||||
toolbarHoverBackground = UIManager.getColor( prefix + "toolbar.hoverBackground" );
|
||||
toolbarPressedBackground = UIManager.getColor( prefix + "toolbar.pressedBackground" );
|
||||
toolbarSelectedBackground = UIManager.getColor( prefix + "toolbar.selectedBackground" );
|
||||
|
||||
helpButtonIcon = UIManager.getIcon( "HelpButton.icon" );
|
||||
|
||||
@@ -369,6 +381,17 @@ public class FlatButtonUI
|
||||
}
|
||||
|
||||
protected Color getBackground( JComponent c ) {
|
||||
if( ((AbstractButton)c).isSelected() ) {
|
||||
// in toolbar use same colors for disabled and enabled because
|
||||
// we assume that toolbar icon is shown disabled
|
||||
boolean toolBarButton = isToolBarButton( c );
|
||||
return buttonStateColor( c,
|
||||
toolBarButton ? toolbarSelectedBackground : selectedBackground,
|
||||
toolBarButton ? toolbarSelectedBackground : disabledSelectedBackground,
|
||||
null, null,
|
||||
toolBarButton ? toolbarPressedBackground : pressedBackground );
|
||||
}
|
||||
|
||||
if( !c.isEnabled() )
|
||||
return disabledBackground;
|
||||
|
||||
@@ -430,6 +453,9 @@ public class FlatButtonUI
|
||||
if( !c.isEnabled() )
|
||||
return disabledText;
|
||||
|
||||
if( ((AbstractButton)c).isSelected() && !isToolBarButton( c ) )
|
||||
return selectedForeground;
|
||||
|
||||
// use component foreground if explicitly set
|
||||
Color fg = c.getForeground();
|
||||
if( isCustomForeground( fg ) )
|
||||
|
||||
@@ -57,4 +57,8 @@ public class FlatEmptyBorder
|
||||
insets.bottom = scale( bottom );
|
||||
return insets;
|
||||
}
|
||||
|
||||
public Insets getUnscaledBorderInsets() {
|
||||
return super.getBorderInsets();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,6 +84,8 @@ import javax.swing.plaf.basic.BasicInternalFrameUI;
|
||||
public class FlatInternalFrameUI
|
||||
extends BasicInternalFrameUI
|
||||
{
|
||||
protected FlatWindowResizer windowResizer;
|
||||
|
||||
public static ComponentUI createUI( JComponent c ) {
|
||||
return new FlatInternalFrameUI( (JInternalFrame) c );
|
||||
}
|
||||
@@ -97,6 +99,18 @@ public class FlatInternalFrameUI
|
||||
super.installUI( c );
|
||||
|
||||
LookAndFeel.installProperty( frame, "opaque", false );
|
||||
|
||||
windowResizer = createWindowResizer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uninstallUI( JComponent c ) {
|
||||
super.uninstallUI( c );
|
||||
|
||||
if( windowResizer != null ) {
|
||||
windowResizer.uninstall();
|
||||
windowResizer = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -104,6 +118,10 @@ public class FlatInternalFrameUI
|
||||
return new FlatInternalFrameTitlePane( w );
|
||||
}
|
||||
|
||||
protected FlatWindowResizer createWindowResizer() {
|
||||
return new FlatWindowResizer.InternalFrameResizer( frame, this::getDesktopManager );
|
||||
}
|
||||
|
||||
//---- class FlatInternalFrameBorder --------------------------------------
|
||||
|
||||
public static class FlatInternalFrameBorder
|
||||
|
||||
@@ -126,6 +126,9 @@ public class FlatListUI
|
||||
* or the application has to be changed to extend a FlatLaf renderer.
|
||||
*/
|
||||
private void toggleSelectionColors() {
|
||||
if( list == null )
|
||||
return;
|
||||
|
||||
if( FlatUIUtils.isPermanentFocusOwner( list ) ) {
|
||||
if( list.getSelectionBackground() == selectionInactiveBackground )
|
||||
list.setSelectionBackground( selectionBackground );
|
||||
|
||||
@@ -60,6 +60,7 @@ import com.formdev.flatlaf.util.HiDPIUtils;
|
||||
* @uiDefault Component.minimumWidth int
|
||||
* @uiDefault Component.isIntelliJTheme boolean
|
||||
* @uiDefault PasswordField.placeholderForeground Color
|
||||
* @uiDefault PasswordField.showCapsLock boolean
|
||||
* @uiDefault PasswordField.capsLockIcon Icon
|
||||
* @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always
|
||||
*
|
||||
@@ -71,6 +72,7 @@ public class FlatPasswordFieldUI
|
||||
protected int minimumWidth;
|
||||
protected boolean isIntelliJTheme;
|
||||
protected Color placeholderForeground;
|
||||
protected boolean showCapsLock;
|
||||
protected Icon capsLockIcon;
|
||||
|
||||
private FocusListener focusListener;
|
||||
@@ -88,6 +90,7 @@ public class FlatPasswordFieldUI
|
||||
minimumWidth = UIManager.getInt( "Component.minimumWidth" );
|
||||
isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" );
|
||||
placeholderForeground = UIManager.getColor( prefix + ".placeholderForeground" );
|
||||
showCapsLock = UIManager.getBoolean( "PasswordField.showCapsLock" );
|
||||
capsLockIcon = UIManager.getIcon( "PasswordField.capsLockIcon" );
|
||||
|
||||
LookAndFeel.installProperty( getComponent(), "opaque", false );
|
||||
@@ -160,6 +163,9 @@ public class FlatPasswordFieldUI
|
||||
}
|
||||
|
||||
protected void paintCapsLock( Graphics g ) {
|
||||
if( !showCapsLock )
|
||||
return;
|
||||
|
||||
JTextComponent c = getComponent();
|
||||
if( !FlatUIUtils.isPermanentFocusOwner( c ) ||
|
||||
!Toolkit.getDefaultToolkit().getLockingKeyState( KeyEvent.VK_CAPS_LOCK ) )
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.awt.Component;
|
||||
import java.awt.Container;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Insets;
|
||||
import java.awt.MouseInfo;
|
||||
import java.awt.Panel;
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
@@ -33,6 +34,7 @@ import javax.swing.JComponent;
|
||||
import javax.swing.JLayeredPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JToolTip;
|
||||
import javax.swing.JWindow;
|
||||
import javax.swing.Popup;
|
||||
import javax.swing.PopupFactory;
|
||||
import javax.swing.RootPaneContainer;
|
||||
@@ -41,6 +43,7 @@ import javax.swing.UIManager;
|
||||
import javax.swing.border.Border;
|
||||
import com.formdev.flatlaf.FlatClientProperties;
|
||||
import com.formdev.flatlaf.util.SystemInfo;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
|
||||
/**
|
||||
* A popup factory that adds drop shadows to popups on Windows.
|
||||
@@ -59,19 +62,97 @@ public class FlatPopupFactory
|
||||
public Popup getPopup( Component owner, Component contents, int x, int y )
|
||||
throws IllegalArgumentException
|
||||
{
|
||||
Point pt = fixToolTipLocation( owner, contents, x, y );
|
||||
if( pt != null ) {
|
||||
x = pt.x;
|
||||
y = pt.y;
|
||||
}
|
||||
|
||||
if( !isDropShadowPainted( owner, contents ) )
|
||||
return new NonFlashingPopup( super.getPopup( owner, contents, x, y ), contents );
|
||||
return new NonFlashingPopup( getPopupForScreenOfOwner( owner, contents, x, y, false ), contents );
|
||||
|
||||
// macOS and Linux adds drop shadow to heavy weight popups
|
||||
if( SystemInfo.isMacOS || SystemInfo.isLinux ) {
|
||||
Popup popup = getHeavyWeightPopup( owner, contents, x, y );
|
||||
Popup popup = getPopupForScreenOfOwner( owner, contents, x, y, true );
|
||||
if( popup == null )
|
||||
popup = super.getPopup( owner, contents, x, y );
|
||||
popup = getPopupForScreenOfOwner( owner, contents, x, y, false );
|
||||
return new NonFlashingPopup( popup, contents );
|
||||
}
|
||||
|
||||
// create drop shadow popup
|
||||
return new DropShadowPopup( super.getPopup( owner, contents, x, y ), owner, contents );
|
||||
return new DropShadowPopup( getPopupForScreenOfOwner( owner, contents, x, y, false ), owner, contents );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a popup for the screen that the owner component is on.
|
||||
* <p>
|
||||
* PopupFactory caches heavy weight popup windows and reuses them.
|
||||
* On a dual screen setup, if the popup owner has moved from one screen to the other one,
|
||||
* then the cached heavy weight popup window may be connected to the wrong screen.
|
||||
* If the two screens use different scaling factors, then the popup location and size
|
||||
* is scaled when the popup becomes visible, which shows the popup in the wrong location
|
||||
* (or on wrong screen). The re-scaling is done in WWindowPeer.setBounds() (Java 9+).
|
||||
* <p>
|
||||
* To fix this, dispose popup windows that are on wrong screen and get new popup.
|
||||
* <p>
|
||||
* This is a workaround for https://bugs.openjdk.java.net/browse/JDK-8224608
|
||||
*/
|
||||
private Popup getPopupForScreenOfOwner( Component owner, Component contents, int x, int y, boolean forceHeavyWeight )
|
||||
throws IllegalArgumentException
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
for(;;) {
|
||||
// create new or get cached popup
|
||||
Popup popup = forceHeavyWeight
|
||||
? getHeavyWeightPopup( owner, contents, x, y )
|
||||
: super.getPopup( owner, contents, x, y );
|
||||
|
||||
// get heavy weight popup window; is null for non-heavy weight popup
|
||||
Window popupWindow = SwingUtilities.windowForComponent( contents );
|
||||
|
||||
// check whether heavy weight popup window is on same screen as owner component
|
||||
if( popupWindow == null ||
|
||||
popupWindow.getGraphicsConfiguration() == owner.getGraphicsConfiguration() )
|
||||
return popup;
|
||||
|
||||
// remove contents component from popup window
|
||||
if( popupWindow instanceof JWindow )
|
||||
((JWindow)popupWindow).getContentPane().removeAll();
|
||||
|
||||
// dispose unused popup
|
||||
// (do not invoke popup.hide() because this would cache the popup window)
|
||||
popupWindow.dispose();
|
||||
|
||||
// avoid endless loop (should newer happen; PopupFactory cache size is 5)
|
||||
if( ++count > 10 )
|
||||
return popup;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows the given popup and, if necessary, fixes the location of a heavy weight popup window.
|
||||
* <p>
|
||||
* On a dual screen setup, where screens use different scale factors, it may happen
|
||||
* that the window location changes when showing a heavy weight popup window.
|
||||
* E.g. when opening an dialog on the secondary screen and making combobox popup visible.
|
||||
* <p>
|
||||
* This is a workaround for https://bugs.openjdk.java.net/browse/JDK-8224608
|
||||
*/
|
||||
private static void showPopupAndFixLocation( Popup popup, Window popupWindow ) {
|
||||
if( popupWindow != null ) {
|
||||
// remember location of heavy weight popup window
|
||||
int x = popupWindow.getX();
|
||||
int y = popupWindow.getY();
|
||||
|
||||
popup.show();
|
||||
|
||||
// restore popup window location if it has changed
|
||||
// (probably scaled when screens use different scale factors)
|
||||
if( popupWindow.getX() != x || popupWindow.getY() != y )
|
||||
popupWindow.setLocation( x, y );
|
||||
} else
|
||||
popup.show();
|
||||
}
|
||||
|
||||
private boolean isDropShadowPainted( Component owner, Component contents ) {
|
||||
@@ -127,6 +208,31 @@ public class FlatPopupFactory
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Usually ToolTipManager places a tooltip at (mouseLocation.x, mouseLocation.y + 20).
|
||||
* In case that the tooltip would be partly outside of the screen,
|
||||
* ToolTipManagerthe changes the location so that the entire tooltip fits on screen.
|
||||
* But this can place the tooltip under the mouse location and hide the owner component.
|
||||
* <p>
|
||||
* This method checks whether the current mouse location is within tooltip bounds
|
||||
* and corrects the y-location so that the tooltip is placed above the mouse location.
|
||||
*/
|
||||
private Point fixToolTipLocation( Component owner, Component contents, int x, int y ) {
|
||||
if( !(contents instanceof JToolTip) )
|
||||
return null;
|
||||
|
||||
Point mouseLocation = MouseInfo.getPointerInfo().getLocation();
|
||||
Dimension tipSize = contents.getPreferredSize();
|
||||
|
||||
// check whether mouse location is within tooltip bounds
|
||||
Rectangle tipBounds = new Rectangle( x, y, tipSize.width, tipSize.height );
|
||||
if( !tipBounds.contains( mouseLocation ) )
|
||||
return null;
|
||||
|
||||
// place tooltip above mouse location
|
||||
return new Point( x, mouseLocation.y - tipSize.height - UIScale.scale( 20 ) );
|
||||
}
|
||||
|
||||
//---- class NonFlashingPopup ---------------------------------------------
|
||||
|
||||
private class NonFlashingPopup
|
||||
@@ -157,7 +263,7 @@ public class FlatPopupFactory
|
||||
@Override
|
||||
public void show() {
|
||||
if( delegate != null ) {
|
||||
delegate.show();
|
||||
showPopupAndFixLocation( delegate, popupWindow );
|
||||
|
||||
// increase tooltip size if necessary because it may be too small on HiDPI screens
|
||||
// https://bugs.openjdk.java.net/browse/JDK-8213535
|
||||
@@ -249,7 +355,7 @@ public class FlatPopupFactory
|
||||
// create heavy weight popup for drop shadow
|
||||
int x = popupWindow.getX() - insets.left;
|
||||
int y = popupWindow.getY() - insets.top;
|
||||
dropShadowDelegate = getHeavyWeightPopup( owner, dropShadowPanel, x, y );
|
||||
dropShadowDelegate = getPopupForScreenOfOwner( owner, dropShadowPanel, x, y, true );
|
||||
|
||||
// make drop shadow popup window translucent
|
||||
dropShadowWindow = SwingUtilities.windowForComponent( dropShadowPanel );
|
||||
@@ -291,7 +397,7 @@ public class FlatPopupFactory
|
||||
@Override
|
||||
public void show() {
|
||||
if( dropShadowDelegate != null )
|
||||
dropShadowDelegate.show();
|
||||
showPopupAndFixLocation( dropShadowDelegate, dropShadowWindow );
|
||||
|
||||
if( mediumWeightPanel != null )
|
||||
showMediumWeightDropShadow();
|
||||
|
||||
@@ -172,7 +172,7 @@ public class FlatRootPaneUI
|
||||
}
|
||||
|
||||
protected FlatWindowResizer createWindowResizer() {
|
||||
return new FlatWindowResizer( rootPane );
|
||||
return new FlatWindowResizer.WindowResizer( rootPane );
|
||||
}
|
||||
|
||||
protected FlatTitlePane createTitlePane() {
|
||||
|
||||
@@ -158,7 +158,7 @@ public class FlatTableHeaderUI
|
||||
g2.setColor( separatorColor );
|
||||
|
||||
int sepCount = columnCount;
|
||||
if( header.getTable().getAutoResizeMode() != JTable.AUTO_RESIZE_OFF && !isVerticalScrollBarVisible() )
|
||||
if( header.getTable() != null && header.getTable().getAutoResizeMode() != JTable.AUTO_RESIZE_OFF && !isVerticalScrollBarVisible() )
|
||||
sepCount--;
|
||||
|
||||
if( header.getComponentOrientation().isLeftToRight() ) {
|
||||
|
||||
@@ -188,6 +188,9 @@ public class FlatTableUI
|
||||
* or the application has to be changed to extend a FlatLaf renderer.
|
||||
*/
|
||||
private void toggleSelectionColors() {
|
||||
if( table == null )
|
||||
return;
|
||||
|
||||
if( FlatUIUtils.isPermanentFocusOwner( table ) ) {
|
||||
if( table.getSelectionBackground() == selectionInactiveBackground )
|
||||
table.setSelectionBackground( selectionBackground );
|
||||
|
||||
@@ -60,6 +60,7 @@ public class FlatTextAreaUI
|
||||
{
|
||||
protected int minimumWidth;
|
||||
protected boolean isIntelliJTheme;
|
||||
protected Color background;
|
||||
protected Color disabledBackground;
|
||||
protected Color inactiveBackground;
|
||||
|
||||
@@ -67,12 +68,20 @@ public class FlatTextAreaUI
|
||||
return new FlatTextAreaUI();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void installUI( JComponent c ) {
|
||||
super.installUI( c );
|
||||
|
||||
updateBackground();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installDefaults() {
|
||||
super.installDefaults();
|
||||
|
||||
minimumWidth = UIManager.getInt( "Component.minimumWidth" );
|
||||
isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" );
|
||||
background = UIManager.getColor( "TextArea.background" );
|
||||
disabledBackground = UIManager.getColor( "TextArea.disabledBackground" );
|
||||
inactiveBackground = UIManager.getColor( "TextArea.inactiveBackground" );
|
||||
}
|
||||
@@ -81,6 +90,7 @@ public class FlatTextAreaUI
|
||||
protected void uninstallDefaults() {
|
||||
super.uninstallDefaults();
|
||||
|
||||
background = null;
|
||||
disabledBackground = null;
|
||||
inactiveBackground = null;
|
||||
}
|
||||
@@ -89,26 +99,36 @@ public class FlatTextAreaUI
|
||||
protected void propertyChange( PropertyChangeEvent e ) {
|
||||
super.propertyChange( e );
|
||||
FlatEditorPaneUI.propertyChange( getComponent(), e );
|
||||
|
||||
switch( e.getPropertyName() ) {
|
||||
case "editable":
|
||||
case "enabled":
|
||||
updateBackground();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintSafely( Graphics g ) {
|
||||
super.paintSafely( HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintBackground( Graphics g ) {
|
||||
private void updateBackground() {
|
||||
JTextComponent c = getComponent();
|
||||
|
||||
Color background = c.getBackground();
|
||||
g.setColor( !(background instanceof UIResource)
|
||||
? background
|
||||
: (isIntelliJTheme && (!c.isEnabled() || !c.isEditable())
|
||||
? FlatUIUtils.getParentBackground( c )
|
||||
: (!c.isEnabled()
|
||||
? disabledBackground
|
||||
: (!c.isEditable() ? inactiveBackground : background))) );
|
||||
g.fillRect( 0, 0, c.getWidth(), c.getHeight() );
|
||||
if( !(background instanceof UIResource) )
|
||||
return;
|
||||
|
||||
// do not update background if it currently has a unknown color (assigned from outside)
|
||||
if( background != this.background &&
|
||||
background != disabledBackground &&
|
||||
background != inactiveBackground )
|
||||
return;
|
||||
|
||||
Color newBackground = !c.isEnabled()
|
||||
? disabledBackground
|
||||
: (!c.isEditable()
|
||||
? inactiveBackground
|
||||
: this.background);
|
||||
|
||||
if( newBackground != background )
|
||||
c.setBackground( newBackground );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -128,4 +148,22 @@ public class FlatTextAreaUI
|
||||
|
||||
return FlatEditorPaneUI.applyMinimumWidth( c, size, minimumWidth );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintSafely( Graphics g ) {
|
||||
super.paintSafely( HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintBackground( Graphics g ) {
|
||||
JTextComponent c = getComponent();
|
||||
|
||||
// for compatibility with IntelliJ themes
|
||||
if( isIntelliJTheme && (!c.isEnabled() || !c.isEditable()) && (c.getBackground() instanceof UIResource) ) {
|
||||
FlatUIUtils.paintParentBackground( g, c );
|
||||
return;
|
||||
}
|
||||
|
||||
super.paintBackground( g );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,12 +240,15 @@ public class FlatTitlePane
|
||||
protected void activeChanged( boolean active ) {
|
||||
boolean hasEmbeddedMenuBar = rootPane.getJMenuBar() != null && isMenuBarEmbedded();
|
||||
Color background = FlatUIUtils.nonUIResource( active ? activeBackground : inactiveBackground );
|
||||
Color foreground = FlatUIUtils.nonUIResource( active
|
||||
? (hasEmbeddedMenuBar ? embeddedForeground : activeForeground)
|
||||
: inactiveForeground );
|
||||
Color foreground = FlatUIUtils.nonUIResource( active ? activeForeground : inactiveForeground );
|
||||
Color titleForeground = (hasEmbeddedMenuBar && active) ? FlatUIUtils.nonUIResource( embeddedForeground ) : foreground;
|
||||
|
||||
setBackground( background );
|
||||
titleLabel.setForeground( foreground );
|
||||
titleLabel.setForeground( titleForeground );
|
||||
iconifyButton.setForeground( foreground );
|
||||
maximizeButton.setForeground( foreground );
|
||||
restoreButton.setForeground( foreground );
|
||||
closeButton.setForeground( foreground );
|
||||
|
||||
titleLabel.setHorizontalAlignment( hasEmbeddedMenuBar ? SwingConstants.CENTER : SwingConstants.LEADING );
|
||||
|
||||
@@ -751,8 +754,7 @@ debug*/
|
||||
|
||||
//---- interface MouseListener ----
|
||||
|
||||
private int lastXOnScreen;
|
||||
private int lastYOnScreen;
|
||||
private Point dragOffset;
|
||||
|
||||
@Override
|
||||
public void mouseClicked( MouseEvent e ) {
|
||||
@@ -776,8 +778,10 @@ debug*/
|
||||
|
||||
@Override
|
||||
public void mousePressed( MouseEvent e ) {
|
||||
lastXOnScreen = e.getXOnScreen();
|
||||
lastYOnScreen = e.getYOnScreen();
|
||||
if( window == null )
|
||||
return; // should newer occur
|
||||
|
||||
dragOffset = SwingUtilities.convertPoint( FlatTitlePane.this, e.getPoint(), window );
|
||||
}
|
||||
|
||||
@Override public void mouseReleased( MouseEvent e ) {}
|
||||
@@ -788,46 +792,45 @@ debug*/
|
||||
|
||||
@Override
|
||||
public void mouseDragged( MouseEvent e ) {
|
||||
if( window == null )
|
||||
return; // should newer occur
|
||||
|
||||
if( hasJBRCustomDecoration() )
|
||||
return; // do nothing if running in JBR
|
||||
|
||||
int xOnScreen = e.getXOnScreen();
|
||||
int yOnScreen = e.getYOnScreen();
|
||||
if( lastXOnScreen == xOnScreen && lastYOnScreen == yOnScreen )
|
||||
return;
|
||||
|
||||
// restore window if it is maximized
|
||||
if( window instanceof Frame ) {
|
||||
Frame frame = (Frame) window;
|
||||
int state = frame.getExtendedState();
|
||||
if( (state & Frame.MAXIMIZED_BOTH) != 0 ) {
|
||||
int maximizedX = window.getX();
|
||||
int maximizedY = window.getY();
|
||||
int maximizedWidth = window.getWidth();
|
||||
|
||||
// restore window size, which also moves window to pre-maximized location
|
||||
frame.setExtendedState( state & ~Frame.MAXIMIZED_BOTH );
|
||||
|
||||
// fix drag offset to ensure that window remains under mouse position
|
||||
// for the case that dragging starts in the right area of the maximized window
|
||||
int restoredWidth = window.getWidth();
|
||||
int newX = maximizedX;
|
||||
JComponent rightComp = getComponentOrientation().isLeftToRight() ? buttonPanel : leftPanel;
|
||||
if( xOnScreen >= maximizedX + restoredWidth - rightComp.getWidth() - 10 )
|
||||
newX = xOnScreen + rightComp.getWidth() + 10 - restoredWidth;
|
||||
|
||||
// move window near mouse
|
||||
window.setLocation( newX, maximizedY );
|
||||
return;
|
||||
int center = restoredWidth / 2;
|
||||
if( dragOffset.x > center ) {
|
||||
// this is same/similar to what Windows 10 does
|
||||
if( dragOffset.x > maximizedWidth - center )
|
||||
dragOffset.x = restoredWidth - (maximizedWidth - dragOffset.x);
|
||||
else
|
||||
dragOffset.x = center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// compute new window location
|
||||
int newX = window.getX() + (xOnScreen - lastXOnScreen);
|
||||
int newY = window.getY() + (yOnScreen - lastYOnScreen);
|
||||
int newX = e.getXOnScreen() - dragOffset.x;
|
||||
int newY = e.getYOnScreen() - dragOffset.y;
|
||||
|
||||
if( newX == window.getX() && newY == window.getY() )
|
||||
return;
|
||||
|
||||
// move window
|
||||
window.setLocation( newX, newY );
|
||||
|
||||
lastXOnScreen = xOnScreen;
|
||||
lastYOnScreen = yOnScreen;
|
||||
}
|
||||
|
||||
@Override public void mouseMoved( MouseEvent e ) {}
|
||||
|
||||
@@ -22,7 +22,6 @@ import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.ButtonModel;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JToggleButton;
|
||||
import javax.swing.UIManager;
|
||||
@@ -50,18 +49,17 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault ToggleButton.startBackground Color optional; if set, a gradient paint is used and ToggleButton.background is ignored
|
||||
* @uiDefault ToggleButton.endBackground Color optional; if set, a gradient paint is used
|
||||
* @uiDefault ToggleButton.pressedBackground Color
|
||||
* @uiDefault ToggleButton.disabledBackground Color optional
|
||||
* @uiDefault ToggleButton.disabledText Color
|
||||
* @uiDefault ToggleButton.toolbar.hoverBackground Color
|
||||
* @uiDefault ToggleButton.toolbar.pressedBackground Color
|
||||
*
|
||||
* <!-- FlatToggleButtonUI -->
|
||||
*
|
||||
* @uiDefault ToggleButton.selectedBackground Color
|
||||
* @uiDefault ToggleButton.selectedForeground Color
|
||||
* @uiDefault ToggleButton.disabledBackground Color optional
|
||||
* @uiDefault ToggleButton.disabledText Color
|
||||
* @uiDefault ToggleButton.disabledSelectedBackground Color
|
||||
* @uiDefault ToggleButton.toolbar.hoverBackground Color
|
||||
* @uiDefault ToggleButton.toolbar.pressedBackground Color
|
||||
* @uiDefault ToggleButton.toolbar.selectedBackground Color
|
||||
*
|
||||
* <!-- FlatToggleButtonUI -->
|
||||
*
|
||||
* @uiDefault ToggleButton.tab.underlineHeight int
|
||||
* @uiDefault ToggleButton.tab.underlineColor Color
|
||||
* @uiDefault ToggleButton.tab.disabledUnderlineColor Color
|
||||
@@ -75,12 +73,6 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
public class FlatToggleButtonUI
|
||||
extends FlatButtonUI
|
||||
{
|
||||
protected Color selectedBackground;
|
||||
protected Color selectedForeground;
|
||||
protected Color disabledSelectedBackground;
|
||||
|
||||
protected Color toolbarSelectedBackground;
|
||||
|
||||
protected int tabUnderlineHeight;
|
||||
protected Color tabUnderlineColor;
|
||||
protected Color tabDisabledUnderlineColor;
|
||||
@@ -108,12 +100,6 @@ public class FlatToggleButtonUI
|
||||
super.installDefaults( b );
|
||||
|
||||
if( !defaults_initialized ) {
|
||||
selectedBackground = UIManager.getColor( "ToggleButton.selectedBackground" );
|
||||
selectedForeground = UIManager.getColor( "ToggleButton.selectedForeground" );
|
||||
disabledSelectedBackground = UIManager.getColor( "ToggleButton.disabledSelectedBackground" );
|
||||
|
||||
toolbarSelectedBackground = UIManager.getColor( "ToggleButton.toolbar.selectedBackground" );
|
||||
|
||||
tabUnderlineHeight = UIManager.getInt( "ToggleButton.tab.underlineHeight" );
|
||||
tabUnderlineColor = UIManager.getColor( "ToggleButton.tab.underlineColor" );
|
||||
tabDisabledUnderlineColor = UIManager.getColor( "ToggleButton.tab.disabledUnderlineColor" );
|
||||
@@ -185,30 +171,4 @@ public class FlatToggleButtonUI
|
||||
} else
|
||||
super.paintBackground( g, c );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Color getBackground( JComponent c ) {
|
||||
ButtonModel model = ((AbstractButton)c).getModel();
|
||||
|
||||
if( model.isSelected() ) {
|
||||
// in toolbar use same colors for disabled and enabled because
|
||||
// we assume that toolbar icon is shown disabled
|
||||
boolean toolBarButton = isToolBarButton( c );
|
||||
return buttonStateColor( c,
|
||||
toolBarButton ? toolbarSelectedBackground : selectedBackground,
|
||||
toolBarButton ? toolbarSelectedBackground : disabledSelectedBackground,
|
||||
null, null,
|
||||
toolBarButton ? toolbarPressedBackground : pressedBackground );
|
||||
}
|
||||
|
||||
return super.getBackground( c );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Color getForeground( JComponent c ) {
|
||||
if( c.isEnabled() && ((AbstractButton)c).isSelected() && !isToolBarButton( c ) )
|
||||
return selectedForeground;
|
||||
|
||||
return super.getForeground( c );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,13 @@
|
||||
package com.formdev.flatlaf.ui;
|
||||
|
||||
import static java.awt.Cursor.*;
|
||||
import static javax.swing.SwingConstants.*;
|
||||
import java.awt.Container;
|
||||
import java.awt.Dialog;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Frame;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.Window;
|
||||
@@ -34,54 +36,59 @@ import java.awt.event.WindowEvent;
|
||||
import java.awt.event.WindowStateListener;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.function.Supplier;
|
||||
import javax.swing.DesktopManager;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JInternalFrame;
|
||||
import javax.swing.JLayeredPane;
|
||||
import javax.swing.JRootPane;
|
||||
import javax.swing.UIManager;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
|
||||
/**
|
||||
* Resizes frames and dialogs.
|
||||
* Resizes frames, dialogs or internal frames.
|
||||
* <p>
|
||||
* Could also be used to implement resize support for any Swing component
|
||||
* by creating a new subclass.
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class FlatWindowResizer
|
||||
implements PropertyChangeListener, WindowStateListener, ComponentListener
|
||||
public abstract class FlatWindowResizer
|
||||
implements PropertyChangeListener, ComponentListener
|
||||
{
|
||||
protected final static Integer WINDOW_RESIZER_LAYER = JLayeredPane.DRAG_LAYER + 1;
|
||||
|
||||
protected final JRootPane rootPane;
|
||||
protected final JComponent resizeComp;
|
||||
|
||||
protected final int borderDragThickness = FlatUIUtils.getUIInt( "RootPane.borderDragThickness", 5 );
|
||||
protected final int cornerDragWidth = FlatUIUtils.getUIInt( "RootPane.cornerDragWidth", 16 );
|
||||
protected final boolean honorFrameMinimumSizeOnResize = UIManager.getBoolean( "RootPane.honorFrameMinimumSizeOnResize" );
|
||||
protected final boolean honorDialogMinimumSizeOnResize = UIManager.getBoolean( "RootPane.honorDialogMinimumSizeOnResize" );
|
||||
|
||||
protected final JComponent north;
|
||||
protected final JComponent south;
|
||||
protected final JComponent west;
|
||||
protected final JComponent east;
|
||||
protected final DragBorderComponent topDragComp;
|
||||
protected final DragBorderComponent bottomDragComp;
|
||||
protected final DragBorderComponent leftDragComp;
|
||||
protected final DragBorderComponent rightDragComp;
|
||||
|
||||
protected Window window;
|
||||
protected FlatWindowResizer( JComponent resizeComp ) {
|
||||
this.resizeComp = resizeComp;
|
||||
|
||||
public FlatWindowResizer( JRootPane rootPane ) {
|
||||
this.rootPane = rootPane;
|
||||
topDragComp = createDragBorderComponent( NW_RESIZE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR );
|
||||
bottomDragComp = createDragBorderComponent( SW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR );
|
||||
leftDragComp = createDragBorderComponent( NW_RESIZE_CURSOR, W_RESIZE_CURSOR, SW_RESIZE_CURSOR );
|
||||
rightDragComp = createDragBorderComponent( NE_RESIZE_CURSOR, E_RESIZE_CURSOR, SE_RESIZE_CURSOR );
|
||||
|
||||
north = createDragBorderComponent( NW_RESIZE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR );
|
||||
south = createDragBorderComponent( SW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR );
|
||||
west = createDragBorderComponent( NW_RESIZE_CURSOR, W_RESIZE_CURSOR, SW_RESIZE_CURSOR );
|
||||
east = createDragBorderComponent( NE_RESIZE_CURSOR, E_RESIZE_CURSOR, SE_RESIZE_CURSOR );
|
||||
Container cont = (resizeComp instanceof JRootPane) ? ((JRootPane)resizeComp).getLayeredPane() : resizeComp;
|
||||
Object cons = (cont instanceof JLayeredPane) ? WINDOW_RESIZER_LAYER : null;
|
||||
cont.add( topDragComp, cons, 0 );
|
||||
cont.add( bottomDragComp, cons, 1 );
|
||||
cont.add( leftDragComp, cons, 2 );
|
||||
cont.add( rightDragComp, cons, 3 );
|
||||
|
||||
JLayeredPane layeredPane = rootPane.getLayeredPane();
|
||||
layeredPane.add( north, WINDOW_RESIZER_LAYER );
|
||||
layeredPane.add( south, WINDOW_RESIZER_LAYER );
|
||||
layeredPane.add( west, WINDOW_RESIZER_LAYER );
|
||||
layeredPane.add( east, WINDOW_RESIZER_LAYER );
|
||||
resizeComp.addComponentListener( this );
|
||||
resizeComp.addPropertyChangeListener( "ancestor", this );
|
||||
|
||||
rootPane.addComponentListener( this );
|
||||
rootPane.addPropertyChangeListener( "ancestor", this );
|
||||
|
||||
if( rootPane.isDisplayable() )
|
||||
if( resizeComp.isDisplayable() )
|
||||
addNotify();
|
||||
}
|
||||
|
||||
@@ -92,85 +99,96 @@ public class FlatWindowResizer
|
||||
public void uninstall() {
|
||||
removeNotify();
|
||||
|
||||
rootPane.removeComponentListener( this );
|
||||
rootPane.removePropertyChangeListener( "ancestor", this );
|
||||
resizeComp.removeComponentListener( this );
|
||||
resizeComp.removePropertyChangeListener( "ancestor", this );
|
||||
|
||||
JLayeredPane layeredPane = rootPane.getLayeredPane();
|
||||
layeredPane.remove( north );
|
||||
layeredPane.remove( south );
|
||||
layeredPane.remove( west );
|
||||
layeredPane.remove( east );
|
||||
Container cont = topDragComp.getParent();
|
||||
cont.remove( topDragComp );
|
||||
cont.remove( bottomDragComp );
|
||||
cont.remove( leftDragComp );
|
||||
cont.remove( rightDragComp );
|
||||
}
|
||||
|
||||
public void doLayout() {
|
||||
if( !north.isVisible() )
|
||||
if( !topDragComp.isVisible() )
|
||||
return;
|
||||
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int width = rootPane.getWidth();
|
||||
int height = rootPane.getHeight();
|
||||
int width = resizeComp.getWidth();
|
||||
int height = resizeComp.getHeight();
|
||||
if( width == 0 || height == 0 )
|
||||
return;
|
||||
|
||||
Insets resizeInsets = getResizeInsets();
|
||||
int thickness = UIScale.scale( borderDragThickness );
|
||||
int y2 = y + thickness;
|
||||
int height2 = height - (thickness * 2);
|
||||
int topThickness = Math.max( resizeInsets.top, thickness );
|
||||
int bottomThickness = Math.max( resizeInsets.bottom, thickness );
|
||||
int leftThickness = Math.max( resizeInsets.left, thickness );
|
||||
int rightThickness = Math.max( resizeInsets.right, thickness );
|
||||
int y2 = y + topThickness;
|
||||
int height2 = height - topThickness - bottomThickness;
|
||||
|
||||
north.setBounds( x, y, width, thickness );
|
||||
south.setBounds( x, y + height - thickness, width, thickness );
|
||||
west.setBounds( x, y2, thickness, height2 );
|
||||
east.setBounds( x + width - thickness, y2, thickness, height2 );
|
||||
// set bounds of drag components
|
||||
topDragComp.setBounds( x, y, width, topThickness );
|
||||
bottomDragComp.setBounds( x, y + height - bottomThickness, width, bottomThickness );
|
||||
leftDragComp.setBounds( x, y2, leftThickness, height2 );
|
||||
rightDragComp.setBounds( x + width - rightThickness, y2, rightThickness, height2 );
|
||||
|
||||
// set corner drag widths
|
||||
int cornerDelta = UIScale.scale( cornerDragWidth - borderDragThickness );
|
||||
topDragComp.setCornerDragWidths( leftThickness + cornerDelta, rightThickness + cornerDelta );
|
||||
bottomDragComp.setCornerDragWidths( leftThickness + cornerDelta, rightThickness + cornerDelta );
|
||||
leftDragComp.setCornerDragWidths( cornerDelta, cornerDelta );
|
||||
rightDragComp.setCornerDragWidths( cornerDelta, cornerDelta );
|
||||
}
|
||||
|
||||
protected Insets getResizeInsets() {
|
||||
return new Insets( 0, 0, 0, 0 );
|
||||
}
|
||||
|
||||
protected void addNotify() {
|
||||
Container parent = rootPane.getParent();
|
||||
window = (parent instanceof Window) ? (Window) parent : null;
|
||||
if( window instanceof Frame ) {
|
||||
window.addPropertyChangeListener( "resizable", this );
|
||||
window.addWindowStateListener( this );
|
||||
}
|
||||
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
protected void removeNotify() {
|
||||
if( window instanceof Frame ) {
|
||||
window.removePropertyChangeListener( "resizable", this );
|
||||
window.removeWindowStateListener( this );
|
||||
}
|
||||
window = null;
|
||||
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
protected void updateVisibility() {
|
||||
boolean visible = isWindowResizable();
|
||||
if( visible == north.isVisible() )
|
||||
if( visible == topDragComp.isVisible() )
|
||||
return;
|
||||
|
||||
north.setVisible( visible );
|
||||
south.setVisible( visible );
|
||||
west.setVisible( visible );
|
||||
topDragComp.setVisible( visible );
|
||||
bottomDragComp.setVisible( visible );
|
||||
leftDragComp.setVisible( visible );
|
||||
|
||||
// The east component is not hidden, instead its bounds are set to 0,0,1,1 and
|
||||
// it is disabled. This is necessary so that DragBorderComponent.paintComponent() is invoked.
|
||||
east.setEnabled( visible );
|
||||
rightDragComp.setEnabled( visible );
|
||||
if( visible ) {
|
||||
east.setVisible( true ); // necessary because it is initially invisible
|
||||
rightDragComp.setVisible( true ); // necessary because it is initially invisible
|
||||
doLayout();
|
||||
} else
|
||||
east.setBounds( 0, 0, 1, 1 );
|
||||
rightDragComp.setBounds( 0, 0, 1, 1 );
|
||||
}
|
||||
|
||||
protected boolean isWindowResizable() {
|
||||
if( window instanceof Frame )
|
||||
return ((Frame)window).isResizable() && (((Frame)window).getExtendedState() & Frame.MAXIMIZED_BOTH) == 0;
|
||||
if( window instanceof Dialog )
|
||||
return ((Dialog)window).isResizable();
|
||||
boolean isDialog() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected abstract boolean isWindowResizable();
|
||||
protected abstract Rectangle getWindowBounds();
|
||||
protected abstract void setWindowBounds( Rectangle r );
|
||||
protected abstract boolean honorMinimumSizeOnResize();
|
||||
protected abstract Dimension getWindowMinimumSize();
|
||||
|
||||
protected void beginResizing( int direction ) {}
|
||||
protected void endResizing() {}
|
||||
|
||||
//---- interface PropertyChangeListener ----
|
||||
|
||||
@Override
|
||||
public void propertyChange( PropertyChangeEvent e ) {
|
||||
switch( e.getPropertyName() ) {
|
||||
@@ -187,10 +205,7 @@ public class FlatWindowResizer
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowStateChanged( WindowEvent e ) {
|
||||
updateVisibility();
|
||||
}
|
||||
//---- interface ComponentListener ----
|
||||
|
||||
@Override
|
||||
public void componentResized( ComponentEvent e ) {
|
||||
@@ -201,6 +216,163 @@ public class FlatWindowResizer
|
||||
@Override public void componentShown( ComponentEvent e ) {}
|
||||
@Override public void componentHidden( ComponentEvent e ) {}
|
||||
|
||||
//---- class WindowResizer ------------------------------------------------
|
||||
|
||||
/**
|
||||
* Resizes frames and dialogs.
|
||||
*/
|
||||
public static class WindowResizer
|
||||
extends FlatWindowResizer
|
||||
implements WindowStateListener
|
||||
{
|
||||
protected Window window;
|
||||
|
||||
public WindowResizer( JRootPane rootPane ) {
|
||||
super( rootPane );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addNotify() {
|
||||
Container parent = resizeComp.getParent();
|
||||
window = (parent instanceof Window) ? (Window) parent : null;
|
||||
if( window instanceof Frame ) {
|
||||
window.addPropertyChangeListener( "resizable", this );
|
||||
window.addWindowStateListener( this );
|
||||
}
|
||||
|
||||
super.addNotify();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void removeNotify() {
|
||||
if( window instanceof Frame ) {
|
||||
window.removePropertyChangeListener( "resizable", this );
|
||||
window.removeWindowStateListener( this );
|
||||
}
|
||||
window = null;
|
||||
|
||||
super.removeNotify();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isWindowResizable() {
|
||||
if( window instanceof Frame )
|
||||
return ((Frame)window).isResizable() && (((Frame)window).getExtendedState() & Frame.MAXIMIZED_BOTH) == 0;
|
||||
if( window instanceof Dialog )
|
||||
return ((Dialog)window).isResizable();
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Rectangle getWindowBounds() {
|
||||
return window.getBounds();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setWindowBounds( Rectangle r ) {
|
||||
window.setBounds( r );
|
||||
|
||||
// immediately layout drag border components
|
||||
doLayout();
|
||||
|
||||
if( Toolkit.getDefaultToolkit().isDynamicLayoutActive() ) {
|
||||
window.validate();
|
||||
resizeComp.repaint();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean honorMinimumSizeOnResize() {
|
||||
return
|
||||
(honorFrameMinimumSizeOnResize && window instanceof Frame) ||
|
||||
(honorDialogMinimumSizeOnResize && window instanceof Dialog);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dimension getWindowMinimumSize() {
|
||||
return window.getMinimumSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isDialog() {
|
||||
return window instanceof Dialog;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowStateChanged( WindowEvent e ) {
|
||||
updateVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
//---- class InternalFrameResizer -----------------------------------------
|
||||
|
||||
/**
|
||||
* Resizes internal frames.
|
||||
*/
|
||||
public static class InternalFrameResizer
|
||||
extends FlatWindowResizer
|
||||
{
|
||||
protected final Supplier<DesktopManager> desktopManager;
|
||||
|
||||
public InternalFrameResizer( JInternalFrame frame, Supplier<DesktopManager> desktopManager ) {
|
||||
super( frame );
|
||||
this.desktopManager = desktopManager;
|
||||
|
||||
frame.addPropertyChangeListener( "resizable", this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uninstall() {
|
||||
getFrame().removePropertyChangeListener( "resizable", this );
|
||||
|
||||
super.uninstall();
|
||||
}
|
||||
|
||||
private JInternalFrame getFrame() {
|
||||
return (JInternalFrame) resizeComp;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Insets getResizeInsets() {
|
||||
return getFrame().getInsets();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isWindowResizable() {
|
||||
return getFrame().isResizable();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Rectangle getWindowBounds() {
|
||||
return getFrame().getBounds();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setWindowBounds( Rectangle r ) {
|
||||
desktopManager.get().resizeFrame( getFrame(), r.x, r.y, r.width, r.height );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean honorMinimumSizeOnResize() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dimension getWindowMinimumSize() {
|
||||
return getFrame().getMinimumSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void beginResizing( int direction ) {
|
||||
desktopManager.get().beginResizingFrame( getFrame(), direction );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void endResizing() {
|
||||
desktopManager.get().endResizingFrame( getFrame() );
|
||||
}
|
||||
}
|
||||
|
||||
//---- class DragBorderComponent ------------------------------------------
|
||||
|
||||
protected class DragBorderComponent
|
||||
@@ -212,9 +384,15 @@ public class FlatWindowResizer
|
||||
private final int trailingResizeDir;
|
||||
|
||||
private int resizeDir = -1;
|
||||
private int dragStartMouseX;
|
||||
private int dragStartMouseY;
|
||||
private Rectangle dragStartWindowBounds;
|
||||
|
||||
private int leadingCornerDragWidth;
|
||||
private int trailingCornerDragWidth;
|
||||
|
||||
// offsets of mouse position to window edges
|
||||
private int dragLeftOffset;
|
||||
private int dragRightOffset;
|
||||
private int dragTopOffset;
|
||||
private int dragBottomOffset;
|
||||
|
||||
protected DragBorderComponent( int leadingResizeDir, int centerResizeDir, int trailingResizeDir ) {
|
||||
this.leadingResizeDir = leadingResizeDir;
|
||||
@@ -228,6 +406,11 @@ public class FlatWindowResizer
|
||||
addMouseMotionListener( this );
|
||||
}
|
||||
|
||||
void setCornerDragWidths( int leading, int trailing ) {
|
||||
leadingCornerDragWidth = leading;
|
||||
trailingCornerDragWidth = trailing;
|
||||
}
|
||||
|
||||
protected void setResizeDir( int resizeDir ) {
|
||||
if( this.resizeDir == resizeDir )
|
||||
return;
|
||||
@@ -247,12 +430,25 @@ public class FlatWindowResizer
|
||||
super.paintChildren( g );
|
||||
|
||||
// this is necessary because Dialog.setResizable() does not fire events
|
||||
if( window instanceof Dialog )
|
||||
if( isDialog() )
|
||||
updateVisibility();
|
||||
|
||||
/*debug
|
||||
int width = getWidth();
|
||||
int height = getHeight();
|
||||
|
||||
g.setColor( java.awt.Color.blue );
|
||||
boolean topOrBottom = (centerResizeDir == N_RESIZE_CURSOR || centerResizeDir == S_RESIZE_CURSOR);
|
||||
if( topOrBottom ) {
|
||||
g.drawLine( leadingCornerDragWidth, 0, leadingCornerDragWidth, height );
|
||||
g.drawLine( width - trailingCornerDragWidth, 0, width - trailingCornerDragWidth, height );
|
||||
} else {
|
||||
g.drawLine( 0, leadingCornerDragWidth, width, leadingCornerDragWidth );
|
||||
g.drawLine( 0, height - trailingCornerDragWidth, width, height - trailingCornerDragWidth );
|
||||
}
|
||||
|
||||
g.setColor( java.awt.Color.red );
|
||||
g.drawRect( 0, 0, getWidth() - 1, getHeight() - 1 );
|
||||
g.drawRect( 0, 0, width - 1, height - 1 );
|
||||
debug*/
|
||||
}
|
||||
|
||||
@@ -262,114 +458,116 @@ debug*/
|
||||
|
||||
@Override
|
||||
public void mousePressed( MouseEvent e ) {
|
||||
if( window == null )
|
||||
if( !isWindowResizable() )
|
||||
return;
|
||||
|
||||
dragStartMouseX = e.getXOnScreen();
|
||||
dragStartMouseY = e.getYOnScreen();
|
||||
dragStartWindowBounds = window.getBounds();
|
||||
int xOnScreen = e.getXOnScreen();
|
||||
int yOnScreen = e.getYOnScreen();
|
||||
Rectangle windowBounds = getWindowBounds();
|
||||
|
||||
// compute offsets of mouse position to window edges
|
||||
dragLeftOffset = xOnScreen - windowBounds.x;
|
||||
dragTopOffset = yOnScreen - windowBounds.y;
|
||||
dragRightOffset = windowBounds.x + windowBounds.width - xOnScreen;
|
||||
dragBottomOffset = windowBounds.y + windowBounds.height - yOnScreen;
|
||||
|
||||
int direction = 0;
|
||||
switch( resizeDir ) {
|
||||
case N_RESIZE_CURSOR: direction = NORTH; break;
|
||||
case S_RESIZE_CURSOR: direction = SOUTH; break;
|
||||
case W_RESIZE_CURSOR: direction = WEST; break;
|
||||
case E_RESIZE_CURSOR: direction = EAST; break;
|
||||
case NW_RESIZE_CURSOR: direction = NORTH_WEST; break;
|
||||
case NE_RESIZE_CURSOR: direction = NORTH_EAST; break;
|
||||
case SW_RESIZE_CURSOR: direction = SOUTH_WEST; break;
|
||||
case SE_RESIZE_CURSOR: direction = SOUTH_EAST; break;
|
||||
}
|
||||
beginResizing( direction );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased( MouseEvent e ) {
|
||||
dragStartWindowBounds = null;
|
||||
if( !isWindowResizable() )
|
||||
return;
|
||||
|
||||
dragLeftOffset = dragRightOffset = dragTopOffset = dragBottomOffset = 0;
|
||||
|
||||
endResizing();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered( MouseEvent e ) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited( MouseEvent e ) {
|
||||
}
|
||||
@Override public void mouseEntered( MouseEvent e ) {}
|
||||
@Override public void mouseExited( MouseEvent e ) {}
|
||||
|
||||
@Override
|
||||
public void mouseMoved( MouseEvent e ) {
|
||||
boolean topBottom = (centerResizeDir == N_RESIZE_CURSOR || centerResizeDir == S_RESIZE_CURSOR);
|
||||
int xy = topBottom ? e.getX() : e.getY();
|
||||
int wh = topBottom ? getWidth() : getHeight();
|
||||
int cornerWH = UIScale.scale( cornerDragWidth - (topBottom ? 0 : borderDragThickness) );
|
||||
boolean topOrBottom = (centerResizeDir == N_RESIZE_CURSOR || centerResizeDir == S_RESIZE_CURSOR);
|
||||
int xy = topOrBottom ? e.getX() : e.getY();
|
||||
int wh = topOrBottom ? getWidth() : getHeight();
|
||||
|
||||
setResizeDir( xy <= cornerWH
|
||||
setResizeDir( xy <= leadingCornerDragWidth
|
||||
? leadingResizeDir
|
||||
: (xy >= wh - cornerWH
|
||||
: (xy >= wh - trailingCornerDragWidth
|
||||
? trailingResizeDir
|
||||
: centerResizeDir) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged( MouseEvent e ) {
|
||||
if( dragStartWindowBounds == null )
|
||||
return;
|
||||
|
||||
if( !isWindowResizable() )
|
||||
return;
|
||||
|
||||
int mouseDeltaX = e.getXOnScreen() - dragStartMouseX;
|
||||
int mouseDeltaY = e.getYOnScreen() - dragStartMouseY;
|
||||
int xOnScreen = e.getXOnScreen();
|
||||
int yOnScreen = e.getYOnScreen();
|
||||
|
||||
int deltaX = 0;
|
||||
int deltaY = 0;
|
||||
int deltaWidth = 0;
|
||||
int deltaHeight = 0;
|
||||
|
||||
// north
|
||||
if( resizeDir == N_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR ) {
|
||||
deltaY = mouseDeltaY;
|
||||
deltaHeight = -mouseDeltaY;
|
||||
}
|
||||
|
||||
// south
|
||||
if( resizeDir == S_RESIZE_CURSOR || resizeDir == SW_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR )
|
||||
deltaHeight = mouseDeltaY;
|
||||
|
||||
// west
|
||||
if( resizeDir == W_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == SW_RESIZE_CURSOR ) {
|
||||
deltaX = mouseDeltaX;
|
||||
deltaWidth = -mouseDeltaX;
|
||||
}
|
||||
|
||||
// east
|
||||
if( resizeDir == E_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR )
|
||||
deltaWidth = mouseDeltaX;
|
||||
// Get current window bounds and compute new bounds based them.
|
||||
// This is necessary because window manager may alter window bounds while resizing.
|
||||
// E.g. when having two monitors with different scale factors and resizing
|
||||
// a window on first screen to the second screen, then the window manager may
|
||||
// decide at some point that the window should be only on second screen
|
||||
// and adjusts its bounds.
|
||||
Rectangle oldBounds = getWindowBounds();
|
||||
Rectangle newBounds = new Rectangle( oldBounds );
|
||||
|
||||
// compute new window bounds
|
||||
Rectangle newBounds = new Rectangle( dragStartWindowBounds );
|
||||
newBounds.x += deltaX;
|
||||
newBounds.y += deltaY;
|
||||
newBounds.width += deltaWidth;
|
||||
newBounds.height += deltaHeight;
|
||||
|
||||
// top
|
||||
if( resizeDir == N_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR ) {
|
||||
newBounds.y = yOnScreen - dragTopOffset;
|
||||
newBounds.height += (oldBounds.y - newBounds.y);
|
||||
}
|
||||
|
||||
// bottom
|
||||
if( resizeDir == S_RESIZE_CURSOR || resizeDir == SW_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR )
|
||||
newBounds.height = (yOnScreen + dragBottomOffset) - newBounds.y;
|
||||
|
||||
// left
|
||||
if( resizeDir == W_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == SW_RESIZE_CURSOR ) {
|
||||
newBounds.x = xOnScreen - dragLeftOffset;
|
||||
newBounds.width += (oldBounds.x - newBounds.x);
|
||||
}
|
||||
|
||||
// right
|
||||
if( resizeDir == E_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR )
|
||||
newBounds.width = (xOnScreen + dragRightOffset) - newBounds.x;
|
||||
|
||||
// apply minimum window size
|
||||
boolean honorMinimumSizeOnResize =
|
||||
(honorFrameMinimumSizeOnResize && window instanceof Frame) ||
|
||||
(honorDialogMinimumSizeOnResize && window instanceof Dialog);
|
||||
Dimension minimumSize = honorMinimumSizeOnResize ? window.getMinimumSize() : null;
|
||||
Dimension minimumSize = honorMinimumSizeOnResize() ? getWindowMinimumSize() : null;
|
||||
if( minimumSize == null )
|
||||
minimumSize = UIScale.scale( new Dimension( 150, 50 ) );
|
||||
if( newBounds.width < minimumSize.width ) {
|
||||
if( deltaX != 0 )
|
||||
if( newBounds.x != oldBounds.x )
|
||||
newBounds.x -= (minimumSize.width - newBounds.width);
|
||||
newBounds.width = minimumSize.width;
|
||||
}
|
||||
if( newBounds.height < minimumSize.height ) {
|
||||
if( deltaY != 0 )
|
||||
if( newBounds.y != oldBounds.y )
|
||||
newBounds.y -= (minimumSize.height - newBounds.height);
|
||||
newBounds.height = minimumSize.height;
|
||||
}
|
||||
|
||||
// set window bounds
|
||||
if( !newBounds.equals( dragStartWindowBounds ) ) {
|
||||
window.setBounds( newBounds );
|
||||
|
||||
// immediately layout drag border components
|
||||
FlatWindowResizer.this.doLayout();
|
||||
|
||||
if( Toolkit.getDefaultToolkit().isDynamicLayoutActive() ) {
|
||||
window.validate();
|
||||
rootPane.repaint();
|
||||
}
|
||||
}
|
||||
if( !newBounds.equals( oldBounds ) )
|
||||
setWindowBounds( newBounds );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.util;
|
||||
|
||||
import static com.formdev.flatlaf.util.UIScale.scale;
|
||||
import java.awt.Component;
|
||||
import java.awt.Insets;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
|
||||
/**
|
||||
* Empty border that scales insets.
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class ScaledEmptyBorder
|
||||
extends EmptyBorder
|
||||
{
|
||||
public ScaledEmptyBorder( int top, int left, int bottom, int right ) {
|
||||
super( top, left, bottom, right );
|
||||
}
|
||||
|
||||
public ScaledEmptyBorder( Insets insets ) {
|
||||
super( insets );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Insets getBorderInsets() {
|
||||
return new Insets( scale( top ), scale( left ), scale( bottom ), scale( right ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Insets getBorderInsets( Component c, Insets insets ) {
|
||||
insets.left = scale( left );
|
||||
insets.top = scale( top );
|
||||
insets.right = scale( right );
|
||||
insets.bottom = scale( bottom );
|
||||
return insets;
|
||||
}
|
||||
}
|
||||
@@ -21,18 +21,20 @@
|
||||
#---- variables ----
|
||||
|
||||
@background=#3c3f41
|
||||
@foreground=#bbbbbb
|
||||
@foreground=#bbb
|
||||
@selectionBackground=#4B6EAF
|
||||
@selectionForeground=@foreground
|
||||
@selectionInactiveBackground=#0D293E
|
||||
@selectionInactiveForeground=@foreground
|
||||
@disabledText=#777777
|
||||
@disabledText=#888
|
||||
@textComponentBackground=#45494A
|
||||
@menuBackground=darken(@background,5%)
|
||||
@menuHoverBackground=lighten(@menuBackground,10%,derived)
|
||||
@menuCheckBackground=lighten(@menuBackground,10%,derived)
|
||||
@menuCheckHoverBackground=lighten(@menuBackground,20%,derived)
|
||||
@cellFocusColor=#000000
|
||||
@menuAcceleratorForeground=darken(@foreground,15%)
|
||||
@menuAcceleratorSelectionForeground=@selectionForeground
|
||||
@cellFocusColor=#000
|
||||
@icon=#adadad
|
||||
|
||||
# Drop (use lazy colors for IntelliJ platform themes, which usually do not specify these colors)
|
||||
@@ -42,24 +44,6 @@
|
||||
@dropLineShortColor=lighten(List.selectionBackground,30%,lazy)
|
||||
|
||||
|
||||
#---- globals ----
|
||||
|
||||
*.background=@background
|
||||
*.foreground=@foreground
|
||||
*.textBackground=@background
|
||||
*.textForeground=@foreground
|
||||
*.caretForeground=@foreground
|
||||
*.inactiveBackground=@background
|
||||
*.inactiveForeground=@foreground
|
||||
*.selectionBackground=@selectionBackground
|
||||
*.selectionForeground=@selectionForeground
|
||||
*.disabledBackground=@background
|
||||
*.disabledForeground=@disabledText
|
||||
*.disabledText=@disabledText
|
||||
*.acceleratorForeground=darken(@foreground,15%)
|
||||
*.acceleratorSelectionForeground=@selectionForeground
|
||||
|
||||
|
||||
#---- system colors ----
|
||||
|
||||
activeCaption=#434E60
|
||||
@@ -74,6 +58,9 @@ controlDkShadow=lighten($controlShadow,10%)
|
||||
Button.background=#4c5052
|
||||
Button.hoverBackground=lighten($Button.background,3%,derived)
|
||||
Button.pressedBackground=lighten($Button.background,6%,derived)
|
||||
Button.selectedBackground=lighten($Button.background,10%,derived)
|
||||
Button.selectedForeground=@foreground
|
||||
Button.disabledSelectedBackground=lighten($Button.background,3%,derived)
|
||||
|
||||
Button.borderColor=#5e6060
|
||||
Button.disabledBorderColor=#5e6060
|
||||
@@ -81,7 +68,7 @@ Button.focusedBorderColor=#466d94
|
||||
Button.hoverBorderColor=$Button.focusedBorderColor
|
||||
|
||||
Button.default.background=#365880
|
||||
Button.default.foreground=#bbbbbb
|
||||
Button.default.foreground=#bbb
|
||||
Button.default.hoverBackground=lighten($Button.default.background,3%,derived)
|
||||
Button.default.pressedBackground=lighten($Button.default.background,6%,derived)
|
||||
Button.default.borderColor=#4c708c
|
||||
@@ -92,6 +79,7 @@ Button.default.boldText=true
|
||||
|
||||
Button.toolbar.hoverBackground=lighten($Button.background,1%,derived)
|
||||
Button.toolbar.pressedBackground=lighten($Button.background,4%,derived)
|
||||
Button.toolbar.selectedBackground=lighten($Button.background,7%,derived)
|
||||
|
||||
|
||||
#---- CheckBox ----
|
||||
@@ -132,12 +120,10 @@ CheckBox.icon[filled].selectedPressedBackground=darken($CheckBox.icon[filled].se
|
||||
|
||||
#---- ComboBox ----
|
||||
|
||||
ComboBox.background=@textComponentBackground
|
||||
ComboBox.buttonBackground=@textComponentBackground
|
||||
ComboBox.buttonEditableBackground=#404445
|
||||
ComboBox.buttonArrowColor=#9A9DA1
|
||||
ComboBox.buttonDisabledArrowColor=#585858
|
||||
ComboBox.buttonHoverArrowColor=#bbbbbb
|
||||
ComboBox.buttonHoverArrowColor=#bbb
|
||||
|
||||
|
||||
#---- Component ----
|
||||
@@ -187,11 +173,6 @@ InternalFrame.activeDropShadowOpacity=0.5
|
||||
InternalFrame.inactiveDropShadowOpacity=0.75
|
||||
|
||||
|
||||
#---- List ----
|
||||
|
||||
List.background=@textComponentBackground
|
||||
|
||||
|
||||
#---- Menu ----
|
||||
|
||||
Menu.icon.arrowColor=#A7A7A7
|
||||
@@ -201,7 +182,6 @@ Menu.icon.disabledArrowColor=#606060
|
||||
#---- MenuBar ----
|
||||
|
||||
MenuBar.borderColor=#515151
|
||||
MenuBar.hoverBackground=@menuHoverBackground
|
||||
|
||||
|
||||
#---- MenuItemCheckBox ----
|
||||
@@ -228,17 +208,12 @@ PopupMenu.borderColor=#5e5e5e
|
||||
|
||||
#---- ProgressBar ----
|
||||
|
||||
ProgressBar.background=#555555
|
||||
ProgressBar.background=#555
|
||||
ProgressBar.foreground=#4A88C7
|
||||
ProgressBar.selectionForeground=@foreground
|
||||
ProgressBar.selectionBackground=@foreground
|
||||
|
||||
|
||||
#---- RadioButton ----
|
||||
|
||||
RadioButton.icon[filled].centerDiameter=5
|
||||
|
||||
|
||||
#---- RootPane ----
|
||||
|
||||
RootPane.activeBorderColor=darken(@background,7%,derived)
|
||||
@@ -265,7 +240,7 @@ Separator.foreground=#515151
|
||||
|
||||
Slider.trackColor=#646464
|
||||
Slider.thumbColor=#A6A6A6
|
||||
Slider.tickColor=#888888
|
||||
Slider.tickColor=#888
|
||||
Slider.hoverColor=darken($Slider.thumbColor,15%,derived)
|
||||
Slider.disabledForeground=#4c5052
|
||||
|
||||
@@ -278,7 +253,6 @@ SplitPaneDivider.oneTouchHoverArrowColor=#7A7D81
|
||||
|
||||
#---- TabbedPane ----
|
||||
|
||||
TabbedPane.disabledForeground=@disabledText
|
||||
TabbedPane.underlineColor=#4A88C7
|
||||
TabbedPane.disabledUnderlineColor=#7a7a7a
|
||||
TabbedPane.hoverColor=#2e3133
|
||||
@@ -288,13 +262,11 @@ TabbedPane.contentAreaColor=#323232
|
||||
|
||||
#---- Table ----
|
||||
|
||||
Table.background=@textComponentBackground
|
||||
Table.gridColor=lighten($Table.background,3%)
|
||||
|
||||
|
||||
#---- TableHeader ----
|
||||
|
||||
TableHeader.background=@textComponentBackground
|
||||
TableHeader.separatorColor=lighten($TableHeader.background,10%)
|
||||
TableHeader.bottomSeparatorColor=$TableHeader.separatorColor
|
||||
|
||||
@@ -309,7 +281,6 @@ TitlePane.buttonPressedBackground=lighten($TitlePane.background,20%,derived)
|
||||
#---- ToggleButton ----
|
||||
|
||||
ToggleButton.selectedBackground=lighten($ToggleButton.background,10%,derived)
|
||||
ToggleButton.selectedForeground=@foreground
|
||||
ToggleButton.disabledSelectedBackground=lighten($ToggleButton.background,3%,derived)
|
||||
|
||||
ToggleButton.toolbar.selectedBackground=lighten($ToggleButton.background,7%,derived)
|
||||
@@ -323,5 +294,4 @@ ToolTip.background=#1e2123
|
||||
|
||||
#---- Tree ----
|
||||
|
||||
Tree.background=@textComponentBackground
|
||||
Tree.hash=#505355
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
Button.focusedBackground=null
|
||||
|
||||
Button.default.background=#4D8AC9
|
||||
Button.default.foreground=#FFFFFF
|
||||
Button.default.foreground=#fff
|
||||
Button.default.focusedBackground=null
|
||||
Button.default.borderColor=#3D75B2
|
||||
Button.default.hoverBorderColor=#A9C9F5
|
||||
|
||||
@@ -67,6 +67,22 @@ ViewportUI=com.formdev.flatlaf.ui.FlatViewportUI
|
||||
@menuItemMargin=3,6,3,6
|
||||
|
||||
|
||||
#---- globals ----
|
||||
|
||||
*.background=@background
|
||||
*.foreground=@foreground
|
||||
*.caretForeground=@foreground
|
||||
*.inactiveBackground=@background
|
||||
*.inactiveForeground=@disabledText
|
||||
*.selectionBackground=@selectionBackground
|
||||
*.selectionForeground=@selectionForeground
|
||||
*.disabledBackground=@background
|
||||
*.disabledForeground=@disabledText
|
||||
*.disabledText=@disabledText
|
||||
*.acceleratorForeground=@menuAcceleratorForeground
|
||||
*.acceleratorSelectionForeground=@menuAcceleratorSelectionForeground
|
||||
|
||||
|
||||
#---- system colors ----
|
||||
|
||||
desktop=@textComponentBackground
|
||||
@@ -184,6 +200,8 @@ ComboBox.editorColumns=0
|
||||
ComboBox.maximumRowCount=15
|
||||
[mac]ComboBox.showPopupOnNavigation=true
|
||||
ComboBox.buttonStyle=auto
|
||||
ComboBox.background=@textComponentBackground
|
||||
ComboBox.buttonBackground=@textComponentBackground
|
||||
|
||||
|
||||
#---- Component ----
|
||||
@@ -288,6 +306,7 @@ List.cellFocusColor=@cellFocusColor
|
||||
List.cellNoFocusBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Default
|
||||
List.focusCellHighlightBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Focused
|
||||
List.focusSelectedCellHighlightBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Selected
|
||||
List.background=@textComponentBackground
|
||||
List.selectionInactiveBackground=@selectionInactiveBackground
|
||||
List.selectionInactiveForeground=@selectionInactiveForeground
|
||||
List.dropCellBackground=@dropCellBackground
|
||||
@@ -313,6 +332,7 @@ Menu.background=@menuBackground
|
||||
|
||||
MenuBar.border=com.formdev.flatlaf.ui.FlatMenuBarBorder
|
||||
MenuBar.background=@menuBackground
|
||||
MenuBar.hoverBackground=@menuHoverBackground
|
||||
MenuBar.itemMargins=3,8,3,8
|
||||
|
||||
|
||||
@@ -373,6 +393,7 @@ PasswordField.margin=@textComponentMargin
|
||||
PasswordField.background=@textComponentBackground
|
||||
PasswordField.placeholderForeground=@disabledText
|
||||
PasswordField.echoChar=\u2022
|
||||
PasswordField.showCapsLock=true
|
||||
PasswordField.capsLockIcon=com.formdev.flatlaf.icons.FlatCapsLockIcon
|
||||
|
||||
|
||||
@@ -411,6 +432,7 @@ ProgressBar.repaintInterval=15
|
||||
RadioButton.border=com.formdev.flatlaf.ui.FlatMarginBorder
|
||||
RadioButton.icon=com.formdev.flatlaf.icons.FlatRadioButtonIcon
|
||||
RadioButton.icon.centerDiameter=8
|
||||
RadioButton.icon[filled].centerDiameter=5
|
||||
RadioButton.margin=2,2,2,2
|
||||
RadioButton.iconTextGap=4
|
||||
RadioButton.rollover=true
|
||||
@@ -522,6 +544,7 @@ TabbedPane.tabAreaInsets=0,0,0,0
|
||||
TabbedPane.selectedTabPadInsets=0,0,0,0
|
||||
TabbedPane.tabRunOverlay=0
|
||||
TabbedPane.tabsOverlapBorder=true
|
||||
TabbedPane.disabledForeground=@disabledText
|
||||
TabbedPane.shadow=@background
|
||||
TabbedPane.contentBorderInsets=null
|
||||
|
||||
@@ -544,6 +567,7 @@ Table.focusCellHighlightBorder=com.formdev.flatlaf.ui.FlatTableCellBorder$Focuse
|
||||
Table.focusSelectedCellHighlightBorder=com.formdev.flatlaf.ui.FlatTableCellBorder$Selected
|
||||
Table.focusCellBackground=@textComponentBackground
|
||||
Table.focusCellForeground=@foreground
|
||||
Table.background=@textComponentBackground
|
||||
Table.selectionInactiveBackground=@selectionInactiveBackground
|
||||
Table.selectionInactiveForeground=@selectionInactiveForeground
|
||||
Table.dropCellBackground=@dropCellBackground
|
||||
@@ -557,6 +581,7 @@ Table.dropLineShortColor=@dropLineShortColor
|
||||
TableHeader.height=25
|
||||
TableHeader.cellBorder=2,3,2,3
|
||||
TableHeader.focusCellBackground=$TableHeader.background
|
||||
TableHeader.background=@textComponentBackground
|
||||
|
||||
|
||||
#---- TextArea ----
|
||||
@@ -628,6 +653,7 @@ ToggleButton.rollover=true
|
||||
|
||||
ToggleButton.background=$Button.background
|
||||
ToggleButton.pressedBackground=$Button.pressedBackground
|
||||
ToggleButton.selectedForeground=@foreground
|
||||
|
||||
ToggleButton.toolbar.hoverBackground=$Button.toolbar.hoverBackground
|
||||
ToggleButton.toolbar.pressedBackground=$Button.toolbar.pressedBackground
|
||||
@@ -668,9 +694,11 @@ ToolTipManager.enableToolTipMode=activeApplication
|
||||
|
||||
Tree.border=1,1,1,1
|
||||
Tree.editorBorder=1,1,1,1,@cellFocusColor
|
||||
Tree.background=@textComponentBackground
|
||||
Tree.selectionInactiveBackground=@selectionInactiveBackground
|
||||
Tree.selectionInactiveForeground=@selectionInactiveForeground
|
||||
Tree.textBackground=$Tree.background
|
||||
Tree.textForeground=$Tree.foreground
|
||||
Tree.selectionBorderColor=@cellFocusColor
|
||||
Tree.dropCellBackground=@dropCellBackground
|
||||
Tree.dropCellForeground=@dropCellForeground
|
||||
|
||||
@@ -21,18 +21,20 @@
|
||||
#---- variables ----
|
||||
|
||||
@background=#f2f2f2
|
||||
@foreground=#000000
|
||||
@foreground=#000
|
||||
@selectionBackground=#2675BF
|
||||
@selectionForeground=#ffffff
|
||||
@selectionForeground=#fff
|
||||
@selectionInactiveBackground=#d4d4d4
|
||||
@selectionInactiveForeground=@foreground
|
||||
@disabledText=#8C8C8C
|
||||
@textComponentBackground=#ffffff
|
||||
@textComponentBackground=#fff
|
||||
@menuBackground=#fff
|
||||
@menuHoverBackground=darken(@menuBackground,10%,derived)
|
||||
@menuCheckBackground=darken(@menuBackground,10%,derived)
|
||||
@menuCheckHoverBackground=darken(@menuBackground,20%,derived)
|
||||
@cellFocusColor=#000000
|
||||
@menuAcceleratorForeground=lighten(@foreground,30%)
|
||||
@menuAcceleratorSelectionForeground=@selectionForeground
|
||||
@cellFocusColor=#000
|
||||
@icon=#afafaf
|
||||
|
||||
# Drop (use lazy colors for IntelliJ platform themes, which usually do not specify these colors)
|
||||
@@ -42,24 +44,6 @@
|
||||
@dropLineShortColor=darken(List.selectionBackground,20%,lazy)
|
||||
|
||||
|
||||
#---- globals ----
|
||||
|
||||
*.background=@background
|
||||
*.foreground=@foreground
|
||||
*.textBackground=#cccccc
|
||||
*.textForeground=@foreground
|
||||
*.caretForeground=@foreground
|
||||
*.inactiveBackground=@background
|
||||
*.inactiveForeground=@disabledText
|
||||
*.selectionBackground=@selectionBackground
|
||||
*.selectionForeground=@selectionForeground
|
||||
*.disabledBackground=@background
|
||||
*.disabledForeground=@disabledText
|
||||
*.disabledText=@disabledText
|
||||
*.acceleratorForeground=lighten(@foreground,30%)
|
||||
*.acceleratorSelectionForeground=@selectionForeground
|
||||
|
||||
|
||||
#---- system colors ----
|
||||
|
||||
activeCaption=#99b4d1
|
||||
@@ -71,10 +55,13 @@ controlDkShadow=darken($controlShadow,15%)
|
||||
|
||||
#---- Button ----
|
||||
|
||||
Button.background=#ffffff
|
||||
Button.background=#fff
|
||||
Button.focusedBackground=#e3f1fa
|
||||
Button.hoverBackground=darken($Button.background,3%,derived)
|
||||
Button.pressedBackground=darken($Button.background,10%,derived)
|
||||
Button.selectedBackground=darken($Button.background,20%,derived)
|
||||
Button.selectedForeground=@foreground
|
||||
Button.disabledSelectedBackground=darken($Button.background,13%,derived)
|
||||
|
||||
Button.borderColor=$Component.borderColor
|
||||
Button.disabledBorderColor=$Component.disabledBorderColor
|
||||
@@ -94,13 +81,14 @@ Button.default.borderWidth=2
|
||||
|
||||
Button.toolbar.hoverBackground=darken($Button.background,12%,derived)
|
||||
Button.toolbar.pressedBackground=darken($Button.background,15%,derived)
|
||||
Button.toolbar.selectedBackground=$Button.selectedBackground
|
||||
|
||||
|
||||
#---- CheckBox ----
|
||||
|
||||
# enabled
|
||||
CheckBox.icon.borderColor=#b0b0b0
|
||||
CheckBox.icon.background=#FFFFFF
|
||||
CheckBox.icon.background=#fff
|
||||
CheckBox.icon.selectedBorderColor=$CheckBox.icon.borderColor
|
||||
CheckBox.icon.selectedBackground=$CheckBox.icon.background
|
||||
CheckBox.icon.checkmarkColor=#4F9EE3
|
||||
@@ -126,7 +114,7 @@ CheckBox.icon.pressedBackground=$Button.pressedBackground
|
||||
# enabled
|
||||
CheckBox.icon[filled].selectedBorderColor=#4B97D9
|
||||
CheckBox.icon[filled].selectedBackground=#4F9EE3
|
||||
CheckBox.icon[filled].checkmarkColor=#FFFFFF
|
||||
CheckBox.icon[filled].checkmarkColor=#fff
|
||||
# focused
|
||||
CheckBox.icon[filled].selectedFocusedBorderColor=#ACCFF7
|
||||
CheckBox.icon[filled].selectedFocusedBackground=$CheckBox.icon[filled].selectedBackground
|
||||
@@ -139,12 +127,10 @@ CheckBox.icon[filled].selectedPressedBackground=darken($CheckBox.icon[filled].se
|
||||
|
||||
#---- ComboBox ----
|
||||
|
||||
ComboBox.background=@textComponentBackground
|
||||
ComboBox.buttonBackground=@textComponentBackground
|
||||
ComboBox.buttonEditableBackground=#fafafa
|
||||
ComboBox.buttonArrowColor=#666666
|
||||
ComboBox.buttonArrowColor=#666
|
||||
ComboBox.buttonDisabledArrowColor=#ABABAB
|
||||
ComboBox.buttonHoverArrowColor=#999999
|
||||
ComboBox.buttonHoverArrowColor=#999
|
||||
|
||||
|
||||
#---- Component ----
|
||||
@@ -199,21 +185,15 @@ InternalFrame.activeDropShadowOpacity=0.25
|
||||
InternalFrame.inactiveDropShadowOpacity=0.5
|
||||
|
||||
|
||||
#---- List ----
|
||||
|
||||
List.background=@textComponentBackground
|
||||
|
||||
|
||||
#---- Menu ----
|
||||
|
||||
Menu.icon.arrowColor=#666666
|
||||
Menu.icon.arrowColor=#666
|
||||
Menu.icon.disabledArrowColor=#ABABAB
|
||||
|
||||
|
||||
#---- MenuBar ----
|
||||
|
||||
MenuBar.borderColor=#cdcdcd
|
||||
MenuBar.hoverBackground=@menuHoverBackground
|
||||
|
||||
|
||||
#---- MenuItemCheckBox ----
|
||||
@@ -246,11 +226,6 @@ ProgressBar.selectionForeground=@textComponentBackground
|
||||
ProgressBar.selectionBackground=@foreground
|
||||
|
||||
|
||||
#---- RadioButton ----
|
||||
|
||||
RadioButton.icon[filled].centerDiameter=5
|
||||
|
||||
|
||||
#---- RootPane ----
|
||||
|
||||
RootPane.activeBorderColor=#707070
|
||||
@@ -277,7 +252,7 @@ Separator.foreground=#d1d1d1
|
||||
|
||||
Slider.trackColor=#c4c4c4
|
||||
Slider.thumbColor=#6e6e6e
|
||||
Slider.tickColor=#888888
|
||||
Slider.tickColor=#888
|
||||
Slider.hoverColor=lighten($Slider.thumbColor,15%,derived)
|
||||
Slider.disabledForeground=#c0c0c0
|
||||
|
||||
@@ -285,12 +260,11 @@ Slider.disabledForeground=#c0c0c0
|
||||
#---- SplitPane ----
|
||||
|
||||
SplitPaneDivider.draggingColor=#c4c4c4
|
||||
SplitPaneDivider.oneTouchHoverArrowColor=#333333
|
||||
SplitPaneDivider.oneTouchHoverArrowColor=#333
|
||||
|
||||
|
||||
#---- TabbedPane ----
|
||||
|
||||
TabbedPane.disabledForeground=@disabledText
|
||||
TabbedPane.underlineColor=#4083C9
|
||||
TabbedPane.disabledUnderlineColor=#ababab
|
||||
TabbedPane.hoverColor=#d9d9d9
|
||||
@@ -300,13 +274,11 @@ TabbedPane.contentAreaColor=#bfbfbf
|
||||
|
||||
#---- Table ----
|
||||
|
||||
Table.background=@textComponentBackground
|
||||
Table.gridColor=darken($Table.background,3%)
|
||||
|
||||
|
||||
#---- TableHeader ----
|
||||
|
||||
TableHeader.background=@textComponentBackground
|
||||
TableHeader.separatorColor=darken($TableHeader.background,10%)
|
||||
TableHeader.bottomSeparatorColor=$TableHeader.separatorColor
|
||||
|
||||
@@ -321,7 +293,6 @@ TitlePane.buttonPressedBackground=darken($TitlePane.background,20%,derived)
|
||||
#---- ToggleButton ----
|
||||
|
||||
ToggleButton.selectedBackground=darken($ToggleButton.background,20%,derived)
|
||||
ToggleButton.selectedForeground=@foreground
|
||||
ToggleButton.disabledSelectedBackground=darken($ToggleButton.background,13%,derived)
|
||||
|
||||
ToggleButton.toolbar.selectedBackground=$ToggleButton.selectedBackground
|
||||
@@ -335,5 +306,4 @@ ToolTip.background=#fafafa
|
||||
|
||||
#---- Tree ----
|
||||
|
||||
Tree.background=@textComponentBackground
|
||||
Tree.hash=#E6E6E6
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.formdev.flatlaf.demo;
|
||||
|
||||
import java.awt.Component;
|
||||
import javax.swing.*;
|
||||
import javax.swing.text.DefaultEditorKit;
|
||||
import net.miginfocom.swing.*;
|
||||
@@ -114,14 +115,14 @@ class BasicComponentsPanel
|
||||
JScrollPane scrollPane12 = new JScrollPane();
|
||||
JTextPane textPane4 = new JTextPane();
|
||||
JTextPane textPane5 = new JTextPane();
|
||||
JLabel label3 = new JLabel();
|
||||
JTextField textField5 = new JTextField();
|
||||
JComboBox<String> comboBox7 = new JComboBox<>();
|
||||
JSpinner spinner3 = new JSpinner();
|
||||
JLabel label4 = new JLabel();
|
||||
JTextField textField7 = new JTextField();
|
||||
JComboBox<String> comboBox8 = new JComboBox<>();
|
||||
JSpinner spinner4 = new JSpinner();
|
||||
JLabel errorHintsLabel = new JLabel();
|
||||
JTextField errorHintsTextField = new JTextField();
|
||||
JComboBox<String> errorHintsComboBox = new JComboBox<>();
|
||||
JSpinner errorHintsSpinner = new JSpinner();
|
||||
JLabel warningHintsLabel = new JLabel();
|
||||
JTextField warningHintsTextField = new JTextField();
|
||||
JComboBox<String> warningHintsComboBox = new JComboBox<>();
|
||||
JSpinner warningHintsSpinner = new JSpinner();
|
||||
JPopupMenu popupMenu1 = new JPopupMenu();
|
||||
JMenuItem cutMenuItem = new JMenuItem();
|
||||
JMenuItem copyMenuItem = new JMenuItem();
|
||||
@@ -129,12 +130,12 @@ class BasicComponentsPanel
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
"insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[sizegroup 1]" +
|
||||
"[sizegroup 1]" +
|
||||
"[sizegroup 1]" +
|
||||
"[sizegroup 1]" +
|
||||
"[]" +
|
||||
"[]",
|
||||
// rows
|
||||
@@ -606,44 +607,44 @@ class BasicComponentsPanel
|
||||
textPane5.setText("No scroll pane");
|
||||
add(textPane5, "cell 5 11,growx");
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("Error hints:");
|
||||
add(label3, "cell 0 12");
|
||||
//---- errorHintsLabel ----
|
||||
errorHintsLabel.setText("Error hints:");
|
||||
add(errorHintsLabel, "cell 0 12");
|
||||
|
||||
//---- textField5 ----
|
||||
textField5.putClientProperty("JComponent.outline", "error");
|
||||
add(textField5, "cell 1 12,growx");
|
||||
//---- errorHintsTextField ----
|
||||
errorHintsTextField.putClientProperty("JComponent.outline", "error");
|
||||
add(errorHintsTextField, "cell 1 12,growx");
|
||||
|
||||
//---- comboBox7 ----
|
||||
comboBox7.putClientProperty("JComponent.outline", "error");
|
||||
comboBox7.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
//---- errorHintsComboBox ----
|
||||
errorHintsComboBox.putClientProperty("JComponent.outline", "error");
|
||||
errorHintsComboBox.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
"Editable"
|
||||
}));
|
||||
comboBox7.setEditable(true);
|
||||
add(comboBox7, "cell 2 12,growx");
|
||||
errorHintsComboBox.setEditable(true);
|
||||
add(errorHintsComboBox, "cell 2 12,growx");
|
||||
|
||||
//---- spinner3 ----
|
||||
spinner3.putClientProperty("JComponent.outline", "error");
|
||||
add(spinner3, "cell 3 12,growx");
|
||||
//---- errorHintsSpinner ----
|
||||
errorHintsSpinner.putClientProperty("JComponent.outline", "error");
|
||||
add(errorHintsSpinner, "cell 3 12,growx");
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("Warning hints:");
|
||||
add(label4, "cell 0 13");
|
||||
//---- warningHintsLabel ----
|
||||
warningHintsLabel.setText("Warning hints:");
|
||||
add(warningHintsLabel, "cell 0 13");
|
||||
|
||||
//---- textField7 ----
|
||||
textField7.putClientProperty("JComponent.outline", "warning");
|
||||
add(textField7, "cell 1 13,growx");
|
||||
//---- warningHintsTextField ----
|
||||
warningHintsTextField.putClientProperty("JComponent.outline", "warning");
|
||||
add(warningHintsTextField, "cell 1 13,growx");
|
||||
|
||||
//---- comboBox8 ----
|
||||
comboBox8.putClientProperty("JComponent.outline", "warning");
|
||||
comboBox8.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
//---- warningHintsComboBox ----
|
||||
warningHintsComboBox.putClientProperty("JComponent.outline", "warning");
|
||||
warningHintsComboBox.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
"Not editable"
|
||||
}));
|
||||
add(comboBox8, "cell 2 13,growx");
|
||||
add(warningHintsComboBox, "cell 2 13,growx");
|
||||
|
||||
//---- spinner4 ----
|
||||
spinner4.putClientProperty("JComponent.outline", "warning");
|
||||
add(spinner4, "cell 3 13,growx");
|
||||
//---- warningHintsSpinner ----
|
||||
warningHintsSpinner.putClientProperty("JComponent.outline", "warning");
|
||||
add(warningHintsSpinner, "cell 3 13,growx");
|
||||
|
||||
//======== popupMenu1 ========
|
||||
{
|
||||
@@ -668,6 +669,33 @@ class BasicComponentsPanel
|
||||
cutMenuItem.addActionListener( new DefaultEditorKit.CutAction() );
|
||||
copyMenuItem.addActionListener( new DefaultEditorKit.CopyAction() );
|
||||
pasteMenuItem.addActionListener( new DefaultEditorKit.PasteAction() );
|
||||
|
||||
if( FlatLafDemo.screenshotsMode ) {
|
||||
Component[] components = {
|
||||
button13, button14, button15, button16, comboBox5, comboBox6,
|
||||
textField6, passwordField5,
|
||||
|
||||
formattedTextFieldLabel, formattedTextField1, formattedTextField2, formattedTextField3, formattedTextField4, formattedTextField5,
|
||||
textAreaLabel, scrollPane1, scrollPane2, scrollPane3, scrollPane4, textArea5,
|
||||
editorPaneLabel, scrollPane5, scrollPane6, scrollPane7, scrollPane8, editorPane5,
|
||||
textPaneLabel, scrollPane9, scrollPane10, scrollPane11, scrollPane12, textPane5,
|
||||
|
||||
errorHintsLabel, errorHintsTextField, errorHintsComboBox, errorHintsSpinner,
|
||||
warningHintsLabel, warningHintsTextField, warningHintsComboBox, warningHintsSpinner,
|
||||
};
|
||||
|
||||
for( Component c : components )
|
||||
c.setVisible( false );
|
||||
|
||||
// move password fields one row up
|
||||
Component[] formattedTextFields = { formattedTextFieldLabel, formattedTextField1, formattedTextField2, formattedTextField3, formattedTextField4 };
|
||||
Component[] passwordFields = { passwordFieldLabel, passwordField1, passwordField2, passwordField3, passwordField4 };
|
||||
MigLayout layout = (MigLayout) getLayout();
|
||||
for( int i = 0; i < passwordFields.length; i++ ) {
|
||||
Object cons = layout.getComponentConstraints( formattedTextFields[i] );
|
||||
layout.setComponentConstraints( passwordFields[i], cons );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
|
||||
@@ -7,8 +7,8 @@ new FormModel {
|
||||
"JavaCodeGenerator.defaultVariableLocal": true
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$columnConstraints": "[][][][][][]"
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[sizegroup 1][sizegroup 1][sizegroup 1][sizegroup 1][][]"
|
||||
"$rowConstraints": "[][][][][][][][][][][][]para[][]"
|
||||
} ) {
|
||||
name: "this"
|
||||
@@ -592,19 +592,19 @@ new FormModel {
|
||||
"value": "cell 5 11,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
name: "errorHintsLabel"
|
||||
"text": "Error hints:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 12"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField5"
|
||||
name: "errorHintsTextField"
|
||||
"$client.JComponent.outline": "error"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 12,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||
name: "comboBox7"
|
||||
name: "errorHintsComboBox"
|
||||
"$client.JComponent.outline": "error"
|
||||
"model": new javax.swing.DefaultComboBoxModel {
|
||||
selectedItem: "Editable"
|
||||
@@ -615,25 +615,25 @@ new FormModel {
|
||||
"value": "cell 2 12,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||
name: "spinner3"
|
||||
name: "errorHintsSpinner"
|
||||
"$client.JComponent.outline": "error"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 12,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
name: "warningHintsLabel"
|
||||
"text": "Warning hints:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 13"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField7"
|
||||
name: "warningHintsTextField"
|
||||
"$client.JComponent.outline": "warning"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 13,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||
name: "comboBox8"
|
||||
name: "warningHintsComboBox"
|
||||
"$client.JComponent.outline": "warning"
|
||||
"model": new javax.swing.DefaultComboBoxModel {
|
||||
selectedItem: "Not editable"
|
||||
@@ -643,7 +643,7 @@ new FormModel {
|
||||
"value": "cell 2 13,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||
name: "spinner4"
|
||||
name: "warningHintsSpinner"
|
||||
"$client.JComponent.outline": "warning"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 13,growx"
|
||||
|
||||
@@ -30,6 +30,9 @@ import com.formdev.flatlaf.*;
|
||||
import com.formdev.flatlaf.extras.FlatAnimatedLafChange;
|
||||
import com.formdev.flatlaf.util.SystemInfo;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
import net.miginfocom.layout.ConstraintParser;
|
||||
import net.miginfocom.layout.LC;
|
||||
import net.miginfocom.layout.UnitValue;
|
||||
import net.miginfocom.swing.*;
|
||||
|
||||
/**
|
||||
@@ -44,6 +47,18 @@ class ControlBar
|
||||
ControlBar() {
|
||||
initComponents();
|
||||
|
||||
// remove top insets
|
||||
MigLayout layout = (MigLayout) getLayout();
|
||||
LC lc = ConstraintParser.parseLayoutConstraint( (String) layout.getLayoutConstraints() );
|
||||
UnitValue[] insets = lc.getInsets();
|
||||
lc.setInsets( new UnitValue[] {
|
||||
new UnitValue( 0, UnitValue.PIXEL, null ),
|
||||
insets[1],
|
||||
insets[2],
|
||||
insets[3]
|
||||
} );
|
||||
layout.setLayoutConstraints( lc );
|
||||
|
||||
// initialize look and feels combo box
|
||||
DefaultComboBoxModel<LookAndFeelInfo> lafModel = new DefaultComboBoxModel<>();
|
||||
lafModel.addElement( new LookAndFeelInfo( "Flat Light (F1)", FlatLightLaf.class.getName() ) );
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
package com.formdev.flatlaf.demo;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.awt.datatransfer.Transferable;
|
||||
@@ -64,6 +67,41 @@ class DataComponentsPanel
|
||||
}
|
||||
}
|
||||
|
||||
private void rowSelectionChanged() {
|
||||
table1.setRowSelectionAllowed( rowSelectionCheckBox.isSelected() );
|
||||
}
|
||||
|
||||
private void columnSelectionChanged() {
|
||||
table1.setColumnSelectionAllowed( columnSelectionCheckBox.isSelected() );
|
||||
}
|
||||
|
||||
private void showHorizontalLinesChanged() {
|
||||
table1.setShowHorizontalLines( showHorizontalLinesCheckBox.isSelected() );
|
||||
}
|
||||
|
||||
private void showVerticalLinesChanged() {
|
||||
table1.setShowVerticalLines( showVerticalLinesCheckBox.isSelected() );
|
||||
}
|
||||
|
||||
private void intercellSpacingChanged() {
|
||||
table1.setIntercellSpacing( intercellSpacingCheckBox.isSelected() ? new Dimension( 1, 1 ) : new Dimension() );
|
||||
}
|
||||
|
||||
private void redGridColorChanged() {
|
||||
table1.setGridColor( redGridColorCheckBox.isSelected() ? Color.red : UIManager.getColor( "Table.gridColor" ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
|
||||
EventQueue.invokeLater( () -> {
|
||||
showHorizontalLinesChanged();
|
||||
showVerticalLinesChanged();
|
||||
intercellSpacingChanged();
|
||||
} );
|
||||
}
|
||||
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" } )
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
@@ -80,6 +118,13 @@ class DataComponentsPanel
|
||||
JLabel tableLabel = new JLabel();
|
||||
JScrollPane scrollPane5 = new JScrollPane();
|
||||
table1 = new JTable();
|
||||
JPanel tableOptionsPanel = new JPanel();
|
||||
showHorizontalLinesCheckBox = new JCheckBox();
|
||||
showVerticalLinesCheckBox = new JCheckBox();
|
||||
intercellSpacingCheckBox = new JCheckBox();
|
||||
redGridColorCheckBox = new JCheckBox();
|
||||
rowSelectionCheckBox = new JCheckBox();
|
||||
columnSelectionCheckBox = new JCheckBox();
|
||||
dndCheckBox = new JCheckBox();
|
||||
JPopupMenu popupMenu2 = new JPopupMenu();
|
||||
JMenuItem menuItem3 = new JMenuItem();
|
||||
@@ -89,20 +134,20 @@ class DataComponentsPanel
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
"insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[]" +
|
||||
"[200]" +
|
||||
"[200]",
|
||||
"[200,fill]" +
|
||||
"[200,fill]" +
|
||||
"[fill]",
|
||||
// rows
|
||||
"[]" +
|
||||
"[::200]" +
|
||||
"[::150]" +
|
||||
"[]"));
|
||||
"[150,grow,sizegroup 1,fill]" +
|
||||
"[150,grow,sizegroup 1,fill]" +
|
||||
"[150,grow,sizegroup 1,fill]"));
|
||||
|
||||
//---- listLabel ----
|
||||
listLabel.setText("JList:");
|
||||
add(listLabel, "cell 0 0");
|
||||
add(listLabel, "cell 0 0,aligny top,growy 0");
|
||||
|
||||
//======== scrollPane1 ========
|
||||
{
|
||||
@@ -134,7 +179,7 @@ class DataComponentsPanel
|
||||
list1.setComponentPopupMenu(popupMenu2);
|
||||
scrollPane1.setViewportView(list1);
|
||||
}
|
||||
add(scrollPane1, "cell 1 0,growx");
|
||||
add(scrollPane1, "cell 1 0");
|
||||
|
||||
//======== scrollPane2 ========
|
||||
{
|
||||
@@ -166,11 +211,11 @@ class DataComponentsPanel
|
||||
list2.setEnabled(false);
|
||||
scrollPane2.setViewportView(list2);
|
||||
}
|
||||
add(scrollPane2, "cell 2 0,growx");
|
||||
add(scrollPane2, "cell 2 0");
|
||||
|
||||
//---- treeLabel ----
|
||||
treeLabel.setText("JTree:");
|
||||
add(treeLabel, "cell 0 1");
|
||||
add(treeLabel, "cell 0 1,aligny top,growy 0");
|
||||
|
||||
//======== scrollPane3 ========
|
||||
{
|
||||
@@ -207,7 +252,7 @@ class DataComponentsPanel
|
||||
tree1.setComponentPopupMenu(popupMenu2);
|
||||
scrollPane3.setViewportView(tree1);
|
||||
}
|
||||
add(scrollPane3, "cell 1 1,growx");
|
||||
add(scrollPane3, "cell 1 1");
|
||||
|
||||
//======== scrollPane4 ========
|
||||
{
|
||||
@@ -216,11 +261,11 @@ class DataComponentsPanel
|
||||
tree2.setEnabled(false);
|
||||
scrollPane4.setViewportView(tree2);
|
||||
}
|
||||
add(scrollPane4, "cell 2 1,growx");
|
||||
add(scrollPane4, "cell 2 1");
|
||||
|
||||
//---- tableLabel ----
|
||||
tableLabel.setText("JTable:");
|
||||
add(tableLabel, "cell 0 2");
|
||||
add(tableLabel, "cell 0 2,aligny top,growy 0");
|
||||
|
||||
//======== scrollPane5 ========
|
||||
{
|
||||
@@ -297,13 +342,61 @@ class DataComponentsPanel
|
||||
table1.setComponentPopupMenu(popupMenu2);
|
||||
scrollPane5.setViewportView(table1);
|
||||
}
|
||||
add(scrollPane5, "cell 1 2 2 1,growx,width 300");
|
||||
add(scrollPane5, "cell 1 2 2 1,width 300");
|
||||
|
||||
//---- dndCheckBox ----
|
||||
dndCheckBox.setText("enable drag and drop");
|
||||
dndCheckBox.setMnemonic('D');
|
||||
dndCheckBox.addActionListener(e -> dndChanged());
|
||||
add(dndCheckBox, "cell 0 3 3 1");
|
||||
//======== tableOptionsPanel ========
|
||||
{
|
||||
tableOptionsPanel.setLayout(new MigLayout(
|
||||
"insets 0,hidemode 3",
|
||||
// columns
|
||||
"[]",
|
||||
// rows
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0"));
|
||||
|
||||
//---- showHorizontalLinesCheckBox ----
|
||||
showHorizontalLinesCheckBox.setText("show horizontal lines");
|
||||
showHorizontalLinesCheckBox.addActionListener(e -> showHorizontalLinesChanged());
|
||||
tableOptionsPanel.add(showHorizontalLinesCheckBox, "cell 0 0");
|
||||
|
||||
//---- showVerticalLinesCheckBox ----
|
||||
showVerticalLinesCheckBox.setText("show vertical lines");
|
||||
showVerticalLinesCheckBox.addActionListener(e -> showVerticalLinesChanged());
|
||||
tableOptionsPanel.add(showVerticalLinesCheckBox, "cell 0 1");
|
||||
|
||||
//---- intercellSpacingCheckBox ----
|
||||
intercellSpacingCheckBox.setText("intercell spacing");
|
||||
intercellSpacingCheckBox.addActionListener(e -> intercellSpacingChanged());
|
||||
tableOptionsPanel.add(intercellSpacingCheckBox, "cell 0 2");
|
||||
|
||||
//---- redGridColorCheckBox ----
|
||||
redGridColorCheckBox.setText("red grid color");
|
||||
redGridColorCheckBox.addActionListener(e -> redGridColorChanged());
|
||||
tableOptionsPanel.add(redGridColorCheckBox, "cell 0 3");
|
||||
|
||||
//---- rowSelectionCheckBox ----
|
||||
rowSelectionCheckBox.setText("row selection");
|
||||
rowSelectionCheckBox.setSelected(true);
|
||||
rowSelectionCheckBox.addActionListener(e -> rowSelectionChanged());
|
||||
tableOptionsPanel.add(rowSelectionCheckBox, "cell 0 4");
|
||||
|
||||
//---- columnSelectionCheckBox ----
|
||||
columnSelectionCheckBox.setText("column selection");
|
||||
columnSelectionCheckBox.addActionListener(e -> columnSelectionChanged());
|
||||
tableOptionsPanel.add(columnSelectionCheckBox, "cell 0 5");
|
||||
|
||||
//---- dndCheckBox ----
|
||||
dndCheckBox.setText("enable drag and drop");
|
||||
dndCheckBox.setMnemonic('D');
|
||||
dndCheckBox.addActionListener(e -> dndChanged());
|
||||
tableOptionsPanel.add(dndCheckBox, "cell 0 6");
|
||||
}
|
||||
add(tableOptionsPanel, "cell 3 2");
|
||||
|
||||
//======== popupMenu2 ========
|
||||
{
|
||||
@@ -336,6 +429,12 @@ class DataComponentsPanel
|
||||
private JTree tree1;
|
||||
private JTree tree2;
|
||||
private JTable table1;
|
||||
private JCheckBox showHorizontalLinesCheckBox;
|
||||
private JCheckBox showVerticalLinesCheckBox;
|
||||
private JCheckBox intercellSpacingCheckBox;
|
||||
private JCheckBox redGridColorCheckBox;
|
||||
private JCheckBox rowSelectionCheckBox;
|
||||
private JCheckBox columnSelectionCheckBox;
|
||||
private JCheckBox dndCheckBox;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.1.0.272" Java: "13.0.2" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -7,16 +7,16 @@ new FormModel {
|
||||
"JavaCodeGenerator.defaultVariableLocal": true
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$columnConstraints": "[][200][200]"
|
||||
"$rowConstraints": "[][::200][::150][]"
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[][200,fill][200,fill][fill]"
|
||||
"$rowConstraints": "[150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill]"
|
||||
} ) {
|
||||
name: "this"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "listLabel"
|
||||
"text": "JList:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
"value": "cell 0 0,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane1"
|
||||
@@ -46,7 +46,7 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0,growx"
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane2"
|
||||
@@ -76,13 +76,13 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0,growx"
|
||||
"value": "cell 2 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "treeLabel"
|
||||
"text": "JTree:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
"value": "cell 0 1,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane3"
|
||||
@@ -150,7 +150,7 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 1,growx"
|
||||
"value": "cell 1 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane4"
|
||||
@@ -162,13 +162,13 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 1,growx"
|
||||
"value": "cell 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tableLabel"
|
||||
"text": "JTable:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
"value": "cell 0 2,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane5"
|
||||
@@ -307,22 +307,92 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 2 2 1,growx,width 300"
|
||||
"value": "cell 1 2 2 1,width 300"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "dndCheckBox"
|
||||
"text": "enable drag and drop"
|
||||
"mnemonic": 68
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "dndChanged", false ) )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[]"
|
||||
"$rowConstraints": "[]0[]0[]0[]0[]0[]0[]0"
|
||||
} ) {
|
||||
name: "tableOptionsPanel"
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showHorizontalLinesCheckBox"
|
||||
"text": "show horizontal lines"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showHorizontalLinesChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showVerticalLinesCheckBox"
|
||||
"text": "show vertical lines"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showVerticalLinesChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "intercellSpacingCheckBox"
|
||||
"text": "intercell spacing"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "intercellSpacingChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "redGridColorCheckBox"
|
||||
"text": "red grid color"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "redGridColorChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "rowSelectionCheckBox"
|
||||
"text": "row selection"
|
||||
"selected": true
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "rowSelectionChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "columnSelectionCheckBox"
|
||||
"text": "column selection"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "columnSelectionChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "dndCheckBox"
|
||||
"text": "enable drag and drop"
|
||||
"mnemonic": 68
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "dndChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 6"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3 3 1"
|
||||
"value": "cell 3 2"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 790, 715 )
|
||||
"size": new java.awt.Dimension( 790, 745 )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) {
|
||||
name: "popupMenu2"
|
||||
@@ -346,7 +416,7 @@ new FormModel {
|
||||
"text": "Noop Action"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 740 )
|
||||
"location": new java.awt.Point( 0, 800 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,17 +20,23 @@ import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.prefs.Preferences;
|
||||
import javax.swing.*;
|
||||
import javax.swing.text.DefaultEditorKit;
|
||||
import javax.swing.text.StyleContext;
|
||||
import com.formdev.flatlaf.FlatClientProperties;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
import com.formdev.flatlaf.demo.HintManager.Hint;
|
||||
import com.formdev.flatlaf.demo.extras.*;
|
||||
import com.formdev.flatlaf.demo.intellijthemes.*;
|
||||
import com.formdev.flatlaf.extras.FlatAnimatedLafChange;
|
||||
import com.formdev.flatlaf.extras.FlatSVGIcon;
|
||||
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
|
||||
import com.formdev.flatlaf.extras.SVGUtils;
|
||||
import com.formdev.flatlaf.ui.JBRCustomDecorations;
|
||||
import net.miginfocom.layout.ConstraintParser;
|
||||
import net.miginfocom.layout.LC;
|
||||
import net.miginfocom.layout.UnitValue;
|
||||
import net.miginfocom.swing.*;
|
||||
|
||||
/**
|
||||
@@ -57,6 +63,61 @@ class DemoFrame
|
||||
|
||||
if( tabIndex >= 0 && tabIndex < tabbedPane.getTabCount() && tabIndex != tabbedPane.getSelectedIndex() )
|
||||
tabbedPane.setSelectedIndex( tabIndex );
|
||||
|
||||
SwingUtilities.invokeLater( () -> {
|
||||
showHints();
|
||||
} );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
|
||||
FlatUIDefaultsInspector.hide();
|
||||
}
|
||||
|
||||
private void showHints() {
|
||||
Hint fontMenuHint = new Hint(
|
||||
"Use 'Font' menu to increase/decrease font size or try different fonts.",
|
||||
fontMenu, SwingConstants.BOTTOM, "hint.fontMenu", null );
|
||||
|
||||
Hint optionsMenuHint = new Hint(
|
||||
"Use 'Options' menu to try out various FlatLaf options.",
|
||||
optionsMenu, SwingConstants.BOTTOM, "hint.optionsMenu", fontMenuHint );
|
||||
|
||||
Hint themesHint = new Hint(
|
||||
"Use 'Themes' list to try out various themes.",
|
||||
themesPanel, SwingConstants.LEFT, "hint.themesPanel", optionsMenuHint );
|
||||
|
||||
HintManager.showHint( themesHint );
|
||||
}
|
||||
|
||||
private void clearHints() {
|
||||
HintManager.hideAllHints();
|
||||
|
||||
Preferences state = DemoPrefs.getState();
|
||||
state.remove( "hint.fontMenu" );
|
||||
state.remove( "hint.optionsMenu" );
|
||||
state.remove( "hint.themesPanel" );
|
||||
}
|
||||
|
||||
private void showUIDefaultsInspector() {
|
||||
FlatUIDefaultsInspector.show();
|
||||
}
|
||||
|
||||
private void newActionPerformed() {
|
||||
NewDialog newDialog = new NewDialog( this );
|
||||
newDialog.setVisible( true );
|
||||
}
|
||||
|
||||
private void openActionPerformed() {
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.showOpenDialog( this );
|
||||
}
|
||||
|
||||
private void saveAsActionPerformed() {
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.showSaveDialog( this );
|
||||
}
|
||||
|
||||
private void exitActionPerformed() {
|
||||
@@ -110,6 +171,11 @@ class DemoFrame
|
||||
System.setProperty( "flatlaf.animatedLafChange", String.valueOf( animatedLafChangeMenuItem.isSelected() ) );
|
||||
}
|
||||
|
||||
private void showHintsChanged() {
|
||||
clearHints();
|
||||
showHints();
|
||||
}
|
||||
|
||||
private void fontFamilyChanged( ActionEvent e ) {
|
||||
String fontFamily = e.getActionCommand();
|
||||
|
||||
@@ -224,6 +290,7 @@ class DemoFrame
|
||||
JMenu fileMenu = new JMenu();
|
||||
JMenuItem newMenuItem = new JMenuItem();
|
||||
JMenuItem openMenuItem = new JMenuItem();
|
||||
JMenuItem saveAsMenuItem = new JMenuItem();
|
||||
JMenuItem closeMenuItem = new JMenuItem();
|
||||
JMenuItem exitMenuItem = new JMenuItem();
|
||||
JMenu editMenu = new JMenu();
|
||||
@@ -243,6 +310,7 @@ class DemoFrame
|
||||
JMenuItem projectViewMenuItem = new JMenuItem();
|
||||
JMenuItem structureViewMenuItem = new JMenuItem();
|
||||
JMenuItem propertiesViewMenuItem = new JMenuItem();
|
||||
JMenuItem menuItem2 = new JMenuItem();
|
||||
JMenuItem menuItem1 = new JMenuItem();
|
||||
JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem();
|
||||
JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem();
|
||||
@@ -251,12 +319,14 @@ class DemoFrame
|
||||
JMenuItem restoreFontMenuItem = new JMenuItem();
|
||||
JMenuItem incrFontMenuItem = new JMenuItem();
|
||||
JMenuItem decrFontMenuItem = new JMenuItem();
|
||||
JMenu optionsMenu = new JMenu();
|
||||
optionsMenu = new JMenu();
|
||||
windowDecorationsCheckBoxMenuItem = new JCheckBoxMenuItem();
|
||||
menuBarEmbeddedCheckBoxMenuItem = new JCheckBoxMenuItem();
|
||||
underlineMenuSelectionMenuItem = new JCheckBoxMenuItem();
|
||||
alwaysShowMnemonicsMenuItem = new JCheckBoxMenuItem();
|
||||
animatedLafChangeMenuItem = new JCheckBoxMenuItem();
|
||||
JMenuItem showHintsMenuItem = new JMenuItem();
|
||||
JMenuItem showUIDefaultsInspectorMenuItem = new JMenuItem();
|
||||
JMenu helpMenu = new JMenu();
|
||||
JMenuItem aboutMenuItem = new JMenuItem();
|
||||
JToolBar toolBar1 = new JToolBar();
|
||||
@@ -276,7 +346,7 @@ class DemoFrame
|
||||
OptionPanePanel optionPanePanel = new OptionPanePanel();
|
||||
ExtrasPanel extrasPanel1 = new ExtrasPanel();
|
||||
controlBar = new ControlBar();
|
||||
IJThemesPanel themesPanel = new IJThemesPanel();
|
||||
themesPanel = new IJThemesPanel();
|
||||
|
||||
//======== this ========
|
||||
setTitle("FlatLaf Demo");
|
||||
@@ -296,15 +366,22 @@ class DemoFrame
|
||||
newMenuItem.setText("New");
|
||||
newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
|
||||
newMenuItem.setMnemonic('N');
|
||||
newMenuItem.addActionListener(e -> menuItemActionPerformed(e));
|
||||
newMenuItem.addActionListener(e -> newActionPerformed());
|
||||
fileMenu.add(newMenuItem);
|
||||
|
||||
//---- openMenuItem ----
|
||||
openMenuItem.setText("Open");
|
||||
openMenuItem.setText("Open...");
|
||||
openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
|
||||
openMenuItem.setMnemonic('O');
|
||||
openMenuItem.addActionListener(e -> menuItemActionPerformed(e));
|
||||
openMenuItem.addActionListener(e -> openActionPerformed());
|
||||
fileMenu.add(openMenuItem);
|
||||
|
||||
//---- saveAsMenuItem ----
|
||||
saveAsMenuItem.setText("Save As...");
|
||||
saveAsMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
|
||||
saveAsMenuItem.setMnemonic('S');
|
||||
saveAsMenuItem.addActionListener(e -> saveAsActionPerformed());
|
||||
fileMenu.add(saveAsMenuItem);
|
||||
fileMenu.addSeparator();
|
||||
|
||||
//---- closeMenuItem ----
|
||||
@@ -435,6 +512,11 @@ class DemoFrame
|
||||
}
|
||||
viewMenu.add(menu1);
|
||||
|
||||
//---- menuItem2 ----
|
||||
menuItem2.setText("Disabled Item");
|
||||
menuItem2.setEnabled(false);
|
||||
viewMenu.add(menuItem2);
|
||||
|
||||
//---- menuItem1 ----
|
||||
menuItem1.setText("<html>some <b color=\"red\">HTML</b> <i color=\"blue\">text</i></html>");
|
||||
viewMenu.add(menuItem1);
|
||||
@@ -516,6 +598,16 @@ class DemoFrame
|
||||
animatedLafChangeMenuItem.setSelected(true);
|
||||
animatedLafChangeMenuItem.addActionListener(e -> animatedLafChangeChanged());
|
||||
optionsMenu.add(animatedLafChangeMenuItem);
|
||||
|
||||
//---- showHintsMenuItem ----
|
||||
showHintsMenuItem.setText("Show hints");
|
||||
showHintsMenuItem.addActionListener(e -> showHintsChanged());
|
||||
optionsMenu.add(showHintsMenuItem);
|
||||
|
||||
//---- showUIDefaultsInspectorMenuItem ----
|
||||
showUIDefaultsInspectorMenuItem.setText("Show UI Defaults Inspector");
|
||||
showUIDefaultsInspectorMenuItem.addActionListener(e -> showUIDefaultsInspector());
|
||||
optionsMenu.add(showUIDefaultsInspectorMenuItem);
|
||||
}
|
||||
menuBar1.add(optionsMenu);
|
||||
|
||||
@@ -627,10 +719,23 @@ class DemoFrame
|
||||
.getSupportsWindowDecorations() || JBRCustomDecorations.isSupported();
|
||||
windowDecorationsCheckBoxMenuItem.setEnabled( supportsWindowDecorations && !JBRCustomDecorations.isSupported() );
|
||||
menuBarEmbeddedCheckBoxMenuItem.setEnabled( supportsWindowDecorations );
|
||||
|
||||
// remove contentPanel bottom insets
|
||||
MigLayout layout = (MigLayout) contentPanel.getLayout();
|
||||
LC lc = ConstraintParser.parseLayoutConstraint( (String) layout.getLayoutConstraints() );
|
||||
UnitValue[] insets = lc.getInsets();
|
||||
lc.setInsets( new UnitValue[] {
|
||||
insets[0],
|
||||
insets[1],
|
||||
new UnitValue( 0, UnitValue.PIXEL, null ),
|
||||
insets[3]
|
||||
} );
|
||||
layout.setLayoutConstraints( lc );
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
private JMenu fontMenu;
|
||||
private JMenu optionsMenu;
|
||||
private JCheckBoxMenuItem windowDecorationsCheckBoxMenuItem;
|
||||
private JCheckBoxMenuItem menuBarEmbeddedCheckBoxMenuItem;
|
||||
private JCheckBoxMenuItem underlineMenuSelectionMenuItem;
|
||||
@@ -638,5 +743,6 @@ class DemoFrame
|
||||
private JCheckBoxMenuItem animatedLafChangeMenuItem;
|
||||
private JTabbedPane tabbedPane;
|
||||
private ControlBar controlBar;
|
||||
private IJThemesPanel themesPanel;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14.0.2" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -114,6 +114,9 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "com.formdev.flatlaf.demo.intellijthemes.IJThemesPanel" ) {
|
||||
name: "themesPanel"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "East"
|
||||
} )
|
||||
@@ -128,14 +131,21 @@ new FormModel {
|
||||
"text": "New"
|
||||
"accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 4226, false )
|
||||
"mnemonic": 78
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "newActionPerformed", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "openMenuItem"
|
||||
"text": "Open"
|
||||
"text": "Open..."
|
||||
"accelerator": static javax.swing.KeyStroke getKeyStroke( 79, 4226, false )
|
||||
"mnemonic": 79
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "openActionPerformed", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "saveAsMenuItem"
|
||||
"text": "Save As..."
|
||||
"accelerator": static javax.swing.KeyStroke getKeyStroke( 83, 4226, false )
|
||||
"mnemonic": 83
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "saveAsActionPerformed", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {
|
||||
name: "separator2"
|
||||
@@ -264,6 +274,11 @@ new FormModel {
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
|
||||
} )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem2"
|
||||
"text": "Disabled Item"
|
||||
"enabled": false
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem1"
|
||||
"text": "<html>some <b color=\"red\">HTML</b> <i color=\"blue\">text</i></html>"
|
||||
@@ -322,6 +337,9 @@ new FormModel {
|
||||
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||
name: "optionsMenu"
|
||||
"text": "Options"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) {
|
||||
name: "windowDecorationsCheckBoxMenuItem"
|
||||
"text": "Window decorations"
|
||||
@@ -365,6 +383,16 @@ new FormModel {
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "animatedLafChangeChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "showHintsMenuItem"
|
||||
"text": "Show hints"
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showHintsChanged", false ) )
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "showUIDefaultsInspectorMenuItem"
|
||||
"text": "Show UI Defaults Inspector"
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showUIDefaultsInspector", false ) )
|
||||
} )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||
name: "helpMenu"
|
||||
|
||||
@@ -16,10 +16,13 @@
|
||||
|
||||
package com.formdev.flatlaf.demo;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.SwingUtilities;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
import com.formdev.flatlaf.extras.FlatInspector;
|
||||
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
|
||||
import com.formdev.flatlaf.util.SystemInfo;
|
||||
|
||||
/**
|
||||
@@ -30,6 +33,8 @@ public class FlatLafDemo
|
||||
static final String PREFS_ROOT_PATH = "/flatlaf-demo";
|
||||
static final String KEY_TAB = "tab";
|
||||
|
||||
static boolean screenshotsMode = Boolean.parseBoolean( System.getProperty( "flatlaf.demo.screenshotsMode" ) );
|
||||
|
||||
public static void main( String[] args ) {
|
||||
// on macOS enable screen menu bar
|
||||
if( SystemInfo.isMacOS && System.getProperty( "apple.laf.useScreenMenuBar" ) == null )
|
||||
@@ -42,15 +47,22 @@ public class FlatLafDemo
|
||||
JFrame.setDefaultLookAndFeelDecorated( true );
|
||||
JDialog.setDefaultLookAndFeelDecorated( true );
|
||||
|
||||
// application specific UI defaults
|
||||
FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.demo" );
|
||||
|
||||
// set look and feel
|
||||
DemoPrefs.initLaf( args );
|
||||
|
||||
// install inspector
|
||||
// install inspectors
|
||||
FlatInspector.install( "ctrl shift alt X" );
|
||||
FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||
|
||||
// create frame
|
||||
DemoFrame frame = new DemoFrame();
|
||||
|
||||
if( FlatLafDemo.screenshotsMode )
|
||||
frame.setPreferredSize( new Dimension( 1280, 620 ) );
|
||||
|
||||
// show frame
|
||||
frame.pack();
|
||||
frame.setLocationRelativeTo( null );
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.demo;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.swing.*;
|
||||
import com.formdev.flatlaf.ui.FlatDropShadowBorder;
|
||||
import com.formdev.flatlaf.ui.FlatPopupMenuBorder;
|
||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
import net.miginfocom.swing.*;
|
||||
|
||||
/**
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
class HintManager
|
||||
{
|
||||
private static final List<HintPanel> hintPanels = new ArrayList<>();
|
||||
|
||||
static void showHint( Hint hint ) {
|
||||
// check whether user already closed the hint
|
||||
if( DemoPrefs.getState().getBoolean( hint.prefsKey, false ) ) {
|
||||
if( hint.nextHint != null )
|
||||
showHint( hint.nextHint );
|
||||
return;
|
||||
}
|
||||
|
||||
HintPanel hintPanel = new HintPanel( hint );
|
||||
hintPanel.showHint();
|
||||
|
||||
hintPanels.add( hintPanel );
|
||||
}
|
||||
|
||||
static void hideAllHints() {
|
||||
HintPanel[] hintPanels2 = hintPanels.toArray( new HintPanel[hintPanels.size()] );
|
||||
for( HintPanel hintPanel : hintPanels2 )
|
||||
hintPanel.hideHint();
|
||||
}
|
||||
|
||||
//---- class HintPanel ----------------------------------------------------
|
||||
|
||||
static class Hint
|
||||
{
|
||||
private final String message;
|
||||
private final Component owner;
|
||||
private final int position;
|
||||
private final String prefsKey;
|
||||
private final Hint nextHint;
|
||||
|
||||
Hint( String message, Component owner, int position, String prefsKey, Hint nextHint ) {
|
||||
this.message = message;
|
||||
this.owner = owner;
|
||||
this.position = position;
|
||||
this.prefsKey = prefsKey;
|
||||
this.nextHint = nextHint;
|
||||
}
|
||||
}
|
||||
|
||||
//---- class HintPanel ----------------------------------------------------
|
||||
|
||||
private static class HintPanel
|
||||
extends JPanel
|
||||
{
|
||||
private final Hint hint;
|
||||
|
||||
private JPanel popup;
|
||||
|
||||
private HintPanel( Hint hint ) {
|
||||
this.hint = hint;
|
||||
|
||||
initComponents();
|
||||
|
||||
hintLabel.setText( "<html>" + hint.message + "</html>" );
|
||||
|
||||
// grab all mouse events to avoid that components overlapped
|
||||
// by the hint panel receive them
|
||||
addMouseListener( new MouseAdapter() {} );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
|
||||
setBackground( UIManager.getColor( "HintPanel.backgroundColor" ) );
|
||||
setBorder( new FlatPopupMenuBorder() );
|
||||
}
|
||||
|
||||
void showHint() {
|
||||
JRootPane rootPane = SwingUtilities.getRootPane( hint.owner );
|
||||
if( rootPane == null )
|
||||
return;
|
||||
|
||||
JLayeredPane layeredPane = rootPane.getLayeredPane();
|
||||
|
||||
// create a popup panel that has a drop shadow
|
||||
popup = new JPanel( new BorderLayout() ) {
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
|
||||
setBorder( new FlatDropShadowBorder(
|
||||
UIManager.getColor( "Popup.dropShadowColor" ),
|
||||
UIManager.getInsets( "Popup.dropShadowInsets" ),
|
||||
FlatUIUtils.getUIFloat( "Popup.dropShadowOpacity", 0.5f ) ) );
|
||||
|
||||
// use invokeLater because at this time the UI delegates
|
||||
// of child components are not yet updated
|
||||
EventQueue.invokeLater( () -> {
|
||||
validate();
|
||||
setSize( getPreferredSize() );
|
||||
} );
|
||||
}
|
||||
};
|
||||
popup.setOpaque( false );
|
||||
popup.add( this );
|
||||
|
||||
// calculate x/y location for hint popup
|
||||
Point pt = SwingUtilities.convertPoint( hint.owner, 0, 0, layeredPane );
|
||||
int x = pt.x;
|
||||
int y = pt.y;
|
||||
Dimension size = popup.getPreferredSize();
|
||||
int gap = UIScale.scale( 6 );
|
||||
|
||||
switch( hint.position ) {
|
||||
case SwingConstants.LEFT:
|
||||
x -= size.width + gap;
|
||||
break;
|
||||
|
||||
case SwingConstants.TOP:
|
||||
y -= size.height + gap;
|
||||
break;
|
||||
|
||||
case SwingConstants.RIGHT:
|
||||
x += hint.owner.getWidth() + gap;
|
||||
break;
|
||||
|
||||
case SwingConstants.BOTTOM:
|
||||
y += hint.owner.getHeight() + gap;
|
||||
break;
|
||||
}
|
||||
|
||||
// set hint popup size and show it
|
||||
popup.setBounds( x, y, size.width, size.height );
|
||||
layeredPane.add( popup, JLayeredPane.POPUP_LAYER );
|
||||
}
|
||||
|
||||
void hideHint() {
|
||||
if( popup != null ) {
|
||||
Container parent = popup.getParent();
|
||||
if( parent != null ) {
|
||||
parent.remove( popup );
|
||||
parent.repaint( popup.getX(), popup.getY(), popup.getWidth(), popup.getHeight() );
|
||||
}
|
||||
}
|
||||
|
||||
hintPanels.remove( this );
|
||||
}
|
||||
|
||||
private void gotIt() {
|
||||
// hide hint
|
||||
hideHint();
|
||||
|
||||
// remember that user closed the hint
|
||||
DemoPrefs.getState().putBoolean( hint.prefsKey, true );
|
||||
|
||||
// show next hint (if any)
|
||||
if( hint.nextHint != null )
|
||||
HintManager.showHint( hint.nextHint );
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
hintLabel = new JLabel();
|
||||
gotItButton = new JButton();
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[::200,fill]",
|
||||
// rows
|
||||
"[]para" +
|
||||
"[]"));
|
||||
|
||||
//---- hintLabel ----
|
||||
hintLabel.setText("hint");
|
||||
add(hintLabel, "cell 0 0");
|
||||
|
||||
//---- gotItButton ----
|
||||
gotItButton.setText("Got it!");
|
||||
gotItButton.setFocusable(false);
|
||||
gotItButton.addActionListener(e -> gotIt());
|
||||
add(gotItButton, "cell 0 1,alignx right,growx 0");
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
private JLabel hintLabel;
|
||||
private JButton gotItButton;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
root: new FormRoot {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[::200,fill]"
|
||||
"$rowConstraints": "[]para[]"
|
||||
} ) {
|
||||
name: "panel"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.className": "HintPanel"
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "hintLabel"
|
||||
"text": "hint"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "gotItButton"
|
||||
"text": "Got it!"
|
||||
"focusable": false
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "gotIt", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1,alignx right,growx 0"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 400, 300 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
@@ -59,7 +59,6 @@ class MoreComponentsPanel
|
||||
JSeparator separator2 = new JSeparator();
|
||||
JSlider slider2 = new JSlider();
|
||||
JSlider slider4 = new JSlider();
|
||||
JScrollPane scrollPane14 = new JScrollPane();
|
||||
progressBar3 = new JProgressBar();
|
||||
progressBar4 = new JProgressBar();
|
||||
JToolBar toolBar2 = new JToolBar();
|
||||
@@ -67,11 +66,12 @@ class MoreComponentsPanel
|
||||
JButton button10 = new JButton();
|
||||
JButton button11 = new JButton();
|
||||
JToggleButton toggleButton7 = new JToggleButton();
|
||||
JPanel panel2 = new JPanel();
|
||||
JLabel scrollBarLabel = new JLabel();
|
||||
JScrollBar scrollBar1 = new JScrollBar();
|
||||
JLabel label4 = new JLabel();
|
||||
JScrollBar scrollBar4 = new JScrollBar();
|
||||
JPanel panel3 = new JPanel();
|
||||
JLabel label4 = new JLabel();
|
||||
JLabel label3 = new JLabel();
|
||||
JScrollPane scrollPane15 = new JScrollPane();
|
||||
JEditorPane editorPane6 = new JEditorPane();
|
||||
@@ -81,7 +81,6 @@ class MoreComponentsPanel
|
||||
JScrollBar scrollBar6 = new JScrollBar();
|
||||
JLabel separatorLabel = new JLabel();
|
||||
JSeparator separator1 = new JSeparator();
|
||||
JPanel panel2 = new JPanel();
|
||||
JLabel sliderLabel = new JLabel();
|
||||
JSlider slider1 = new JSlider();
|
||||
JSlider slider6 = new JSlider();
|
||||
@@ -105,13 +104,12 @@ class MoreComponentsPanel
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
"insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]",
|
||||
// rows
|
||||
"[]" +
|
||||
@@ -142,7 +140,7 @@ class MoreComponentsPanel
|
||||
}
|
||||
scrollPane13.setViewportView(panel1);
|
||||
}
|
||||
add(scrollPane13, "cell 1 0,grow,width 70,height 70");
|
||||
add(scrollPane13, "cell 1 0,grow,width 70,height 40");
|
||||
add(scrollBar2, "cell 2 0 1 6,growy");
|
||||
|
||||
//---- scrollBar3 ----
|
||||
@@ -165,7 +163,7 @@ class MoreComponentsPanel
|
||||
//---- slider2 ----
|
||||
slider2.setOrientation(SwingConstants.VERTICAL);
|
||||
slider2.setValue(30);
|
||||
add(slider2, "cell 2 0 1 6,growy");
|
||||
add(slider2, "cell 2 0 1 6,growy,height 100");
|
||||
|
||||
//---- slider4 ----
|
||||
slider4.setMinorTickSpacing(10);
|
||||
@@ -174,19 +172,18 @@ class MoreComponentsPanel
|
||||
slider4.setPaintLabels(true);
|
||||
slider4.setOrientation(SwingConstants.VERTICAL);
|
||||
slider4.setValue(30);
|
||||
add(slider4, "cell 2 0 1 6,growy");
|
||||
add(scrollPane14, "cell 3 0,grow");
|
||||
add(slider4, "cell 2 0 1 6,growy,height 100");
|
||||
|
||||
//---- progressBar3 ----
|
||||
progressBar3.setOrientation(SwingConstants.VERTICAL);
|
||||
progressBar3.setValue(60);
|
||||
add(progressBar3, "cell 4 0 1 6,growy");
|
||||
add(progressBar3, "cell 2 0 1 6,growy");
|
||||
|
||||
//---- progressBar4 ----
|
||||
progressBar4.setOrientation(SwingConstants.VERTICAL);
|
||||
progressBar4.setValue(60);
|
||||
progressBar4.setStringPainted(true);
|
||||
add(progressBar4, "cell 4 0 1 6,growy");
|
||||
add(progressBar4, "cell 2 0 1 6,growy");
|
||||
|
||||
//======== toolBar2 ========
|
||||
{
|
||||
@@ -209,7 +206,14 @@ class MoreComponentsPanel
|
||||
toggleButton7.setIcon(UIManager.getIcon("Tree.closedIcon"));
|
||||
toolBar2.add(toggleButton7);
|
||||
}
|
||||
add(toolBar2, "cell 4 0 1 6,growy");
|
||||
add(toolBar2, "cell 2 0 1 6,growy");
|
||||
|
||||
//======== panel2 ========
|
||||
{
|
||||
panel2.setBorder(new TitledBorder("TitledBorder"));
|
||||
panel2.setLayout(new FlowLayout());
|
||||
}
|
||||
add(panel2, "cell 3 0 1 6,grow");
|
||||
|
||||
//---- scrollBarLabel ----
|
||||
scrollBarLabel.setText("JScrollBar:");
|
||||
@@ -219,10 +223,6 @@ class MoreComponentsPanel
|
||||
scrollBar1.setOrientation(Adjustable.HORIZONTAL);
|
||||
add(scrollBar1, "cell 1 1,growx");
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("HTML:");
|
||||
add(label4, "cell 5 1");
|
||||
|
||||
//---- scrollBar4 ----
|
||||
scrollBar4.setOrientation(Adjustable.HORIZONTAL);
|
||||
scrollBar4.setEnabled(false);
|
||||
@@ -238,11 +238,16 @@ class MoreComponentsPanel
|
||||
// rows
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]"));
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("HTML:");
|
||||
panel3.add(label4, "cell 0 0");
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("<html>JLabel HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a></html>");
|
||||
panel3.add(label3, "cell 0 0");
|
||||
panel3.add(label3, "cell 0 1");
|
||||
|
||||
//======== scrollPane15 ========
|
||||
{
|
||||
@@ -252,7 +257,7 @@ class MoreComponentsPanel
|
||||
editorPane6.setText("JEditorPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>");
|
||||
scrollPane15.setViewportView(editorPane6);
|
||||
}
|
||||
panel3.add(scrollPane15, "cell 0 1,grow");
|
||||
panel3.add(scrollPane15, "cell 0 2,grow");
|
||||
|
||||
//======== scrollPane16 ========
|
||||
{
|
||||
@@ -262,9 +267,9 @@ class MoreComponentsPanel
|
||||
textPane6.setText("JTextPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>");
|
||||
scrollPane16.setViewportView(textPane6);
|
||||
}
|
||||
panel3.add(scrollPane16, "cell 0 2,grow");
|
||||
panel3.add(scrollPane16, "cell 0 3,grow");
|
||||
}
|
||||
add(panel3, "cell 5 2 1 9,aligny top,growy 0");
|
||||
add(panel3, "cell 4 0 1 8,aligny top,growy 0");
|
||||
|
||||
//---- scrollBar5 ----
|
||||
scrollBar5.setOrientation(Adjustable.HORIZONTAL);
|
||||
@@ -282,13 +287,6 @@ class MoreComponentsPanel
|
||||
add(separatorLabel, "cell 0 5");
|
||||
add(separator1, "cell 1 5,growx");
|
||||
|
||||
//======== panel2 ========
|
||||
{
|
||||
panel2.setBorder(new TitledBorder("TitledBorder"));
|
||||
panel2.setLayout(new FlowLayout());
|
||||
}
|
||||
add(panel2, "cell 3 5,grow");
|
||||
|
||||
//---- sliderLabel ----
|
||||
sliderLabel.setText("JSlider:");
|
||||
add(sliderLabel, "cell 0 6");
|
||||
@@ -389,6 +387,17 @@ class MoreComponentsPanel
|
||||
}
|
||||
add(toolBar1, "cell 1 10 3 1,growx");
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
|
||||
if( FlatLafDemo.screenshotsMode ) {
|
||||
Component[] components = new Component[] {
|
||||
indeterminateCheckBox,
|
||||
toolTipLabel, toolTip1, toolTip2,
|
||||
toolBarLabel, toolBar1, toolBar2,
|
||||
};
|
||||
|
||||
for( Component c : components )
|
||||
c.setVisible( false );
|
||||
}
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.1.0.272" Java: "13.0.2" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -7,8 +7,8 @@ new FormModel {
|
||||
"JavaCodeGenerator.defaultVariableLocal": true
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$columnConstraints": "[][][][][][]"
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[][][][][]"
|
||||
"$rowConstraints": "[][][][][][][][][][][]"
|
||||
} ) {
|
||||
name: "this"
|
||||
@@ -27,7 +27,7 @@ new FormModel {
|
||||
"preferredSize": new java.awt.Dimension( 200, 200 )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0,grow,width 70,height 70"
|
||||
"value": "cell 1 0,grow,width 70,height 40"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JScrollBar" ) {
|
||||
name: "scrollBar2"
|
||||
@@ -64,7 +64,7 @@ new FormModel {
|
||||
"orientation": 1
|
||||
"value": 30
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0 1 6,growy"
|
||||
"value": "cell 2 0 1 6,growy,height 100"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JSlider" ) {
|
||||
name: "slider4"
|
||||
@@ -75,12 +75,7 @@ new FormModel {
|
||||
"orientation": 1
|
||||
"value": 30
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0 1 6,growy"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane14"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 0,grow"
|
||||
"value": "cell 2 0 1 6,growy,height 100"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JProgressBar" ) {
|
||||
name: "progressBar3"
|
||||
@@ -90,7 +85,7 @@ new FormModel {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 4 0 1 6,growy"
|
||||
"value": "cell 2 0 1 6,growy"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JProgressBar" ) {
|
||||
name: "progressBar4"
|
||||
@@ -101,7 +96,7 @@ new FormModel {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 4 0 1 6,growy"
|
||||
"value": "cell 2 0 1 6,growy"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||
name: "toolBar2"
|
||||
@@ -126,7 +121,13 @@ new FormModel {
|
||||
"icon": new com.jformdesigner.model.SwingIcon( 2, "Tree.closedIcon" )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 4 0 1 6,growy"
|
||||
"value": "cell 2 0 1 6,growy"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel2"
|
||||
"border": new javax.swing.border.TitledBorder( "TitledBorder" )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 0 1 6,grow"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "scrollBarLabel"
|
||||
@@ -140,12 +141,6 @@ new FormModel {
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 1,growx"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
"text": "HTML:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 5 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JScrollBar" ) {
|
||||
name: "scrollBar4"
|
||||
"orientation": 0
|
||||
@@ -155,16 +150,22 @@ new FormModel {
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$columnConstraints": "[]"
|
||||
"$rowConstraints": "[][][]"
|
||||
"$rowConstraints": "[][][][]"
|
||||
"$layoutConstraints": "ltr,insets 0,hidemode 3"
|
||||
} ) {
|
||||
name: "panel3"
|
||||
"opaque": false
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
"text": "HTML:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "<html>JLabel HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a></html>"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane15"
|
||||
@@ -174,7 +175,7 @@ new FormModel {
|
||||
"text": "JEditorPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1,grow"
|
||||
"value": "cell 0 2,grow"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane16"
|
||||
@@ -184,10 +185,10 @@ new FormModel {
|
||||
"text": "JTextPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2,grow"
|
||||
"value": "cell 0 3,grow"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 5 2 1 9,aligny top,growy 0"
|
||||
"value": "cell 4 0 1 8,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JScrollBar" ) {
|
||||
name: "scrollBar5"
|
||||
@@ -215,12 +216,6 @@ new FormModel {
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 5,growx"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel2"
|
||||
"border": new javax.swing.border.TitledBorder( "TitledBorder" )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 5,grow"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "sliderLabel"
|
||||
"text": "JSlider:"
|
||||
@@ -365,7 +360,7 @@ new FormModel {
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 790, 715 )
|
||||
"size": new java.awt.Dimension( 700, 420 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,393 @@
|
||||
/*
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.demo;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
import javax.swing.*;
|
||||
import net.miginfocom.swing.*;
|
||||
|
||||
/**
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
class NewDialog
|
||||
extends JDialog
|
||||
{
|
||||
NewDialog( Window owner ) {
|
||||
super( owner );
|
||||
initComponents();
|
||||
|
||||
// hide menubar, which is here for testing
|
||||
menuBar1.setVisible( false );
|
||||
|
||||
getRootPane().setDefaultButton( okButton );
|
||||
|
||||
// register ESC key to close frame
|
||||
((JComponent)getContentPane()).registerKeyboardAction(
|
||||
e -> dispose(),
|
||||
KeyStroke.getKeyStroke( KeyEvent.VK_ESCAPE, 0, false ),
|
||||
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
|
||||
}
|
||||
|
||||
private void okActionPerformed() {
|
||||
dispose();
|
||||
}
|
||||
|
||||
private void cancelActionPerformed() {
|
||||
dispose();
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
dialogPane = new JPanel();
|
||||
contentPanel = new JPanel();
|
||||
label1 = new JLabel();
|
||||
textField1 = new JTextField();
|
||||
label3 = new JLabel();
|
||||
comboBox2 = new JComboBox<>();
|
||||
label2 = new JLabel();
|
||||
comboBox1 = new JComboBox<>();
|
||||
buttonBar = new JPanel();
|
||||
okButton = new JButton();
|
||||
cancelButton = new JButton();
|
||||
menuBar1 = new JMenuBar();
|
||||
menu1 = new JMenu();
|
||||
menuItem8 = new JMenuItem();
|
||||
menuItem7 = new JMenuItem();
|
||||
menuItem6 = new JMenuItem();
|
||||
menuItem5 = new JMenuItem();
|
||||
menuItem4 = new JMenuItem();
|
||||
menuItem3 = new JMenuItem();
|
||||
menuItem2 = new JMenuItem();
|
||||
menuItem1 = new JMenuItem();
|
||||
menu2 = new JMenu();
|
||||
menuItem18 = new JMenuItem();
|
||||
menuItem17 = new JMenuItem();
|
||||
menuItem16 = new JMenuItem();
|
||||
menuItem15 = new JMenuItem();
|
||||
menuItem14 = new JMenuItem();
|
||||
menuItem13 = new JMenuItem();
|
||||
menuItem12 = new JMenuItem();
|
||||
menuItem11 = new JMenuItem();
|
||||
menuItem10 = new JMenuItem();
|
||||
menuItem9 = new JMenuItem();
|
||||
menu3 = new JMenu();
|
||||
menuItem25 = new JMenuItem();
|
||||
menuItem26 = new JMenuItem();
|
||||
menuItem24 = new JMenuItem();
|
||||
menuItem23 = new JMenuItem();
|
||||
menuItem22 = new JMenuItem();
|
||||
menuItem21 = new JMenuItem();
|
||||
menuItem20 = new JMenuItem();
|
||||
menuItem19 = new JMenuItem();
|
||||
popupMenu1 = new JPopupMenu();
|
||||
cutMenuItem = new JMenuItem();
|
||||
copyMenuItem = new JMenuItem();
|
||||
pasteMenuItem = new JMenuItem();
|
||||
|
||||
//======== this ========
|
||||
setTitle("New");
|
||||
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||
setModal(true);
|
||||
Container contentPane = getContentPane();
|
||||
contentPane.setLayout(new BorderLayout());
|
||||
|
||||
//======== dialogPane ========
|
||||
{
|
||||
dialogPane.setLayout(new BorderLayout());
|
||||
|
||||
//======== contentPanel ========
|
||||
{
|
||||
contentPanel.setLayout(new MigLayout(
|
||||
"insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[fill]" +
|
||||
"[grow,fill]",
|
||||
// rows
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]"));
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("Name:");
|
||||
contentPanel.add(label1, "cell 0 0");
|
||||
|
||||
//---- textField1 ----
|
||||
textField1.setComponentPopupMenu(popupMenu1);
|
||||
contentPanel.add(textField1, "cell 1 0");
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("Package:");
|
||||
contentPanel.add(label3, "cell 0 1");
|
||||
|
||||
//---- comboBox2 ----
|
||||
comboBox2.setEditable(true);
|
||||
comboBox2.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
"com.myapp",
|
||||
"com.myapp.core",
|
||||
"com.myapp.ui",
|
||||
"com.myapp.util",
|
||||
"com.myapp.extras",
|
||||
"com.myapp.components",
|
||||
"com.myapp.dialogs",
|
||||
"com.myapp.windows"
|
||||
}));
|
||||
contentPanel.add(comboBox2, "cell 1 1");
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("Type:");
|
||||
contentPanel.add(label2, "cell 0 2");
|
||||
|
||||
//---- comboBox1 ----
|
||||
comboBox1.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
"Class",
|
||||
"Interface",
|
||||
"Package",
|
||||
"Annotation",
|
||||
"Enum",
|
||||
"Record",
|
||||
"Java Project",
|
||||
"Project",
|
||||
"Folder",
|
||||
"File"
|
||||
}));
|
||||
contentPanel.add(comboBox1, "cell 1 2");
|
||||
}
|
||||
dialogPane.add(contentPanel, BorderLayout.CENTER);
|
||||
|
||||
//======== buttonBar ========
|
||||
{
|
||||
buttonBar.setLayout(new MigLayout(
|
||||
"insets dialog,alignx right",
|
||||
// columns
|
||||
"[button,fill]" +
|
||||
"[button,fill]",
|
||||
// rows
|
||||
null));
|
||||
|
||||
//---- okButton ----
|
||||
okButton.setText("OK");
|
||||
okButton.addActionListener(e -> okActionPerformed());
|
||||
buttonBar.add(okButton, "cell 0 0");
|
||||
|
||||
//---- cancelButton ----
|
||||
cancelButton.setText("Cancel");
|
||||
cancelButton.addActionListener(e -> cancelActionPerformed());
|
||||
buttonBar.add(cancelButton, "cell 1 0");
|
||||
}
|
||||
dialogPane.add(buttonBar, BorderLayout.SOUTH);
|
||||
|
||||
//======== menuBar1 ========
|
||||
{
|
||||
|
||||
//======== menu1 ========
|
||||
{
|
||||
menu1.setText("text");
|
||||
|
||||
//---- menuItem8 ----
|
||||
menuItem8.setText("text");
|
||||
menu1.add(menuItem8);
|
||||
|
||||
//---- menuItem7 ----
|
||||
menuItem7.setText("text");
|
||||
menu1.add(menuItem7);
|
||||
|
||||
//---- menuItem6 ----
|
||||
menuItem6.setText("text");
|
||||
menu1.add(menuItem6);
|
||||
|
||||
//---- menuItem5 ----
|
||||
menuItem5.setText("text");
|
||||
menu1.add(menuItem5);
|
||||
|
||||
//---- menuItem4 ----
|
||||
menuItem4.setText("text");
|
||||
menu1.add(menuItem4);
|
||||
|
||||
//---- menuItem3 ----
|
||||
menuItem3.setText("text");
|
||||
menu1.add(menuItem3);
|
||||
|
||||
//---- menuItem2 ----
|
||||
menuItem2.setText("text");
|
||||
menu1.add(menuItem2);
|
||||
|
||||
//---- menuItem1 ----
|
||||
menuItem1.setText("text");
|
||||
menu1.add(menuItem1);
|
||||
}
|
||||
menuBar1.add(menu1);
|
||||
|
||||
//======== menu2 ========
|
||||
{
|
||||
menu2.setText("text");
|
||||
|
||||
//---- menuItem18 ----
|
||||
menuItem18.setText("text");
|
||||
menu2.add(menuItem18);
|
||||
|
||||
//---- menuItem17 ----
|
||||
menuItem17.setText("text");
|
||||
menu2.add(menuItem17);
|
||||
|
||||
//---- menuItem16 ----
|
||||
menuItem16.setText("text");
|
||||
menu2.add(menuItem16);
|
||||
|
||||
//---- menuItem15 ----
|
||||
menuItem15.setText("text");
|
||||
menu2.add(menuItem15);
|
||||
|
||||
//---- menuItem14 ----
|
||||
menuItem14.setText("text");
|
||||
menu2.add(menuItem14);
|
||||
|
||||
//---- menuItem13 ----
|
||||
menuItem13.setText("text");
|
||||
menu2.add(menuItem13);
|
||||
|
||||
//---- menuItem12 ----
|
||||
menuItem12.setText("text");
|
||||
menu2.add(menuItem12);
|
||||
|
||||
//---- menuItem11 ----
|
||||
menuItem11.setText("text");
|
||||
menu2.add(menuItem11);
|
||||
|
||||
//---- menuItem10 ----
|
||||
menuItem10.setText("text");
|
||||
menu2.add(menuItem10);
|
||||
|
||||
//---- menuItem9 ----
|
||||
menuItem9.setText("text");
|
||||
menu2.add(menuItem9);
|
||||
}
|
||||
menuBar1.add(menu2);
|
||||
|
||||
//======== menu3 ========
|
||||
{
|
||||
menu3.setText("text");
|
||||
|
||||
//---- menuItem25 ----
|
||||
menuItem25.setText("text");
|
||||
menu3.add(menuItem25);
|
||||
|
||||
//---- menuItem26 ----
|
||||
menuItem26.setText("text");
|
||||
menu3.add(menuItem26);
|
||||
|
||||
//---- menuItem24 ----
|
||||
menuItem24.setText("text");
|
||||
menu3.add(menuItem24);
|
||||
|
||||
//---- menuItem23 ----
|
||||
menuItem23.setText("text");
|
||||
menu3.add(menuItem23);
|
||||
|
||||
//---- menuItem22 ----
|
||||
menuItem22.setText("text");
|
||||
menu3.add(menuItem22);
|
||||
|
||||
//---- menuItem21 ----
|
||||
menuItem21.setText("text");
|
||||
menu3.add(menuItem21);
|
||||
|
||||
//---- menuItem20 ----
|
||||
menuItem20.setText("text");
|
||||
menu3.add(menuItem20);
|
||||
|
||||
//---- menuItem19 ----
|
||||
menuItem19.setText("text");
|
||||
menu3.add(menuItem19);
|
||||
}
|
||||
menuBar1.add(menu3);
|
||||
}
|
||||
dialogPane.add(menuBar1, BorderLayout.NORTH);
|
||||
}
|
||||
contentPane.add(dialogPane, BorderLayout.CENTER);
|
||||
pack();
|
||||
setLocationRelativeTo(getOwner());
|
||||
|
||||
//======== popupMenu1 ========
|
||||
{
|
||||
|
||||
//---- cutMenuItem ----
|
||||
cutMenuItem.setText("Cut");
|
||||
cutMenuItem.setMnemonic('C');
|
||||
popupMenu1.add(cutMenuItem);
|
||||
|
||||
//---- copyMenuItem ----
|
||||
copyMenuItem.setText("Copy");
|
||||
copyMenuItem.setMnemonic('O');
|
||||
popupMenu1.add(copyMenuItem);
|
||||
|
||||
//---- pasteMenuItem ----
|
||||
pasteMenuItem.setText("Paste");
|
||||
pasteMenuItem.setMnemonic('P');
|
||||
popupMenu1.add(pasteMenuItem);
|
||||
}
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
private JPanel dialogPane;
|
||||
private JPanel contentPanel;
|
||||
private JLabel label1;
|
||||
private JTextField textField1;
|
||||
private JLabel label3;
|
||||
private JComboBox<String> comboBox2;
|
||||
private JLabel label2;
|
||||
private JComboBox<String> comboBox1;
|
||||
private JPanel buttonBar;
|
||||
private JButton okButton;
|
||||
private JButton cancelButton;
|
||||
private JMenuBar menuBar1;
|
||||
private JMenu menu1;
|
||||
private JMenuItem menuItem8;
|
||||
private JMenuItem menuItem7;
|
||||
private JMenuItem menuItem6;
|
||||
private JMenuItem menuItem5;
|
||||
private JMenuItem menuItem4;
|
||||
private JMenuItem menuItem3;
|
||||
private JMenuItem menuItem2;
|
||||
private JMenuItem menuItem1;
|
||||
private JMenu menu2;
|
||||
private JMenuItem menuItem18;
|
||||
private JMenuItem menuItem17;
|
||||
private JMenuItem menuItem16;
|
||||
private JMenuItem menuItem15;
|
||||
private JMenuItem menuItem14;
|
||||
private JMenuItem menuItem13;
|
||||
private JMenuItem menuItem12;
|
||||
private JMenuItem menuItem11;
|
||||
private JMenuItem menuItem10;
|
||||
private JMenuItem menuItem9;
|
||||
private JMenu menu3;
|
||||
private JMenuItem menuItem25;
|
||||
private JMenuItem menuItem26;
|
||||
private JMenuItem menuItem24;
|
||||
private JMenuItem menuItem23;
|
||||
private JMenuItem menuItem22;
|
||||
private JMenuItem menuItem21;
|
||||
private JMenuItem menuItem20;
|
||||
private JMenuItem menuItem19;
|
||||
private JPopupMenu popupMenu1;
|
||||
private JMenuItem cutMenuItem;
|
||||
private JMenuItem copyMenuItem;
|
||||
private JMenuItem pasteMenuItem;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
}
|
||||
@@ -0,0 +1,254 @@
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
root: new FormRoot {
|
||||
add( new FormWindow( "javax.swing.JDialog", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "this"
|
||||
"title": "New"
|
||||
"defaultCloseOperation": 2
|
||||
"modal": true
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "dialogPane"
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[fill][grow,fill]"
|
||||
"$rowConstraints": "[][][]"
|
||||
} ) {
|
||||
name: "contentPanel"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
"text": "Name:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField1"
|
||||
"componentPopupMenu": new FormReference( "popupMenu1" )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "Package:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||
name: "comboBox2"
|
||||
"editable": true
|
||||
"model": new javax.swing.DefaultComboBoxModel {
|
||||
selectedItem: "com.myapp"
|
||||
addElement( "com.myapp" )
|
||||
addElement( "com.myapp.core" )
|
||||
addElement( "com.myapp.ui" )
|
||||
addElement( "com.myapp.util" )
|
||||
addElement( "com.myapp.extras" )
|
||||
addElement( "com.myapp.components" )
|
||||
addElement( "com.myapp.dialogs" )
|
||||
addElement( "com.myapp.windows" )
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
"text": "Type:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||
name: "comboBox1"
|
||||
"model": new javax.swing.DefaultComboBoxModel {
|
||||
selectedItem: "Class"
|
||||
addElement( "Class" )
|
||||
addElement( "Interface" )
|
||||
addElement( "Package" )
|
||||
addElement( "Annotation" )
|
||||
addElement( "Enum" )
|
||||
addElement( "Record" )
|
||||
addElement( "Java Project" )
|
||||
addElement( "Project" )
|
||||
addElement( "Folder" )
|
||||
addElement( "File" )
|
||||
}
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 2"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets dialog,alignx right"
|
||||
"$columnConstraints": "[button,fill][button,fill]"
|
||||
"$rowSpecs": "[fill]"
|
||||
} ) {
|
||||
name: "buttonBar"
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "okButton"
|
||||
"text": "OK"
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "okActionPerformed", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "cancelButton"
|
||||
"text": "Cancel"
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "cancelActionPerformed", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "South"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JMenuBar", new FormLayoutManager( class javax.swing.JMenuBar ) ) {
|
||||
name: "menuBar1"
|
||||
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||
name: "menu1"
|
||||
"text": "text"
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem8"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem7"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem6"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem5"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem4"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem3"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem2"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem1"
|
||||
"text": "text"
|
||||
} )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||
name: "menu2"
|
||||
"text": "text"
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem18"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem17"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem16"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem15"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem14"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem13"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem12"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem11"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem10"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem9"
|
||||
"text": "text"
|
||||
} )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||
name: "menu3"
|
||||
"text": "text"
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem25"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem26"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem24"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem23"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem22"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem21"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem20"
|
||||
"text": "text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "menuItem19"
|
||||
"text": "text"
|
||||
} )
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "North"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 330, 210 )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) {
|
||||
name: "popupMenu1"
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "cutMenuItem"
|
||||
"text": "Cut"
|
||||
"mnemonic": 67
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "copyMenuItem"
|
||||
"text": "Copy"
|
||||
"mnemonic": 79
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||
name: "pasteMenuItem"
|
||||
"text": "Paste"
|
||||
"mnemonic": 80
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 220 )
|
||||
"size": new java.awt.Dimension( 91, 87 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
@@ -93,7 +93,7 @@ class OptionPanePanel
|
||||
//======== panel9 ========
|
||||
{
|
||||
panel9.setLayout(new MigLayout(
|
||||
"flowy,hidemode 3",
|
||||
"flowy,insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[]" +
|
||||
"[]" +
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.1.0.272" Java: "13.0.2" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -12,7 +12,7 @@ new FormModel {
|
||||
name: "scrollPane1"
|
||||
"border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 )
|
||||
add( new FormContainer( "com.formdev.flatlaf.demo.ScrollablePanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "flowy,hidemode 3"
|
||||
"$layoutConstraints": "flowy,insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[][][fill]"
|
||||
"$rowConstraints": "[top][top][top][top][top][top][top][top]"
|
||||
} ) {
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
/*
|
||||
* Created by JFormDesigner on Tue Aug 27 21:47:02 CEST 2019
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.demo;
|
||||
@@ -20,6 +32,8 @@ class TabsPanel
|
||||
{
|
||||
TabsPanel() {
|
||||
initComponents();
|
||||
|
||||
addInitialTabs( tabbedPane1, tabbedPane2, tabbedPane3, tabbedPane4 );
|
||||
}
|
||||
|
||||
private void tabScrollChanged() {
|
||||
@@ -28,8 +42,20 @@ class TabsPanel
|
||||
tabbedPane2.setTabLayoutPolicy( tabLayoutPolicy );
|
||||
tabbedPane3.setTabLayoutPolicy( tabLayoutPolicy );
|
||||
tabbedPane4.setTabLayoutPolicy( tabLayoutPolicy );
|
||||
|
||||
if( !autoMoreTabs && tabScrollCheckBox.isSelected() && !moreTabsCheckBox.isSelected() ) {
|
||||
moreTabsCheckBox.setSelected( true );
|
||||
moreTabsChanged();
|
||||
autoMoreTabs = true;
|
||||
} else if( autoMoreTabs && !tabScrollCheckBox.isSelected() && moreTabsCheckBox.isSelected() ) {
|
||||
moreTabsCheckBox.setSelected( false );
|
||||
moreTabsChanged();
|
||||
autoMoreTabs = false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean autoMoreTabs;
|
||||
|
||||
private void showTabSeparatorsChanged() {
|
||||
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
||||
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
||||
@@ -52,15 +78,17 @@ class TabsPanel
|
||||
addRemoveMoreTabs( tabbedPane2, moreTabs );
|
||||
addRemoveMoreTabs( tabbedPane3, moreTabs );
|
||||
addRemoveMoreTabs( tabbedPane4, moreTabs );
|
||||
|
||||
autoMoreTabs = false;
|
||||
}
|
||||
|
||||
private void addRemoveMoreTabs( JTabbedPane tabbedPane, boolean add ) {
|
||||
if( add ) {
|
||||
tabbedPane.addTab( "Tab 4", new JLabel( "tab 4" ) );
|
||||
tabbedPane.addTab( "Tab 5", new JLabel( "tab 5" ) );
|
||||
tabbedPane.addTab( "Tab 6", new JLabel( "tab 6" ) );
|
||||
tabbedPane.addTab( "Tab 7", new JLabel( "tab 7" ) );
|
||||
tabbedPane.addTab( "Tab 8", new JLabel( "tab 8" ) );
|
||||
addTab( tabbedPane, "Tab 4", "tab content 4" );
|
||||
addTab( tabbedPane, "Tab 5", "tab content 5" );
|
||||
addTab( tabbedPane, "Tab 6", "tab content 6" );
|
||||
addTab( tabbedPane, "Tab 7", "tab content 7" );
|
||||
addTab( tabbedPane, "Tab 8", "tab content 8" );
|
||||
} else {
|
||||
int tabCount = tabbedPane.getTabCount();
|
||||
if( tabCount > 3 ) {
|
||||
@@ -70,6 +98,39 @@ class TabsPanel
|
||||
}
|
||||
}
|
||||
|
||||
private void addInitialTabs( JTabbedPane... tabbedPanes ) {
|
||||
for( JTabbedPane tabbedPane : tabbedPanes ) {
|
||||
String placement = "unknown";
|
||||
switch( tabbedPane.getTabPlacement() ) {
|
||||
case JTabbedPane.TOP: placement = "TOP"; break;
|
||||
case JTabbedPane.BOTTOM: placement = "BOTTOM"; break;
|
||||
case JTabbedPane.LEFT: placement = "LEFT"; break;
|
||||
case JTabbedPane.RIGHT: placement = "RIGHT"; break;
|
||||
}
|
||||
addTab( tabbedPane, "Tab 1", "<html><center>" + placement + "<br>tab placement</center></html>" );
|
||||
|
||||
JComponent tab2 = createTab( "tab content 2" );
|
||||
tab2.setBorder( new LineBorder( Color.magenta ) );
|
||||
tabbedPane.addTab( "Second Tab", tab2 );
|
||||
|
||||
addTab( tabbedPane, "Disabled", "tab content 3" );
|
||||
tabbedPane.setEnabledAt( 2, false );
|
||||
}
|
||||
}
|
||||
|
||||
private void addTab( JTabbedPane tabbedPane, String title, String text ) {
|
||||
tabbedPane.addTab( title, createTab( text ) );
|
||||
}
|
||||
|
||||
private JComponent createTab( String text ) {
|
||||
JLabel label = new JLabel( text );
|
||||
label.setHorizontalAlignment( SwingConstants.CENTER );
|
||||
|
||||
JPanel tab = new JPanel( new BorderLayout() );
|
||||
tab.add( label, BorderLayout.CENTER );
|
||||
return tab;
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
JPanel panel9 = new JPanel();
|
||||
@@ -77,31 +138,19 @@ class TabsPanel
|
||||
JSplitPane splitPane3 = new JSplitPane();
|
||||
JSplitPane splitPane1 = new JSplitPane();
|
||||
JPanel panel10 = new JPanel();
|
||||
JLabel label1 = new JLabel();
|
||||
JPanel panel11 = new JPanel();
|
||||
JLabel label2 = new JLabel();
|
||||
JSplitPane splitPane2 = new JSplitPane();
|
||||
JPanel panel12 = new JPanel();
|
||||
JLabel label3 = new JLabel();
|
||||
JPanel panel13 = new JPanel();
|
||||
JLabel label4 = new JLabel();
|
||||
JLabel tabbedPaneLabel = new JLabel();
|
||||
tabbedPane1 = new JTabbedPane();
|
||||
JPanel panel1 = new JPanel();
|
||||
JLabel label1 = new JLabel();
|
||||
JPanel panel2 = new JPanel();
|
||||
JLabel label2 = new JLabel();
|
||||
tabbedPane3 = new JTabbedPane();
|
||||
JPanel panel5 = new JPanel();
|
||||
JLabel label5 = new JLabel();
|
||||
JPanel panel6 = new JPanel();
|
||||
JLabel label6 = new JLabel();
|
||||
tabbedPane2 = new JTabbedPane();
|
||||
JPanel panel3 = new JPanel();
|
||||
JLabel label3 = new JLabel();
|
||||
JPanel panel4 = new JPanel();
|
||||
JLabel label4 = new JLabel();
|
||||
tabbedPane4 = new JTabbedPane();
|
||||
JPanel panel7 = new JPanel();
|
||||
JLabel label7 = new JLabel();
|
||||
JPanel panel8 = new JPanel();
|
||||
JLabel label8 = new JLabel();
|
||||
JPanel panel14 = new JPanel();
|
||||
moreTabsCheckBox = new JCheckBox();
|
||||
tabScrollCheckBox = new JCheckBox();
|
||||
@@ -111,7 +160,7 @@ class TabsPanel
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
"insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[grow,fill]",
|
||||
// rows
|
||||
@@ -120,8 +169,8 @@ class TabsPanel
|
||||
//======== panel9 ========
|
||||
{
|
||||
panel9.setLayout(new FormLayout(
|
||||
"70dlu:grow, $lcgap, 70dlu:grow",
|
||||
"default, $lgap, fill:70dlu, $lgap, pref, 2*($lgap, fill:70dlu:grow), $lgap, pref"));
|
||||
"70dlu:grow, $ugap, 70dlu:grow",
|
||||
"default, $lgap, fill:70dlu, $pgap, pref, $lgap, 2*(fill:80dlu:grow, $ugap), pref"));
|
||||
|
||||
//---- splitPaneLabel ----
|
||||
splitPaneLabel.setText("JSplitPane:");
|
||||
@@ -134,19 +183,30 @@ class TabsPanel
|
||||
//======== splitPane1 ========
|
||||
{
|
||||
splitPane1.setResizeWeight(0.5);
|
||||
splitPane1.setOneTouchExpandable(true);
|
||||
|
||||
//======== panel10 ========
|
||||
{
|
||||
panel10.setBackground(Color.orange);
|
||||
panel10.setLayout(new FlowLayout());
|
||||
panel10.setBackground(new Color(217, 163, 67));
|
||||
panel10.setLayout(new BorderLayout());
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("LEFT");
|
||||
label1.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label1.setForeground(Color.white);
|
||||
panel10.add(label1, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane1.setLeftComponent(panel10);
|
||||
|
||||
//======== panel11 ========
|
||||
{
|
||||
panel11.setBackground(Color.magenta);
|
||||
panel11.setLayout(new FlowLayout());
|
||||
panel11.setBackground(new Color(98, 181, 67));
|
||||
panel11.setLayout(new BorderLayout());
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("RIGHT");
|
||||
label2.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label2.setForeground(Color.white);
|
||||
panel11.add(label2, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane1.setRightComponent(panel11);
|
||||
}
|
||||
@@ -156,19 +216,30 @@ class TabsPanel
|
||||
{
|
||||
splitPane2.setOrientation(JSplitPane.VERTICAL_SPLIT);
|
||||
splitPane2.setResizeWeight(0.5);
|
||||
splitPane2.setOneTouchExpandable(true);
|
||||
|
||||
//======== panel12 ========
|
||||
{
|
||||
panel12.setBackground(Color.orange);
|
||||
panel12.setLayout(new FlowLayout());
|
||||
panel12.setBackground(new Color(242, 101, 34));
|
||||
panel12.setLayout(new BorderLayout());
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("TOP");
|
||||
label3.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label3.setForeground(Color.white);
|
||||
panel12.add(label3, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane2.setTopComponent(panel12);
|
||||
|
||||
//======== panel13 ========
|
||||
{
|
||||
panel13.setBackground(Color.magenta);
|
||||
panel13.setLayout(new FlowLayout());
|
||||
panel13.setBackground(new Color(64, 182, 224));
|
||||
panel13.setLayout(new BorderLayout());
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("BOTTOM");
|
||||
label4.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label4.setForeground(Color.white);
|
||||
panel13.add(label4, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane2.setBottomComponent(panel13);
|
||||
}
|
||||
@@ -179,112 +250,23 @@ class TabsPanel
|
||||
//---- tabbedPaneLabel ----
|
||||
tabbedPaneLabel.setText("JTabbedPane:");
|
||||
panel9.add(tabbedPaneLabel, cc.xy(1, 5));
|
||||
|
||||
//======== tabbedPane1 ========
|
||||
{
|
||||
|
||||
//======== panel1 ========
|
||||
{
|
||||
panel1.setLayout(new FlowLayout());
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("TOP");
|
||||
panel1.add(label1);
|
||||
}
|
||||
tabbedPane1.addTab("Tab 1", panel1);
|
||||
|
||||
//======== panel2 ========
|
||||
{
|
||||
panel2.setBorder(new LineBorder(Color.magenta));
|
||||
panel2.setLayout(new FlowLayout());
|
||||
}
|
||||
tabbedPane1.addTab("Tab 2", panel2);
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("text");
|
||||
tabbedPane1.addTab("Tab 3", label2);
|
||||
}
|
||||
panel9.add(tabbedPane1, cc.xy(1, 7));
|
||||
|
||||
//======== tabbedPane3 ========
|
||||
{
|
||||
tabbedPane3.setTabPlacement(SwingConstants.LEFT);
|
||||
|
||||
//======== panel5 ========
|
||||
{
|
||||
panel5.setLayout(new FlowLayout());
|
||||
|
||||
//---- label5 ----
|
||||
label5.setText("LEFT");
|
||||
panel5.add(label5);
|
||||
}
|
||||
tabbedPane3.addTab("Tab 1", panel5);
|
||||
|
||||
//======== panel6 ========
|
||||
{
|
||||
panel6.setBorder(new LineBorder(Color.magenta));
|
||||
panel6.setLayout(new FlowLayout());
|
||||
}
|
||||
tabbedPane3.addTab("Tab 2", panel6);
|
||||
|
||||
//---- label6 ----
|
||||
label6.setText("text");
|
||||
tabbedPane3.addTab("Tab 3", label6);
|
||||
}
|
||||
panel9.add(tabbedPane3, cc.xy(3, 7));
|
||||
|
||||
//======== tabbedPane2 ========
|
||||
{
|
||||
tabbedPane2.setTabPlacement(SwingConstants.BOTTOM);
|
||||
|
||||
//======== panel3 ========
|
||||
{
|
||||
panel3.setLayout(new FlowLayout());
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("BOTTOM");
|
||||
panel3.add(label3);
|
||||
}
|
||||
tabbedPane2.addTab("Tab 1", panel3);
|
||||
|
||||
//======== panel4 ========
|
||||
{
|
||||
panel4.setBorder(new LineBorder(Color.magenta));
|
||||
panel4.setLayout(new FlowLayout());
|
||||
}
|
||||
tabbedPane2.addTab("Tab 2", panel4);
|
||||
tabbedPane2.setEnabledAt(1, false);
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("text");
|
||||
tabbedPane2.addTab("Tab 3", label4);
|
||||
}
|
||||
panel9.add(tabbedPane2, cc.xy(1, 9));
|
||||
|
||||
//======== tabbedPane4 ========
|
||||
{
|
||||
tabbedPane4.setTabPlacement(SwingConstants.RIGHT);
|
||||
|
||||
//======== panel7 ========
|
||||
{
|
||||
panel7.setLayout(new FlowLayout());
|
||||
|
||||
//---- label7 ----
|
||||
label7.setText("RIGHT");
|
||||
panel7.add(label7);
|
||||
}
|
||||
tabbedPane4.addTab("Tab 1", panel7);
|
||||
|
||||
//======== panel8 ========
|
||||
{
|
||||
panel8.setBorder(new LineBorder(Color.magenta));
|
||||
panel8.setLayout(new FlowLayout());
|
||||
}
|
||||
tabbedPane4.addTab("Tab 2", panel8);
|
||||
|
||||
//---- label8 ----
|
||||
label8.setText("text");
|
||||
tabbedPane4.addTab("Tab 3", label8);
|
||||
}
|
||||
panel9.add(tabbedPane4, cc.xy(3, 9));
|
||||
|
||||
@@ -301,25 +283,24 @@ class TabsPanel
|
||||
"[center]"));
|
||||
|
||||
//---- moreTabsCheckBox ----
|
||||
moreTabsCheckBox.setText("more tabs");
|
||||
moreTabsCheckBox.setText("More tabs");
|
||||
moreTabsCheckBox.setMnemonic('M');
|
||||
moreTabsCheckBox.addActionListener(e -> moreTabsChanged());
|
||||
panel14.add(moreTabsCheckBox, "cell 0 0");
|
||||
|
||||
//---- tabScrollCheckBox ----
|
||||
tabScrollCheckBox.setText("tabLayoutPolicy = SCROLL");
|
||||
tabScrollCheckBox.setText("Use scroll layout");
|
||||
tabScrollCheckBox.setMnemonic('S');
|
||||
tabScrollCheckBox.addActionListener(e -> tabScrollChanged());
|
||||
panel14.add(tabScrollCheckBox, "cell 1 0,alignx left,growx 0");
|
||||
|
||||
//---- showTabSeparatorsCheckBox ----
|
||||
showTabSeparatorsCheckBox.setText("JTabbedPane.showTabSeparators");
|
||||
showTabSeparatorsCheckBox.setText("Show tab separators");
|
||||
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
||||
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
||||
|
||||
//---- hasFullBorderCheckBox ----
|
||||
hasFullBorderCheckBox.setText("JTabbedPane.hasFullBorder");
|
||||
hasFullBorderCheckBox.setMnemonic('F');
|
||||
hasFullBorderCheckBox.setText("Show content border");
|
||||
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
||||
panel14.add(hasFullBorderCheckBox, "cell 3 0,alignx left,growx 0");
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.0.0.194" Java: "11.0.2" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -7,14 +7,14 @@ new FormModel {
|
||||
"JavaCodeGenerator.defaultVariableLocal": true
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[grow,fill]"
|
||||
"$rowConstraints": "[grow,fill]"
|
||||
} ) {
|
||||
name: "this"
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
|
||||
"$columnSpecs": "70dlu:grow, labelcompgap, 70dlu:grow"
|
||||
"$rowSpecs": "default, linegap, fill:70dlu, linegap, pref, linegap, fill:70dlu:grow, linegap, fill:70dlu:grow, linegap, pref"
|
||||
"$columnSpecs": "70dlu:grow, unrelgap, 70dlu:grow"
|
||||
"$rowSpecs": "default, linegap, fill:70dlu, pargap, pref, linegap, fill:80dlu:grow, unrelgap, fill:80dlu:grow, unrelgap, pref"
|
||||
} ) {
|
||||
name: "panel9"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
@@ -27,16 +27,31 @@ new FormModel {
|
||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||
name: "splitPane1"
|
||||
"resizeWeight": 0.5
|
||||
"oneTouchExpandable": true
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel10"
|
||||
"background": sfield java.awt.Color orange
|
||||
"background": new java.awt.Color( 217, 163, 67, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
"text": "LEFT"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel11"
|
||||
"background": sfield java.awt.Color magenta
|
||||
"background": new java.awt.Color( 98, 181, 67, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
"text": "RIGHT"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
@@ -47,16 +62,31 @@ new FormModel {
|
||||
name: "splitPane2"
|
||||
"orientation": 0
|
||||
"resizeWeight": 0.5
|
||||
"oneTouchExpandable": true
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel12"
|
||||
"background": sfield java.awt.Color orange
|
||||
"background": new java.awt.Color( 242, 101, 34, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "TOP"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel13"
|
||||
"background": sfield java.awt.Color magenta
|
||||
"background": new java.awt.Color( 64, 182, 224, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
"text": "BOTTOM"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
@@ -79,27 +109,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel1"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
"text": "TOP"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel2"
|
||||
"border": &LineBorder0 new javax.swing.border.LineBorder( sfield java.awt.Color magenta, 1, false )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 1
|
||||
"gridY": 7
|
||||
@@ -110,27 +119,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel5"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label5"
|
||||
"text": "LEFT"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel6"
|
||||
"border": #LineBorder0
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label6"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 3
|
||||
"gridY": 7
|
||||
@@ -141,28 +129,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel3"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "BOTTOM"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel4"
|
||||
"border": #LineBorder0
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
"enabled": false
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridY": 9
|
||||
} )
|
||||
@@ -172,27 +138,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel7"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label7"
|
||||
"text": "RIGHT"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel8"
|
||||
"border": #LineBorder0
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label8"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 3
|
||||
"gridY": 9
|
||||
@@ -205,7 +150,7 @@ new FormModel {
|
||||
name: "panel14"
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "moreTabsCheckBox"
|
||||
"text": "more tabs"
|
||||
"text": "More tabs"
|
||||
"mnemonic": 77
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
@@ -216,7 +161,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "tabScrollCheckBox"
|
||||
"text": "tabLayoutPolicy = SCROLL"
|
||||
"text": "Use scroll layout"
|
||||
"mnemonic": 83
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
@@ -227,7 +172,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showTabSeparatorsCheckBox"
|
||||
"text": "JTabbedPane.showTabSeparators"
|
||||
"text": "Show tab separators"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
@@ -237,8 +182,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "hasFullBorderCheckBox"
|
||||
"text": "JTabbedPane.hasFullBorder"
|
||||
"mnemonic": 70
|
||||
"text": "Show content border"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
@@ -255,7 +199,7 @@ new FormModel {
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 610, 515 )
|
||||
"size": new java.awt.Dimension( 625, 515 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ public class ExtrasPanel
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
"insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[]" +
|
||||
"[]" +
|
||||
@@ -98,7 +98,7 @@ public class ExtrasPanel
|
||||
//---- triStateLabel1 ----
|
||||
triStateLabel1.setText("text");
|
||||
triStateLabel1.setEnabled(false);
|
||||
add(triStateLabel1, "cell 2 1");
|
||||
add(triStateLabel1, "cell 2 1,gapx 30");
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("SVG Icons:");
|
||||
|
||||
@@ -4,7 +4,7 @@ new FormModel {
|
||||
contentType: "form/swing"
|
||||
root: new FormRoot {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[][][left]"
|
||||
"$rowConstraints": "[]para[][][]"
|
||||
} ) {
|
||||
@@ -33,7 +33,7 @@ new FormModel {
|
||||
"text": "text"
|
||||
"enabled": false
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 1"
|
||||
"value": "cell 2 1,gapx 30"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
|
||||
@@ -205,11 +205,11 @@ public class IJThemesPanel
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// select first theme if none selected
|
||||
if( themesList.getSelectedIndex() < 0 )
|
||||
themesList.setSelectedIndex( 0 );
|
||||
// select first theme if none selected
|
||||
if( themesList.getSelectedIndex() < 0 )
|
||||
themesList.setSelectedIndex( 0 );
|
||||
}
|
||||
|
||||
// scroll selection into visible area
|
||||
int sel = themesList.getSelectedIndex();
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#
|
||||
# Copyright 2020 FormDev Software GmbH
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
HintPanel.backgroundColor=darken(#ffffe1,80%)
|
||||
@@ -0,0 +1,17 @@
|
||||
#
|
||||
# Copyright 2020 FormDev Software GmbH
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
HintPanel.backgroundColor=#ffffe1
|
||||
@@ -3,16 +3,20 @@ FlatLaf Extras
|
||||
|
||||
This sub-project provides some additional components and classes:
|
||||
|
||||
- [FlatAnimatedLafChange](src/main/java/com/formdev/flatlaf/extras/FlatAnimatedLafChange.java):
|
||||
Animated Laf changing.
|
||||
- [FlatInspector](src/main/java/com/formdev/flatlaf/extras/FlatInspector.java):
|
||||
A simple UI inspector that shows information about UI component at mouse
|
||||
location in a tooltip.
|
||||
- [FlatSVGIcon](src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java): An
|
||||
icon that displays SVG using
|
||||
[svgSalamander](https://github.com/JFormDesigner/svgSalamander).
|
||||
- [TriStateCheckBox](src/main/java/com/formdev/flatlaf/extras/TriStateCheckBox.java):
|
||||
A tri-state check box.
|
||||
- [FlatSVGIcon](https://www.javadoc.io/doc/com.formdev/flatlaf-extras/latest/com/formdev/flatlaf/extras/FlatSVGIcon.html):
|
||||
An icon that displays SVG using
|
||||
[svgSalamander](https://github.com/JFormDesigner/svgSalamander).\
|
||||

|
||||
- [TriStateCheckBox](https://www.javadoc.io/doc/com.formdev/flatlaf-extras/latest/com/formdev/flatlaf/extras/TriStateCheckBox.html):
|
||||
A tri-state check box.\
|
||||

|
||||
- [FlatAnimatedLafChange](https://www.javadoc.io/doc/com.formdev/flatlaf-extras/latest/com/formdev/flatlaf/extras/FlatAnimatedLafChange.html):
|
||||
Animated Laf (theme) changing.
|
||||
- [FlatInspector](#ui-inspector): A simple UI inspector that shows information
|
||||
about UI component at mouse location in a tooltip.
|
||||
- [FlatUIDefaultsInspector](#ui-defaults-inspector): A simple UI defaults
|
||||
inspector that shows a window with all UI defaults used in current theme (look
|
||||
and feel).
|
||||
|
||||
|
||||
Download
|
||||
@@ -36,3 +40,45 @@ you can download here:
|
||||
|
||||
[](https://bintray.com/jformdesigner/flatlaf/flatlaf/_latestVersion)
|
||||
[](https://bintray.com/jformdesigner/svgSalamander/svgSalamander/_latestVersion)
|
||||
|
||||
|
||||
Tools
|
||||
-----
|
||||
|
||||
### UI Inspector
|
||||
|
||||
A simple UI inspector that shows information about UI component at mouse
|
||||
location in a tooltip, which may be useful while developing an application.
|
||||
Should be not installed in released applications.
|
||||
|
||||
Once installed with following code (e.g. in method `main`), it can be activated
|
||||
for the active window with the given keystroke:
|
||||
|
||||
~~~java
|
||||
FlatInspector.install( "ctrl shift alt X" );
|
||||
~~~
|
||||
|
||||

|
||||
|
||||
When the UI inspector is active some additional keys are available:
|
||||
|
||||
- press <kbd>Esc</kbd> key to disable UI inspector
|
||||
- press <kbd>Ctrl</kbd> key to increase inspection level, which shows
|
||||
information about parent of UI component at mouse location
|
||||
- press <kbd>Shift</kbd> key to decrease inspection level
|
||||
|
||||
|
||||
### UI Defaults Inspector
|
||||
|
||||
A simple UI defaults inspector that shows a window with all UI defaults used in
|
||||
current theme (look and feel), which may be useful while developing an
|
||||
application. Should be not installed in released applications.
|
||||
|
||||
Once installed with following code (e.g. in method `main`), it can be activated
|
||||
with the given keystroke:
|
||||
|
||||
~~~java
|
||||
FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||
~~~
|
||||
|
||||

|
||||
|
||||
@@ -22,7 +22,7 @@ plugins {
|
||||
|
||||
dependencies {
|
||||
implementation( project( ":flatlaf-core" ) )
|
||||
implementation( "com.formdev:svgSalamander:1.1.2.1" )
|
||||
implementation( "com.formdev:svgSalamander:1.1.2.3" )
|
||||
}
|
||||
|
||||
flatlafModuleInfo {
|
||||
|
||||
@@ -19,10 +19,10 @@ package com.formdev.flatlaf.extras;
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.Window;
|
||||
import java.util.HashMap;
|
||||
import java.awt.image.VolatileImage;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLayeredPane;
|
||||
import javax.swing.RootPaneContainer;
|
||||
@@ -56,8 +56,10 @@ public class FlatAnimatedLafChange
|
||||
public static int resolution = 40;
|
||||
|
||||
private static Animator animator;
|
||||
private static final Map<JLayeredPane, JComponent> map = new HashMap<>();
|
||||
private static final Map<JLayeredPane, JComponent> oldUIsnapshots = new WeakHashMap<>();
|
||||
private static final Map<JLayeredPane, JComponent> newUIsnapshots = new WeakHashMap<>();
|
||||
private static float alpha;
|
||||
private static boolean inShowSnapshot;
|
||||
|
||||
/**
|
||||
* Create a snapshot of the old UI and shows it on top of the UI.
|
||||
@@ -73,16 +75,27 @@ public class FlatAnimatedLafChange
|
||||
|
||||
alpha = 1;
|
||||
|
||||
// show snapshot of old UI
|
||||
showSnapshot( true, oldUIsnapshots );
|
||||
}
|
||||
|
||||
private static void showSnapshot( boolean useAlpha, Map<JLayeredPane, JComponent> map ) {
|
||||
inShowSnapshot = true;
|
||||
|
||||
// create snapshots for all shown windows
|
||||
Window[] windows = Window.getWindows();
|
||||
for( Window window : windows ) {
|
||||
if( !(window instanceof RootPaneContainer) || !window.isShowing() )
|
||||
continue;
|
||||
|
||||
JLayeredPane layeredPane = ((RootPaneContainer)window).getLayeredPane();
|
||||
// create snapshot image
|
||||
// (using volatile image to have correct sub-pixel text rendering on Java 9+)
|
||||
VolatileImage snapshot = window.createVolatileImage( window.getWidth(), window.getHeight() );
|
||||
if( snapshot == null )
|
||||
continue;
|
||||
|
||||
// create snapshot image of layered pane
|
||||
Image snapshot = window.createImage( window.getWidth(), window.getHeight() );
|
||||
// paint window to snapshot image
|
||||
JLayeredPane layeredPane = ((RootPaneContainer)window).getLayeredPane();
|
||||
layeredPane.paint( snapshot.getGraphics() );
|
||||
|
||||
// create snapshot layer, which is added to layered pane and paints
|
||||
@@ -90,16 +103,32 @@ public class FlatAnimatedLafChange
|
||||
JComponent snapshotLayer = new JComponent() {
|
||||
@Override
|
||||
public void paint( Graphics g ) {
|
||||
((Graphics2D)g).setComposite( AlphaComposite.getInstance( AlphaComposite.SRC_OVER, alpha ) );
|
||||
if( inShowSnapshot || snapshot.contentsLost() )
|
||||
return;
|
||||
|
||||
if( useAlpha )
|
||||
((Graphics2D)g).setComposite( AlphaComposite.getInstance( AlphaComposite.SRC_OVER, alpha ) );
|
||||
g.drawImage( snapshot, 0, 0, null );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeNotify() {
|
||||
super.removeNotify();
|
||||
|
||||
// release system resources used by volatile image
|
||||
snapshot.flush();
|
||||
}
|
||||
};
|
||||
if( !useAlpha )
|
||||
snapshotLayer.setOpaque( true );
|
||||
snapshotLayer.setSize( layeredPane.getSize() );
|
||||
|
||||
// add image layer to layered pane
|
||||
layeredPane.add( snapshotLayer, JLayeredPane.DRAG_LAYER );
|
||||
layeredPane.add( snapshotLayer, Integer.valueOf( JLayeredPane.DRAG_LAYER + (useAlpha ? 2 : 1) ) );
|
||||
map.put( layeredPane, snapshotLayer );
|
||||
}
|
||||
|
||||
inShowSnapshot = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -111,9 +140,12 @@ public class FlatAnimatedLafChange
|
||||
if( !FlatSystemProperties.getBoolean( "flatlaf.animatedLafChange", true ) )
|
||||
return;
|
||||
|
||||
if( map.isEmpty() )
|
||||
if( oldUIsnapshots.isEmpty() )
|
||||
return;
|
||||
|
||||
// show snapshot of new UI
|
||||
showSnapshot( false, newUIsnapshots );
|
||||
|
||||
// create animator
|
||||
animator = new Animator( duration, fraction -> {
|
||||
if( fraction < 0.1 || fraction > 0.9 )
|
||||
@@ -122,7 +154,7 @@ public class FlatAnimatedLafChange
|
||||
alpha = 1f - fraction;
|
||||
|
||||
// repaint snapshots
|
||||
for( Map.Entry<JLayeredPane, JComponent> e : map.entrySet() ) {
|
||||
for( Map.Entry<JLayeredPane, JComponent> e : oldUIsnapshots.entrySet() ) {
|
||||
if( e.getKey().isShowing() )
|
||||
e.getValue().repaint();
|
||||
}
|
||||
@@ -136,6 +168,11 @@ public class FlatAnimatedLafChange
|
||||
}
|
||||
|
||||
private static void hideSnapshot() {
|
||||
hideSnapshot( oldUIsnapshots );
|
||||
hideSnapshot( newUIsnapshots );
|
||||
}
|
||||
|
||||
private static void hideSnapshot( Map<JLayeredPane, JComponent> map ) {
|
||||
// remove snapshots
|
||||
for( Map.Entry<JLayeredPane, JComponent> e : map.entrySet() ) {
|
||||
e.getKey().remove( e.getValue() );
|
||||
|
||||
@@ -158,10 +158,20 @@ public class FlatInspector
|
||||
} else if( id == KeyEvent.KEY_RELEASED && wasCtrlOrShiftKeyPressed ) {
|
||||
if( keyCode == KeyEvent.VK_CONTROL ) {
|
||||
inspectParentLevel++;
|
||||
inspect( lastX, lastY );
|
||||
int parentLevel = inspect( lastX, lastY );
|
||||
|
||||
// limit level
|
||||
if( inspectParentLevel > parentLevel )
|
||||
inspectParentLevel = parentLevel;
|
||||
} else if( keyCode == KeyEvent.VK_SHIFT && inspectParentLevel > 0 ) {
|
||||
inspectParentLevel--;
|
||||
inspect( lastX, lastY );
|
||||
int parentLevel = inspect( lastX, lastY );
|
||||
|
||||
// decrease level
|
||||
if( inspectParentLevel > parentLevel ) {
|
||||
inspectParentLevel = Math.max( parentLevel - 1, 0 );
|
||||
inspect( lastX, lastY );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,24 +258,28 @@ public class FlatInspector
|
||||
} );
|
||||
}
|
||||
|
||||
private void inspect( int x, int y ) {
|
||||
private int inspect( int x, int y ) {
|
||||
Point pt = SwingUtilities.convertPoint( rootPane.getGlassPane(), x, y, rootPane );
|
||||
Component c = getDeepestComponentAt( rootPane, pt.x, pt.y );
|
||||
int parentLevel = 0;
|
||||
for( int i = 0; i < inspectParentLevel && c != null; i++ ) {
|
||||
Container parent = c.getParent();
|
||||
if( parent == null )
|
||||
break;
|
||||
|
||||
c = parent;
|
||||
parentLevel++;
|
||||
}
|
||||
|
||||
if( c == lastComponent )
|
||||
return;
|
||||
return parentLevel;
|
||||
|
||||
lastComponent = c;
|
||||
|
||||
highlight( c );
|
||||
showToolTip( c, x, y );
|
||||
showToolTip( c, x, y, parentLevel );
|
||||
|
||||
return parentLevel;
|
||||
}
|
||||
|
||||
private Component getDeepestComponentAt( Component parent, int x, int y ) {
|
||||
@@ -338,7 +352,7 @@ public class FlatInspector
|
||||
return c;
|
||||
}
|
||||
|
||||
private void showToolTip( Component c, int x, int y ) {
|
||||
private void showToolTip( Component c, int x, int y, int parentLevel ) {
|
||||
if( c == null ) {
|
||||
if( tip != null )
|
||||
tip.setVisible( false );
|
||||
@@ -356,7 +370,7 @@ public class FlatInspector
|
||||
} else
|
||||
tip.setVisible( true );
|
||||
|
||||
tip.setTipText( buildToolTipText( c ) );
|
||||
tip.setTipText( buildToolTipText( c, parentLevel ) );
|
||||
|
||||
int tx = x + UIScale.scale( 8 );
|
||||
int ty = y + UIScale.scale( 16 );
|
||||
@@ -377,7 +391,7 @@ public class FlatInspector
|
||||
tip.repaint();
|
||||
}
|
||||
|
||||
private String buildToolTipText( Component c ) {
|
||||
private static String buildToolTipText( Component c, int parentLevel ) {
|
||||
String name = c.getClass().getName();
|
||||
name = name.substring( name.lastIndexOf( '.' ) + 1 );
|
||||
|
||||
@@ -441,10 +455,10 @@ public class FlatInspector
|
||||
text += "Left-to-right: " + c.getComponentOrientation().isLeftToRight() + '\n';
|
||||
text += "Parent: " + (c.getParent() != null ? c.getParent().getClass().getName() : "null");
|
||||
|
||||
if( inspectParentLevel > 0 )
|
||||
text += "\n\nParent level: " + inspectParentLevel;
|
||||
if( parentLevel > 0 )
|
||||
text += "\n\nParent level: " + parentLevel;
|
||||
|
||||
if( inspectParentLevel > 0 )
|
||||
if( parentLevel > 0 )
|
||||
text += "\n(press Ctrl/Shift to increase/decrease level)";
|
||||
else
|
||||
text += "\n\n(press Ctrl key to inspect parent)";
|
||||
|
||||
@@ -50,11 +50,18 @@ public class FlatSVGIcon
|
||||
private static final SVGUniverse svgUniverse = new SVGUniverse();
|
||||
|
||||
private final String name;
|
||||
private final ClassLoader classLoader;
|
||||
|
||||
private SVGDiagram diagram;
|
||||
private boolean dark;
|
||||
|
||||
public FlatSVGIcon( String name ) {
|
||||
this( name, null );
|
||||
}
|
||||
|
||||
public FlatSVGIcon( String name, ClassLoader classLoader ) {
|
||||
this.name = name;
|
||||
this.classLoader = classLoader;
|
||||
}
|
||||
|
||||
private void update() {
|
||||
@@ -79,7 +86,14 @@ public class FlatSVGIcon
|
||||
int dotIndex = name.lastIndexOf( '.' );
|
||||
name = name.substring( 0, dotIndex ) + "_dark" + name.substring( dotIndex );
|
||||
}
|
||||
return FlatSVGIcon.class.getClassLoader().getResource( name );
|
||||
|
||||
ClassLoader cl = (classLoader != null) ? classLoader : FlatSVGIcon.class.getClassLoader();
|
||||
return cl.getResource( name );
|
||||
}
|
||||
|
||||
public boolean hasFound() {
|
||||
update();
|
||||
return diagram != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,911 @@
|
||||
/*
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.extras;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.prefs.Preferences;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
import javax.swing.table.TableColumnModel;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
import com.formdev.flatlaf.icons.FlatAbstractIcon;
|
||||
import com.formdev.flatlaf.ui.FlatBorder;
|
||||
import com.formdev.flatlaf.ui.FlatEmptyBorder;
|
||||
import com.formdev.flatlaf.ui.FlatLineBorder;
|
||||
import com.formdev.flatlaf.ui.FlatMarginBorder;
|
||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||
import com.formdev.flatlaf.util.GrayFilter;
|
||||
import com.formdev.flatlaf.util.HSLColor;
|
||||
import com.formdev.flatlaf.util.ScaledEmptyBorder;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
|
||||
/**
|
||||
* A simple UI defaults inspector that shows a window with all UI defaults used
|
||||
* in current look and feel.
|
||||
* <p>
|
||||
* To use it in an application install it with:
|
||||
* <pre>
|
||||
* FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||
* </pre>
|
||||
* This can be done e.g. in the main() method and allows enabling (and disabling)
|
||||
* the UI defaults inspector with the given keystroke.
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class FlatUIDefaultsInspector
|
||||
{
|
||||
private static final int KEY_MODIFIERS_MASK = InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK | InputEvent.ALT_DOWN_MASK | InputEvent.META_DOWN_MASK;
|
||||
|
||||
private static FlatUIDefaultsInspector inspector;
|
||||
|
||||
private final String title;
|
||||
private final PropertyChangeListener lafListener = this::lafChanged;
|
||||
private final PropertyChangeListener lafDefaultsListener = this::lafDefaultsChanged;
|
||||
private boolean refreshPending;
|
||||
|
||||
/**
|
||||
* Installs a key listener into the application that allows enabling and disabling
|
||||
* the UI inspector with the given keystroke (e.g. "ctrl shift alt Y").
|
||||
*/
|
||||
public static void install( String activationKeys ) {
|
||||
KeyStroke keyStroke = KeyStroke.getKeyStroke( activationKeys );
|
||||
Toolkit.getDefaultToolkit().addAWTEventListener( e -> {
|
||||
if( e.getID() == KeyEvent.KEY_RELEASED &&
|
||||
((KeyEvent)e).getKeyCode() == keyStroke.getKeyCode() &&
|
||||
(((KeyEvent)e).getModifiersEx() & KEY_MODIFIERS_MASK) == (keyStroke.getModifiers() & KEY_MODIFIERS_MASK) )
|
||||
{
|
||||
show();
|
||||
}
|
||||
}, AWTEvent.KEY_EVENT_MASK );
|
||||
}
|
||||
|
||||
public static void show() {
|
||||
if( inspector != null ) {
|
||||
inspector.ensureOnScreen();
|
||||
inspector.frame.toFront();
|
||||
return;
|
||||
}
|
||||
|
||||
inspector = new FlatUIDefaultsInspector();
|
||||
inspector.frame.setVisible( true );
|
||||
}
|
||||
|
||||
public static void hide() {
|
||||
if( inspector != null )
|
||||
inspector.frame.dispose();
|
||||
}
|
||||
|
||||
private FlatUIDefaultsInspector() {
|
||||
initComponents();
|
||||
|
||||
title = frame.getTitle();
|
||||
updateWindowTitle();
|
||||
|
||||
panel.setBorder( new ScaledEmptyBorder( 10, 10, 10, 10 ) );
|
||||
filterPanel.setBorder( new ScaledEmptyBorder( 0, 0, 10, 0 ) );
|
||||
|
||||
// initialize filter
|
||||
filterField.getDocument().addDocumentListener( new DocumentListener() {
|
||||
@Override
|
||||
public void removeUpdate( DocumentEvent e ) {
|
||||
filterChanged();
|
||||
}
|
||||
@Override
|
||||
public void insertUpdate( DocumentEvent e ) {
|
||||
filterChanged();
|
||||
}
|
||||
@Override
|
||||
public void changedUpdate( DocumentEvent e ) {
|
||||
filterChanged();
|
||||
}
|
||||
} );
|
||||
delegateKey( KeyEvent.VK_UP, "unitScrollUp" );
|
||||
delegateKey( KeyEvent.VK_DOWN, "unitScrollDown" );
|
||||
delegateKey( KeyEvent.VK_PAGE_UP, "scrollUp" );
|
||||
delegateKey( KeyEvent.VK_PAGE_DOWN, "scrollDown" );
|
||||
|
||||
// initialize table
|
||||
table.setModel( new ItemsTableModel( getUIDefaultsItems() ) );
|
||||
table.setDefaultRenderer( String.class, new KeyRenderer() );
|
||||
table.setDefaultRenderer( Item.class, new ValueRenderer() );
|
||||
table.getRowSorter().setSortKeys( Collections.singletonList(
|
||||
new RowSorter.SortKey( 0, SortOrder.ASCENDING ) ) );
|
||||
|
||||
// restore window bounds
|
||||
Preferences prefs = getPrefs();
|
||||
int x = prefs.getInt( "x", -1 );
|
||||
int y = prefs.getInt( "y", -1 );
|
||||
int width = prefs.getInt( "width", UIScale.scale( 600 ) );
|
||||
int height = prefs.getInt( "height", UIScale.scale( 800 ) );
|
||||
frame.setSize( width, height );
|
||||
if( x != -1 && y != -1 ) {
|
||||
frame.setLocation( x, y );
|
||||
ensureOnScreen();
|
||||
} else
|
||||
frame.setLocationRelativeTo( null );
|
||||
|
||||
// restore column widths
|
||||
TableColumnModel columnModel = table.getColumnModel();
|
||||
columnModel.getColumn( 0 ).setPreferredWidth( prefs.getInt( "column1width", 100 ) );
|
||||
columnModel.getColumn( 1 ).setPreferredWidth( prefs.getInt( "column2width", 100 ) );
|
||||
|
||||
// restore filter
|
||||
String filter = prefs.get( "filter", "" );
|
||||
String valueType = prefs.get( "valueType", null );
|
||||
if( filter != null && !filter.isEmpty() )
|
||||
filterField.setText( filter );
|
||||
if( valueType != null )
|
||||
valueTypeField.setSelectedItem( valueType );
|
||||
|
||||
UIManager.addPropertyChangeListener( lafListener );
|
||||
UIManager.getDefaults().addPropertyChangeListener( lafDefaultsListener );
|
||||
|
||||
// register F5 key to refresh
|
||||
((JComponent)frame.getContentPane()).registerKeyboardAction(
|
||||
e -> refresh(),
|
||||
KeyStroke.getKeyStroke( KeyEvent.VK_F5, 0, false ),
|
||||
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
|
||||
|
||||
// register ESC key to close frame
|
||||
((JComponent)frame.getContentPane()).registerKeyboardAction(
|
||||
e -> frame.dispose(),
|
||||
KeyStroke.getKeyStroke( KeyEvent.VK_ESCAPE, 0, false ),
|
||||
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
|
||||
}
|
||||
|
||||
private void delegateKey( int keyCode, String actionKey ) {
|
||||
KeyStroke keyStroke = KeyStroke.getKeyStroke( keyCode, 0 );
|
||||
String actionMapKey = "delegate-" + actionKey;
|
||||
|
||||
filterField.getInputMap().put( keyStroke, actionMapKey );
|
||||
filterField.getActionMap().put( actionMapKey, new AbstractAction() {
|
||||
@Override
|
||||
public void actionPerformed( ActionEvent e ) {
|
||||
Action action = scrollPane.getActionMap().get( actionKey );
|
||||
if( action != null ) {
|
||||
action.actionPerformed( new ActionEvent( scrollPane,
|
||||
e.getID(), actionKey, e.getWhen(), e.getModifiers() ) );
|
||||
}
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
private void ensureOnScreen() {
|
||||
Rectangle frameBounds = frame.getBounds();
|
||||
boolean onScreen = false;
|
||||
for( GraphicsDevice screen : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() ) {
|
||||
GraphicsConfiguration gc = screen.getDefaultConfiguration();
|
||||
Rectangle screenBounds = FlatUIUtils.subtractInsets( gc.getBounds(),
|
||||
Toolkit.getDefaultToolkit().getScreenInsets( gc ) );
|
||||
if( frameBounds.intersects( screenBounds ) ) {
|
||||
onScreen = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !onScreen )
|
||||
frame.setLocationRelativeTo( null );
|
||||
}
|
||||
|
||||
void lafChanged( PropertyChangeEvent e ) {
|
||||
if( "lookAndFeel".equals( e.getPropertyName() ) )
|
||||
refresh();
|
||||
}
|
||||
|
||||
void lafDefaultsChanged( PropertyChangeEvent e ) {
|
||||
if( refreshPending )
|
||||
return;
|
||||
|
||||
refreshPending = true;
|
||||
EventQueue.invokeLater( () -> {
|
||||
refresh();
|
||||
refreshPending = false;
|
||||
} );
|
||||
}
|
||||
|
||||
void refresh() {
|
||||
ItemsTableModel model = (ItemsTableModel) table.getModel();
|
||||
model.setItems( getUIDefaultsItems() );
|
||||
|
||||
updateWindowTitle();
|
||||
}
|
||||
|
||||
private Item[] getUIDefaultsItems() {
|
||||
UIDefaults defaults = UIManager.getDefaults();
|
||||
UIDefaults lafDefaults = UIManager.getLookAndFeelDefaults();
|
||||
|
||||
Set<Entry<Object, Object>> defaultsSet = defaults.entrySet();
|
||||
ArrayList<Item> items = new ArrayList<>( defaultsSet.size() );
|
||||
HashSet<Object> keys = new HashSet<>( defaultsSet.size() );
|
||||
for( Entry<Object,Object> e : defaultsSet ) {
|
||||
Object key = e.getKey();
|
||||
|
||||
// ignore non-string keys
|
||||
if( !(key instanceof String) )
|
||||
continue;
|
||||
|
||||
// ignore values of type Class
|
||||
Object value = defaults.get( key );
|
||||
if( value instanceof Class )
|
||||
continue;
|
||||
|
||||
// avoid duplicate keys if UIManager.put(key,value) was used to override a LaF value
|
||||
if( !keys.add( key ) )
|
||||
continue;
|
||||
|
||||
// check whether key was overridden using UIManager.put(key,value)
|
||||
Object lafValue = null;
|
||||
if( defaults.containsKey( key ) )
|
||||
lafValue = lafDefaults.get( key );
|
||||
|
||||
// add item
|
||||
items.add( new Item( String.valueOf( key ), value, lafValue ) );
|
||||
}
|
||||
|
||||
return items.toArray( new Item[items.size()] );
|
||||
}
|
||||
|
||||
private void updateWindowTitle() {
|
||||
frame.setTitle( title + " - " + UIManager.getLookAndFeel().getName() );
|
||||
}
|
||||
|
||||
private void saveWindowBounds() {
|
||||
Preferences prefs = getPrefs();
|
||||
prefs.putInt( "x", frame.getX() );
|
||||
prefs.putInt( "y", frame.getY() );
|
||||
prefs.putInt( "width", frame.getWidth() );
|
||||
prefs.putInt( "height", frame.getHeight() );
|
||||
|
||||
TableColumnModel columnModel = table.getColumnModel();
|
||||
prefs.putInt( "column1width", columnModel.getColumn( 0 ).getWidth() );
|
||||
prefs.putInt( "column2width", columnModel.getColumn( 1 ).getWidth() );
|
||||
}
|
||||
|
||||
private Preferences getPrefs() {
|
||||
return Preferences.userRoot().node( "flatlaf-uidefaults-inspector" );
|
||||
}
|
||||
|
||||
private void windowClosed() {
|
||||
UIManager.removePropertyChangeListener( lafListener );
|
||||
UIManager.getDefaults().removePropertyChangeListener( lafDefaultsListener );
|
||||
|
||||
inspector = null;
|
||||
}
|
||||
|
||||
private void filterChanged() {
|
||||
String filter = filterField.getText().trim();
|
||||
String valueType = (String) valueTypeField.getSelectedItem();
|
||||
|
||||
// split filter string on space characters
|
||||
String[] filters = filter.split( " +" );
|
||||
for( int i = 0; i < filters.length; i++ )
|
||||
filters[i] = filters[i].toLowerCase( Locale.ENGLISH );
|
||||
|
||||
ItemsTableModel model = (ItemsTableModel) table.getModel();
|
||||
model.setFilter( item -> {
|
||||
if( valueType != null &&
|
||||
!valueType.equals( "(any)" ) &&
|
||||
!valueType.equals( typeOfValue( item.value ) ) )
|
||||
return false;
|
||||
|
||||
String lkey = item.key.toLowerCase( Locale.ENGLISH );
|
||||
String lvalue = item.getValueAsString().toLowerCase( Locale.ENGLISH );
|
||||
for( String f : filters ) {
|
||||
if( lkey.contains( f ) || lvalue.contains( f ) )
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} );
|
||||
|
||||
Preferences prefs = getPrefs();
|
||||
prefs.put( "filter", filter );
|
||||
prefs.put( "valueType", valueType );
|
||||
}
|
||||
|
||||
private String typeOfValue( Object value ) {
|
||||
if( value instanceof Boolean )
|
||||
return "Boolean";
|
||||
if( value instanceof Border )
|
||||
return "Border";
|
||||
if( value instanceof Color )
|
||||
return "Color";
|
||||
if( value instanceof Dimension )
|
||||
return "Dimension";
|
||||
if( value instanceof Float )
|
||||
return "Float";
|
||||
if( value instanceof Font )
|
||||
return "Font";
|
||||
if( value instanceof Icon )
|
||||
return "Icon";
|
||||
if( value instanceof Insets )
|
||||
return "Insets";
|
||||
if( value instanceof Integer )
|
||||
return "Integer";
|
||||
if( value instanceof String )
|
||||
return "String";
|
||||
return "(other)";
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
frame = new JFrame();
|
||||
panel = new JPanel();
|
||||
filterPanel = new JPanel();
|
||||
flterLabel = new JLabel();
|
||||
filterField = new JTextField();
|
||||
valueTypeLabel = new JLabel();
|
||||
valueTypeField = new JComboBox<>();
|
||||
scrollPane = new JScrollPane();
|
||||
table = new JTable();
|
||||
|
||||
//======== frame ========
|
||||
{
|
||||
frame.setTitle("UI Defaults Inspector");
|
||||
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||
frame.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosed(WindowEvent e) {
|
||||
FlatUIDefaultsInspector.this.windowClosed();
|
||||
}
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
saveWindowBounds();
|
||||
}
|
||||
@Override
|
||||
public void windowDeactivated(WindowEvent e) {
|
||||
saveWindowBounds();
|
||||
}
|
||||
});
|
||||
Container frameContentPane = frame.getContentPane();
|
||||
frameContentPane.setLayout(new BorderLayout());
|
||||
|
||||
//======== panel ========
|
||||
{
|
||||
panel.setLayout(new BorderLayout());
|
||||
|
||||
//======== filterPanel ========
|
||||
{
|
||||
filterPanel.setLayout(new GridBagLayout());
|
||||
((GridBagLayout)filterPanel.getLayout()).columnWidths = new int[] {0, 0, 0, 0, 0};
|
||||
((GridBagLayout)filterPanel.getLayout()).rowHeights = new int[] {0, 0};
|
||||
((GridBagLayout)filterPanel.getLayout()).columnWeights = new double[] {0.0, 1.0, 0.0, 0.0, 1.0E-4};
|
||||
((GridBagLayout)filterPanel.getLayout()).rowWeights = new double[] {0.0, 1.0E-4};
|
||||
|
||||
//---- flterLabel ----
|
||||
flterLabel.setText("Filter:");
|
||||
flterLabel.setLabelFor(filterField);
|
||||
flterLabel.setDisplayedMnemonic('F');
|
||||
filterPanel.add(flterLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(0, 0, 0, 10), 0, 0));
|
||||
|
||||
//---- filterField ----
|
||||
filterField.putClientProperty("JTextField.placeholderText", "enter one or more filter strings, separated by space characters");
|
||||
filterPanel.add(filterField, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(0, 0, 0, 10), 0, 0));
|
||||
|
||||
//---- valueTypeLabel ----
|
||||
valueTypeLabel.setText("Value Type:");
|
||||
valueTypeLabel.setLabelFor(valueTypeField);
|
||||
valueTypeLabel.setDisplayedMnemonic('T');
|
||||
filterPanel.add(valueTypeLabel, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(0, 0, 0, 10), 0, 0));
|
||||
|
||||
//---- valueTypeField ----
|
||||
valueTypeField.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||
"(any)",
|
||||
"Boolean",
|
||||
"Border",
|
||||
"Color",
|
||||
"Dimension",
|
||||
"Float",
|
||||
"Font",
|
||||
"Icon",
|
||||
"Insets",
|
||||
"Integer",
|
||||
"String",
|
||||
"(other)"
|
||||
}));
|
||||
valueTypeField.addActionListener(e -> filterChanged());
|
||||
filterPanel.add(valueTypeField, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(0, 0, 0, 0), 0, 0));
|
||||
}
|
||||
panel.add(filterPanel, BorderLayout.NORTH);
|
||||
|
||||
//======== scrollPane ========
|
||||
{
|
||||
|
||||
//---- table ----
|
||||
table.setAutoCreateRowSorter(true);
|
||||
scrollPane.setViewportView(table);
|
||||
}
|
||||
panel.add(scrollPane, BorderLayout.CENTER);
|
||||
}
|
||||
frameContentPane.add(panel, BorderLayout.CENTER);
|
||||
}
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
private JFrame frame;
|
||||
private JPanel panel;
|
||||
private JPanel filterPanel;
|
||||
private JLabel flterLabel;
|
||||
private JTextField filterField;
|
||||
private JLabel valueTypeLabel;
|
||||
private JComboBox<String> valueTypeField;
|
||||
private JScrollPane scrollPane;
|
||||
private JTable table;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
|
||||
//---- class Item ---------------------------------------------------------
|
||||
|
||||
private static class Item {
|
||||
final String key;
|
||||
final Object value;
|
||||
final Object lafValue;
|
||||
|
||||
private String valueStr;
|
||||
|
||||
Item( String key, Object value, Object lafValue ) {
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
this.lafValue = lafValue;
|
||||
}
|
||||
|
||||
String getValueAsString() {
|
||||
if( valueStr == null )
|
||||
valueStr = valueAsString( value );
|
||||
return valueStr;
|
||||
}
|
||||
|
||||
static String valueAsString( Object value ) {
|
||||
if( value instanceof Color ) {
|
||||
Color color = (Color) value;
|
||||
HSLColor hslColor = new HSLColor( color );
|
||||
if( color.getAlpha() == 255 ) {
|
||||
return String.format( "%s rgb(%d, %d, %d) hsl(%d, %d, %d)",
|
||||
color2hex( color ),
|
||||
color.getRed(), color.getGreen(), color.getBlue(),
|
||||
(int) hslColor.getHue(), (int) hslColor.getSaturation(),
|
||||
(int) hslColor.getLuminance() );
|
||||
} else {
|
||||
return String.format( "%s rgba(%d, %d, %d, %d) hsla(%d, %d, %d, %d)",
|
||||
color2hex( color ),
|
||||
color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha(),
|
||||
(int) hslColor.getHue(), (int) hslColor.getSaturation(),
|
||||
(int) hslColor.getLuminance(), (int) (hslColor.getAlpha() * 100) );
|
||||
}
|
||||
} else if( value instanceof Insets ) {
|
||||
Insets insets = (Insets) value;
|
||||
return insets.top + "," + insets.left + "," + insets.bottom + "," + insets.right;
|
||||
} else if( value instanceof Dimension ) {
|
||||
Dimension dim = (Dimension) value;
|
||||
return dim.width + "," + dim.height;
|
||||
} else if( value instanceof Font ) {
|
||||
Font font = (Font) value;
|
||||
String s = font.getFamily() + " " + font.getSize();
|
||||
if( font.isBold() )
|
||||
s += " bold";
|
||||
if( font.isItalic() )
|
||||
s += " italic";
|
||||
return s;
|
||||
} else if( value instanceof Icon ) {
|
||||
Icon icon = (Icon) value;
|
||||
return icon.getIconWidth() + "x" + icon.getIconHeight() + " " + icon.getClass().getName();
|
||||
} else if( value instanceof Border ) {
|
||||
Border border = (Border) value;
|
||||
if( border instanceof FlatLineBorder ) {
|
||||
FlatLineBorder lineBorder = (FlatLineBorder) border;
|
||||
return valueAsString( lineBorder.getUnscaledBorderInsets() )
|
||||
+ " " + Item.color2hex( lineBorder.getLineColor() )
|
||||
+ " " + lineBorder.getLineThickness()
|
||||
+ " " + border.getClass().getName();
|
||||
} else if( border instanceof EmptyBorder ) {
|
||||
Insets insets = (border instanceof FlatEmptyBorder)
|
||||
? ((FlatEmptyBorder)border).getUnscaledBorderInsets()
|
||||
: ((EmptyBorder)border).getBorderInsets();
|
||||
return valueAsString( insets ) + " " + border.getClass().getName();
|
||||
} else if( border instanceof FlatBorder || border instanceof FlatMarginBorder )
|
||||
return border.getClass().getName();
|
||||
else
|
||||
return String.valueOf( value );
|
||||
} else if( value instanceof GrayFilter ) {
|
||||
GrayFilter grayFilter = (GrayFilter) value;
|
||||
return grayFilter.getBrightness() + "," + grayFilter.getContrast()
|
||||
+ " " + grayFilter.getAlpha() + " " + grayFilter.getClass().getName();
|
||||
} else if( value instanceof ActionMap ) {
|
||||
ActionMap actionMap = (ActionMap) value;
|
||||
return "ActionMap (" + actionMap.size() + ")";
|
||||
} else if( value instanceof InputMap ) {
|
||||
InputMap inputMap = (InputMap) value;
|
||||
return "InputMap (" + inputMap.size() + ")";
|
||||
} else if( value instanceof Object[] )
|
||||
return Arrays.toString( (Object[]) value );
|
||||
else if( value instanceof int[] )
|
||||
return Arrays.toString( (int[]) value );
|
||||
else
|
||||
return String.valueOf( value );
|
||||
}
|
||||
|
||||
private static String color2hex( Color color ) {
|
||||
int rgb = color.getRGB();
|
||||
boolean hasAlpha = color.getAlpha() != 255;
|
||||
|
||||
boolean useShortFormat =
|
||||
(rgb & 0xf0000000) == (rgb & 0xf000000) << 4 &&
|
||||
(rgb & 0xf00000) == (rgb & 0xf0000) << 4 &&
|
||||
(rgb & 0xf000) == (rgb & 0xf00) << 4 &&
|
||||
(rgb & 0xf0) == (rgb & 0xf) << 4;
|
||||
|
||||
if( useShortFormat ) {
|
||||
int srgb = ((rgb & 0xf0000) >> 8) | ((rgb & 0xf00) >> 4) | (rgb & 0xf);
|
||||
return String.format( hasAlpha ? "#%03X%X" : "#%03X", srgb, (rgb >> 24) & 0xf );
|
||||
} else
|
||||
return String.format( hasAlpha ? "#%06X%02X" : "#%06X", rgb & 0xffffff, (rgb >> 24) & 0xff );
|
||||
}
|
||||
|
||||
// used for sorting by value
|
||||
@Override
|
||||
public String toString() {
|
||||
return getValueAsString();
|
||||
}
|
||||
}
|
||||
|
||||
//---- class ItemsTableModel ----------------------------------------------
|
||||
|
||||
private static class ItemsTableModel
|
||||
extends AbstractTableModel
|
||||
{
|
||||
private Item[] allItems;
|
||||
private Item[] items;
|
||||
private Predicate<Item> filter;
|
||||
|
||||
ItemsTableModel( Item[] items ) {
|
||||
this.allItems = this.items = items;
|
||||
}
|
||||
|
||||
void setItems( Item[] items ) {
|
||||
this.allItems = this.items = items;
|
||||
setFilter( filter );
|
||||
}
|
||||
|
||||
void setFilter( Predicate<Item> filter ) {
|
||||
this.filter = filter;
|
||||
|
||||
if( filter != null ) {
|
||||
ArrayList<Item> list = new ArrayList<>( allItems.length );
|
||||
for( Item item : allItems ) {
|
||||
if( filter.test( item ) )
|
||||
list.add( item );
|
||||
}
|
||||
items = list.toArray( new Item[list.size()] );
|
||||
} else
|
||||
items = allItems;
|
||||
|
||||
fireTableDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRowCount() {
|
||||
return items.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumnCount() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getColumnName( int columnIndex ) {
|
||||
switch( columnIndex ) {
|
||||
case 0: return "Name";
|
||||
case 1: return "Value";
|
||||
}
|
||||
return super.getColumnName( columnIndex );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getColumnClass( int columnIndex ) {
|
||||
switch( columnIndex ) {
|
||||
case 0: return String.class;
|
||||
case 1: return Item.class;
|
||||
}
|
||||
return super.getColumnClass( columnIndex );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getValueAt( int rowIndex, int columnIndex ) {
|
||||
Item item = items[rowIndex];
|
||||
switch( columnIndex ) {
|
||||
case 0: return item.key;
|
||||
case 1: return item;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
//---- class Renderer -----------------------------------------------------
|
||||
|
||||
private static class Renderer
|
||||
extends DefaultTableCellRenderer
|
||||
{
|
||||
protected boolean selected;
|
||||
protected boolean first;
|
||||
|
||||
protected void init( JTable table, String key, boolean selected, int row ) {
|
||||
this.selected = selected;
|
||||
|
||||
first = false;
|
||||
if( row > 0 ) {
|
||||
String previousKey = (String) table.getValueAt( row - 1, 0 );
|
||||
int dot = key.indexOf( '.' );
|
||||
if( dot > 0 ) {
|
||||
String prefix = key.substring( 0, dot + 1 );
|
||||
first = !previousKey.startsWith( prefix );
|
||||
} else
|
||||
first = previousKey.indexOf( '.' ) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
protected void paintSeparator( Graphics g ) {
|
||||
if( first && !selected ) {
|
||||
g.setColor( FlatLaf.isLafDark() ? Color.gray : Color.lightGray );
|
||||
g.fillRect( 0, 0, getWidth() - 1, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
protected String layoutLabel( FontMetrics fm, String text, Rectangle textR ) {
|
||||
int width = getWidth();
|
||||
int height = getHeight();
|
||||
Insets insets = getInsets();
|
||||
|
||||
Rectangle viewR = new Rectangle( insets.left, insets.top,
|
||||
width - (insets.left + insets.right),
|
||||
height - (insets.top + insets.bottom) );
|
||||
Rectangle iconR = new Rectangle();
|
||||
|
||||
return SwingUtilities.layoutCompoundLabel( this, fm, text, null,
|
||||
getVerticalAlignment(), getHorizontalAlignment(),
|
||||
getVerticalTextPosition(), getHorizontalTextPosition(),
|
||||
viewR, iconR, textR, getIconTextGap() );
|
||||
}
|
||||
}
|
||||
|
||||
//---- class KeyRenderer --------------------------------------------------
|
||||
|
||||
private static class KeyRenderer
|
||||
extends Renderer
|
||||
{
|
||||
private String key;
|
||||
private boolean isOverridden;
|
||||
private Icon overriddenIcon;
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent( JTable table, Object value,
|
||||
boolean isSelected, boolean hasFocus, int row, int column )
|
||||
{
|
||||
key = (String) value;
|
||||
init( table, key, isSelected, row );
|
||||
|
||||
Item item = (Item) table.getValueAt( row, 1 );
|
||||
isOverridden = (item.lafValue != null);
|
||||
|
||||
// set tooltip
|
||||
String toolTipText = key;
|
||||
if( isOverridden )
|
||||
toolTipText += " \n\nLaF UI default value was overridden with UIManager.put(key,value).";
|
||||
setToolTipText( toolTipText );
|
||||
|
||||
return super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintComponent( Graphics g ) {
|
||||
g.setColor( getBackground() );
|
||||
g.fillRect( 0, 0, getWidth(), getHeight() );
|
||||
|
||||
FontMetrics fm = getFontMetrics( getFont() );
|
||||
Rectangle textR = new Rectangle();
|
||||
String clippedText = layoutLabel( fm, key, textR );
|
||||
int x = textR.x;
|
||||
int y = textR.y + fm.getAscent();
|
||||
|
||||
int dot = key.indexOf( '.' );
|
||||
if( dot > 0 && !selected ) {
|
||||
g.setColor( UIManager.getColor( "Label.disabledForeground" ) );
|
||||
|
||||
if( dot >= clippedText.length() )
|
||||
FlatUIUtils.drawString( this, g, clippedText, x, y );
|
||||
else {
|
||||
String prefix = clippedText.substring( 0, dot + 1 );
|
||||
String subkey = clippedText.substring( dot + 1 );
|
||||
|
||||
FlatUIUtils.drawString( this, g, prefix, x, y );
|
||||
|
||||
g.setColor( getForeground() );
|
||||
FlatUIUtils.drawString( this, g, subkey, x + fm.stringWidth( prefix ), y );
|
||||
}
|
||||
} else {
|
||||
g.setColor( getForeground() );
|
||||
FlatUIUtils.drawString( this, g, clippedText, x, y );
|
||||
}
|
||||
|
||||
if( isOverridden ) {
|
||||
if( overriddenIcon == null ) {
|
||||
overriddenIcon = new FlatAbstractIcon( 16, 16, null ) {
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g2 ) {
|
||||
g2.setColor( FlatUIUtils.getUIColor( "Actions.Red", Color.red ) );
|
||||
g2.setStroke( new BasicStroke( 2f ) );
|
||||
g2.draw( FlatUIUtils.createPath( false, 3,10, 8,5, 13,10 ) );
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
overriddenIcon.paintIcon( this, g,
|
||||
getWidth() - overriddenIcon.getIconWidth(),
|
||||
(getHeight() - overriddenIcon.getIconHeight()) / 2 );
|
||||
}
|
||||
|
||||
paintSeparator( g );
|
||||
}
|
||||
}
|
||||
|
||||
//---- class ValueRenderer ------------------------------------------------
|
||||
|
||||
private static class ValueRenderer
|
||||
extends Renderer
|
||||
{
|
||||
private Item item;
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent( JTable table, Object value,
|
||||
boolean isSelected, boolean hasFocus, int row, int column )
|
||||
{
|
||||
item = (Item) value;
|
||||
init( table, item.key, isSelected, row );
|
||||
|
||||
// reset background, foreground and icon
|
||||
if( !(item.value instanceof Color) ) {
|
||||
setBackground( null );
|
||||
setForeground( null );
|
||||
}
|
||||
if( !(item.value instanceof Icon) )
|
||||
setIcon( null );
|
||||
|
||||
// value to string
|
||||
value = item.getValueAsString();
|
||||
|
||||
super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
|
||||
|
||||
if( item.value instanceof Color ) {
|
||||
Color color = (Color) item.value;
|
||||
boolean isDark = new HSLColor( color ).getLuminance() < 70;
|
||||
setBackground( color );
|
||||
setForeground( isDark ? Color.white : Color.black );
|
||||
} else if( item.value instanceof Icon ) {
|
||||
Icon icon = (Icon) item.value;
|
||||
setIcon( new SafeIcon( icon ) );
|
||||
}
|
||||
|
||||
// set tooltip
|
||||
String toolTipText = String.valueOf( item.value );
|
||||
if( item.lafValue != null ) {
|
||||
toolTipText += " \n\nLaF UI default value was overridden with UIManager.put(key,value):\n "
|
||||
+ Item.valueAsString( item.lafValue ) + "\n " + String.valueOf( item.lafValue );
|
||||
}
|
||||
setToolTipText( toolTipText );
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintComponent( Graphics g ) {
|
||||
if( item.value instanceof Color ) {
|
||||
// fill background
|
||||
g.setColor( getBackground() );
|
||||
g.fillRect( 0, 0, getWidth(), getHeight() );
|
||||
|
||||
// layout text
|
||||
FontMetrics fm = getFontMetrics( getFont() );
|
||||
String text = getText();
|
||||
Rectangle textR = new Rectangle();
|
||||
layoutLabel( fm, text, textR );
|
||||
int x = textR.x;
|
||||
int y = textR.y + fm.getAscent();
|
||||
|
||||
g.setColor( getForeground() );
|
||||
|
||||
// paint rgb() and hsl() horizontally aligned
|
||||
int rgbIndex = text.indexOf( "rgb" );
|
||||
int hslIndex = text.indexOf( "hsl" );
|
||||
if( rgbIndex > 0 && hslIndex > rgbIndex ) {
|
||||
String hexText = text.substring( 0, rgbIndex );
|
||||
String rgbText = text.substring( rgbIndex, hslIndex );
|
||||
String hslText = text.substring( hslIndex );
|
||||
int hexWidth = Math.max( fm.stringWidth( hexText ), fm.stringWidth( "#DDDDDD " ) );
|
||||
int rgbWidth = Math.max( fm.stringWidth( rgbText ), fm.stringWidth( "rgb(444, 444, 444) " ) );
|
||||
FlatUIUtils.drawString( this, g, hexText, x, y );
|
||||
FlatUIUtils.drawString( this, g, rgbText, x + hexWidth, y );
|
||||
FlatUIUtils.drawString( this, g, hslText, x + hexWidth + rgbWidth, y );
|
||||
} else
|
||||
FlatUIUtils.drawString( this, g, text, x, y );
|
||||
} else
|
||||
super.paintComponent( g );
|
||||
|
||||
paintSeparator( g );
|
||||
}
|
||||
}
|
||||
|
||||
//---- class SafeIcon -----------------------------------------------------
|
||||
|
||||
private static class SafeIcon
|
||||
implements Icon
|
||||
{
|
||||
private final Icon icon;
|
||||
|
||||
SafeIcon( Icon icon ) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintIcon( Component c, Graphics g, int x, int y ) {
|
||||
int width = getIconWidth();
|
||||
int height = getIconHeight();
|
||||
|
||||
try {
|
||||
g.setColor( UIManager.getColor( "Panel.background" ) );
|
||||
g.fillRect( x, y, width, height );
|
||||
|
||||
icon.paintIcon( c, g, x, y );
|
||||
} catch( Exception ex ) {
|
||||
g.setColor( Color.red );
|
||||
g.drawRect( x, y, width - 1, height - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconWidth() {
|
||||
return icon.getIconWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconHeight() {
|
||||
return icon.getIconHeight();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
root: new FormRoot {
|
||||
add( new FormWindow( "javax.swing.JFrame", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "frame"
|
||||
"title": "UI Defaults Inspector"
|
||||
"defaultCloseOperation": 2
|
||||
"$sizePolicy": 2
|
||||
"$locationPolicy": 2
|
||||
addEvent( new FormEvent( "java.awt.event.WindowListener", "windowClosed", "windowClosed", false ) )
|
||||
addEvent( new FormEvent( "java.awt.event.WindowListener", "windowClosing", "saveWindowBounds", false ) )
|
||||
addEvent( new FormEvent( "java.awt.event.WindowListener", "windowDeactivated", "saveWindowBounds", false ) )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel"
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.GridBagLayout ) {
|
||||
"$columnSpecs": "0, 0:1.0, 0, 0"
|
||||
"$rowSpecs": "0"
|
||||
"$hGap": 10
|
||||
"$vGap": 5
|
||||
"$alignLeft": true
|
||||
"$alignTop": true
|
||||
} ) {
|
||||
name: "filterPanel"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "flterLabel"
|
||||
"text": "Filter:"
|
||||
"labelFor": new FormReference( "filterField" )
|
||||
"displayedMnemonic": 70
|
||||
}, new FormLayoutConstraints( class com.jformdesigner.runtime.GridBagConstraintsEx ) )
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "filterField"
|
||||
"$client.JTextField.placeholderText": "enter one or more filter strings, separated by space characters"
|
||||
}, new FormLayoutConstraints( class com.jformdesigner.runtime.GridBagConstraintsEx ) {
|
||||
"gridx": 1
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "valueTypeLabel"
|
||||
"text": "Value Type:"
|
||||
"labelFor": new FormReference( "valueTypeField" )
|
||||
"displayedMnemonic": 84
|
||||
}, new FormLayoutConstraints( class com.jformdesigner.runtime.GridBagConstraintsEx ) {
|
||||
"gridx": 2
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||
name: "valueTypeField"
|
||||
"model": new javax.swing.DefaultComboBoxModel {
|
||||
selectedItem: "(any)"
|
||||
addElement( "(any)" )
|
||||
addElement( "Boolean" )
|
||||
addElement( "Border" )
|
||||
addElement( "Color" )
|
||||
addElement( "Dimension" )
|
||||
addElement( "Float" )
|
||||
addElement( "Font" )
|
||||
addElement( "Icon" )
|
||||
addElement( "Insets" )
|
||||
addElement( "Integer" )
|
||||
addElement( "String" )
|
||||
addElement( "(other)" )
|
||||
}
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.typeParameters": "String"
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "filterChanged", false ) )
|
||||
}, new FormLayoutConstraints( class com.jformdesigner.runtime.GridBagConstraintsEx ) {
|
||||
"gridx": 3
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "North"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane"
|
||||
add( new FormComponent( "javax.swing.JTable" ) {
|
||||
name: "table"
|
||||
"autoCreateRowSorter": true
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 400, 300 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
module com.formdev.flatlaf.extras {
|
||||
requires java.desktop;
|
||||
requires java.prefs;
|
||||
requires static com.kitfox.svg; // optional at runtime
|
||||
requires com.formdev.flatlaf;
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
},
|
||||
"ui": {
|
||||
"*": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
||||
"background": "colorBackground",
|
||||
"caretForeground": "colorForeground",
|
||||
"disabledForeground": "colorDisabledForeground",
|
||||
@@ -68,10 +70,7 @@
|
||||
"startBorderColor": "#476069"
|
||||
},
|
||||
"CheckBox": {},
|
||||
"CheckBoxMenuItem": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
||||
},
|
||||
"CheckBoxMenuItem": {},
|
||||
"ColorChooser": {
|
||||
"swatchesDefaultRecentColor": "colorBackground"
|
||||
},
|
||||
@@ -257,8 +256,6 @@
|
||||
"usedBackground": "#566C73"
|
||||
},
|
||||
"Menu": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
||||
"borderColor": "colorSeparator",
|
||||
"separatorColor": "colorSeparator"
|
||||
},
|
||||
@@ -372,10 +369,7 @@
|
||||
"trackColor": "#36525B"
|
||||
},
|
||||
"RadioButton": {},
|
||||
"RadioButtonMenuItem": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
||||
},
|
||||
"RadioButtonMenuItem": {},
|
||||
"ScrollBar": {
|
||||
"background": "#14414F",
|
||||
"hoverThumbBorderColor": "#0A384459",
|
||||
@@ -441,6 +435,11 @@
|
||||
"Separator": {
|
||||
"separatorColor": "colorSeparator"
|
||||
},
|
||||
"Settings": {
|
||||
"Spotlight": {
|
||||
"borderColor": "#9A670064"
|
||||
}
|
||||
},
|
||||
"SidePanel": {
|
||||
"background": "#0E4155"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
},
|
||||
"ui": {
|
||||
"*": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
||||
"background": "colorBackground",
|
||||
"caretForeground": "colorForeground",
|
||||
"disabledForeground": "colorDisabledForeground",
|
||||
@@ -68,10 +70,7 @@
|
||||
"startBorderColor": "#B4BAB5"
|
||||
},
|
||||
"CheckBox": {},
|
||||
"CheckBoxMenuItem": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
||||
},
|
||||
"CheckBoxMenuItem": {},
|
||||
"ColorChooser": {
|
||||
"swatchesDefaultRecentColor": "#CFD0C3"
|
||||
},
|
||||
@@ -263,8 +262,6 @@
|
||||
"usedBackground": "#ADB5AF"
|
||||
},
|
||||
"Menu": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
||||
"borderColor": "#D3D2C6",
|
||||
"disabledBackground": "colorBackground",
|
||||
"separatorColor": "colorSeparator"
|
||||
@@ -378,10 +375,7 @@
|
||||
"trackColor": "#BAC0B8"
|
||||
},
|
||||
"RadioButton": {},
|
||||
"RadioButtonMenuItem": {
|
||||
"acceleratorForeground": "colorAcceleratorForeground",
|
||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
||||
},
|
||||
"RadioButtonMenuItem": {},
|
||||
"ScrollBar": {
|
||||
"background": "#F5F0E3",
|
||||
"hoverThumbBorderColor": "#4B5A5F47",
|
||||
@@ -445,6 +439,11 @@
|
||||
"Separator": {
|
||||
"separatorColor": "colorSeparator"
|
||||
},
|
||||
"Settings": {
|
||||
"Spotlight": {
|
||||
"borderColor": "#F6C00064"
|
||||
}
|
||||
},
|
||||
"SidePanel": {
|
||||
"background": "#E2E2D4"
|
||||
},
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
#---- BusyLabel ----
|
||||
|
||||
JXBusyLabel.baseColor=#777777
|
||||
JXBusyLabel.baseColor=#777
|
||||
JXBusyLabel.highlightColor=#e0e0e0
|
||||
|
||||
|
||||
@@ -38,8 +38,8 @@ Hyperlink.disabledText=@disabledText
|
||||
JXMonthView.background=@textComponentBackground
|
||||
JXMonthView.monthStringBackground=#4c5052
|
||||
JXMonthView.monthStringForeground=@foreground
|
||||
JXMonthView.daysOfTheWeekForeground=#aaaaaa
|
||||
JXMonthView.weekOfTheYearForeground=#888888
|
||||
JXMonthView.daysOfTheWeekForeground=#aaa
|
||||
JXMonthView.weekOfTheYearForeground=#888
|
||||
JXMonthView.unselectableDayForeground=#E05555
|
||||
JXMonthView.selectedBackground=@selectionBackground
|
||||
JXMonthView.flaggedDayForeground=#E05555
|
||||
@@ -63,7 +63,7 @@ TaskPane.contentInsets=10,10,10,10
|
||||
|
||||
TaskPane.titleBackgroundGradientStart=#4c5052
|
||||
TaskPane.titleForeground=@foreground
|
||||
TaskPane.titleOver=#888888
|
||||
TaskPane.titleOver=#888
|
||||
TaskPane.specialTitleBackground=#afafaf
|
||||
TaskPane.specialTitleForeground=#222222
|
||||
TaskPane.specialTitleOver=#666666
|
||||
TaskPane.specialTitleForeground=#222
|
||||
TaskPane.specialTitleOver=#666
|
||||
|
||||
@@ -23,7 +23,7 @@ JXBusyLabel.highlightColor=#808080
|
||||
#---- Header ----
|
||||
|
||||
JXHeader.background=@background
|
||||
JXHeader.startBackground=#ffffff
|
||||
JXHeader.startBackground=#fff
|
||||
|
||||
|
||||
#---- Hyperlink ----
|
||||
@@ -38,8 +38,8 @@ Hyperlink.disabledText=@disabledText
|
||||
JXMonthView.background=@textComponentBackground
|
||||
JXMonthView.monthStringBackground=#dfdfdf
|
||||
JXMonthView.monthStringForeground=@foreground
|
||||
JXMonthView.daysOfTheWeekForeground=#444444
|
||||
JXMonthView.weekOfTheYearForeground=#666666
|
||||
JXMonthView.daysOfTheWeekForeground=#444
|
||||
JXMonthView.weekOfTheYearForeground=#666
|
||||
JXMonthView.unselectableDayForeground=#E02222
|
||||
JXMonthView.selectedBackground=#B9CEF8
|
||||
JXMonthView.flaggedDayForeground=#E02222
|
||||
@@ -62,8 +62,8 @@ TaskPane.borderColor=$Button.borderColor
|
||||
TaskPane.contentInsets=10,10,10,10
|
||||
|
||||
TaskPane.titleBackgroundGradientStart=#dfdfdf
|
||||
TaskPane.titleForeground=#222222
|
||||
TaskPane.titleOver=#666666
|
||||
TaskPane.titleForeground=#222
|
||||
TaskPane.titleOver=#666
|
||||
TaskPane.specialTitleBackground=#afafaf
|
||||
TaskPane.specialTitleForeground=#222222
|
||||
TaskPane.specialTitleOver=#666666
|
||||
TaskPane.specialTitleForeground=#222
|
||||
TaskPane.specialTitleOver=#666
|
||||
|
||||
@@ -22,8 +22,15 @@ import java.awt.EventQueue;
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.awt.datatransfer.Transferable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import com.formdev.flatlaf.icons.FlatMenuArrowIcon;
|
||||
import net.miginfocom.swing.*;
|
||||
|
||||
@@ -40,8 +47,78 @@ public class FlatComponents2Test
|
||||
} );
|
||||
}
|
||||
|
||||
private final TestListModel listModel;
|
||||
private final TestTreeModel treeModel;
|
||||
private final TestTableModel tableModel;
|
||||
|
||||
FlatComponents2Test() {
|
||||
initComponents();
|
||||
|
||||
// list model
|
||||
listModel = new TestListModel( (Integer) listRowCountSpinner.getValue() );
|
||||
list1.setModel( listModel );
|
||||
list2.setModel( listModel );
|
||||
|
||||
// tree model
|
||||
treeModel = new TestTreeModel( (Integer) treeRowCountSpinner.getValue() );
|
||||
tree1.setModel( treeModel );
|
||||
tree2.setModel( treeModel );
|
||||
|
||||
// table model
|
||||
tableModel = new TestTableModel( (Integer) tableRowCountSpinner.getValue() );
|
||||
table1.setModel( tableModel );
|
||||
|
||||
// table column editors
|
||||
TableColumnModel cm = table1.getColumnModel();
|
||||
String[] months = new String[] {
|
||||
"January", "February", "March", "April", "May", "June",
|
||||
"July", "August", "September", "October", "November", "December"
|
||||
};
|
||||
cm.getColumn(2).setCellEditor( new DefaultCellEditor( new JComboBox<>( months ) ) );
|
||||
JComboBox<String> editableComboBox = new JComboBox<>( months );
|
||||
editableComboBox.setEditable( true );
|
||||
cm.getColumn(3).setCellEditor( new DefaultCellEditor( editableComboBox ) );
|
||||
|
||||
expandTree( tree1 );
|
||||
expandTree( tree2 );
|
||||
}
|
||||
|
||||
private void expandTree( JTree tree ) {
|
||||
int count = tree.getRowCount();
|
||||
for( int i = count - 1; i >= 0; i-- )
|
||||
tree.expandRow( i );
|
||||
}
|
||||
|
||||
private void listRowCountChanged() {
|
||||
listModel.setSize( (Integer) listRowCountSpinner.getValue() );
|
||||
}
|
||||
|
||||
private void treeRowCountChanged() {
|
||||
int rowCount = (Integer) treeRowCountSpinner.getValue();
|
||||
|
||||
// round to 20
|
||||
if( rowCount % 20 != 0 ) {
|
||||
rowCount += 20 - (rowCount % 20);
|
||||
treeRowCountSpinner.setValue( rowCount );
|
||||
}
|
||||
|
||||
int oldCount1 = tree1.getRowCount();
|
||||
int oldCount2 = tree2.getRowCount();
|
||||
|
||||
treeModel.setRowCount( rowCount );
|
||||
|
||||
int newCount1 = tree1.getRowCount();
|
||||
int newCount2 = tree2.getRowCount();
|
||||
|
||||
// expand added rows
|
||||
for( int i = newCount1 - 1; i >= oldCount1; i-- )
|
||||
tree1.expandRow( i );
|
||||
for( int i = newCount2 - 1; i >= oldCount2; i-- )
|
||||
tree2.expandRow( i );
|
||||
}
|
||||
|
||||
private void tableRowCountChanged() {
|
||||
tableModel.setRowCount( (Integer) tableRowCountSpinner.getValue() );
|
||||
}
|
||||
|
||||
private void dndChanged() {
|
||||
@@ -121,7 +198,6 @@ public class FlatComponents2Test
|
||||
} );
|
||||
}
|
||||
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" } )
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
JLabel textFieldLabel = new JLabel();
|
||||
@@ -132,37 +208,45 @@ public class FlatComponents2Test
|
||||
list1 = new JList<>();
|
||||
JScrollPane scrollPane2 = new JScrollPane();
|
||||
list2 = new JList<>();
|
||||
JPanel listOptionsPanel = new JPanel();
|
||||
JLabel listRowCountLabel = new JLabel();
|
||||
listRowCountSpinner = new JSpinner();
|
||||
JLabel treeLabel = new JLabel();
|
||||
JScrollPane scrollPane3 = new JScrollPane();
|
||||
tree1 = new JTree();
|
||||
JScrollPane scrollPane4 = new JScrollPane();
|
||||
tree2 = new JTree();
|
||||
JPanel treeOptionsPanel = new JPanel();
|
||||
JLabel treeRowCountLabel = new JLabel();
|
||||
treeRowCountSpinner = new JSpinner();
|
||||
JLabel tableLabel = new JLabel();
|
||||
scrollPane5 = new JScrollPane();
|
||||
table1 = new JTable();
|
||||
dndCheckBox = new JCheckBox();
|
||||
tableHeaderButtonCheckBox = new JCheckBox();
|
||||
rowSelectionCheckBox = new JCheckBox();
|
||||
columnSelectionCheckBox = new JCheckBox();
|
||||
JPanel tableOptionsPanel = new JPanel();
|
||||
JLabel tableRowCountLabel = new JLabel();
|
||||
tableRowCountSpinner = new JSpinner();
|
||||
showHorizontalLinesCheckBox = new JCheckBox();
|
||||
showVerticalLinesCheckBox = new JCheckBox();
|
||||
intercellSpacingCheckBox = new JCheckBox();
|
||||
redGridColorCheckBox = new JCheckBox();
|
||||
rowSelectionCheckBox = new JCheckBox();
|
||||
columnSelectionCheckBox = new JCheckBox();
|
||||
dndCheckBox = new JCheckBox();
|
||||
tableHeaderButtonCheckBox = new JCheckBox();
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"ltr,insets dialog,hidemode 3",
|
||||
// columns
|
||||
"[]" +
|
||||
"[200]" +
|
||||
"[200]",
|
||||
"[200,fill]" +
|
||||
"[200,fill]" +
|
||||
"[fill]",
|
||||
// rows
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[::200]" +
|
||||
"[150,grow]" +
|
||||
"[]" +
|
||||
"[]"));
|
||||
"[150,grow,sizegroup 1,fill]" +
|
||||
"[150,grow,sizegroup 1,fill]" +
|
||||
"[150,grow,sizegroup 1,fill]"));
|
||||
|
||||
//---- textFieldLabel ----
|
||||
textFieldLabel.setText("JTextField:");
|
||||
@@ -179,74 +263,47 @@ public class FlatComponents2Test
|
||||
|
||||
//---- listLabel ----
|
||||
listLabel.setText("JList:");
|
||||
add(listLabel, "cell 0 1");
|
||||
add(listLabel, "cell 0 1,aligny top,growy 0");
|
||||
|
||||
//======== scrollPane1 ========
|
||||
{
|
||||
|
||||
//---- list1 ----
|
||||
list1.setModel(new AbstractListModel<String>() {
|
||||
String[] values = {
|
||||
"item 1",
|
||||
"item 2",
|
||||
"item 3",
|
||||
"item 4",
|
||||
"item 5",
|
||||
"item 6",
|
||||
"item 7",
|
||||
"item 8",
|
||||
"item 9",
|
||||
"item 10",
|
||||
"item 11",
|
||||
"item 12",
|
||||
"item 13",
|
||||
"item 14",
|
||||
"item 15"
|
||||
};
|
||||
@Override
|
||||
public int getSize() { return values.length; }
|
||||
@Override
|
||||
public String getElementAt(int i) { return values[i]; }
|
||||
});
|
||||
scrollPane1.setViewportView(list1);
|
||||
}
|
||||
add(scrollPane1, "cell 1 1,growx");
|
||||
add(scrollPane1, "cell 1 1");
|
||||
|
||||
//======== scrollPane2 ========
|
||||
{
|
||||
|
||||
//---- list2 ----
|
||||
list2.setModel(new AbstractListModel<String>() {
|
||||
String[] values = {
|
||||
"item 1",
|
||||
"item 2",
|
||||
"item 3",
|
||||
"item 4",
|
||||
"item 5",
|
||||
"item 6",
|
||||
"item 7",
|
||||
"item 8",
|
||||
"item 9",
|
||||
"item 10",
|
||||
"item 11",
|
||||
"item 12",
|
||||
"item 13",
|
||||
"item 14",
|
||||
"item 15"
|
||||
};
|
||||
@Override
|
||||
public int getSize() { return values.length; }
|
||||
@Override
|
||||
public String getElementAt(int i) { return values[i]; }
|
||||
});
|
||||
list2.setEnabled(false);
|
||||
scrollPane2.setViewportView(list2);
|
||||
}
|
||||
add(scrollPane2, "cell 2 1,growx");
|
||||
add(scrollPane2, "cell 2 1");
|
||||
|
||||
//======== listOptionsPanel ========
|
||||
{
|
||||
listOptionsPanel.setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
// columns
|
||||
"[fill]" +
|
||||
"[90,fill]",
|
||||
// rows
|
||||
"[]"));
|
||||
|
||||
//---- listRowCountLabel ----
|
||||
listRowCountLabel.setText("Row count:");
|
||||
listOptionsPanel.add(listRowCountLabel, "cell 0 0");
|
||||
|
||||
//---- listRowCountSpinner ----
|
||||
listRowCountSpinner.setModel(new SpinnerNumberModel(20, 0, null, 10));
|
||||
listRowCountSpinner.addChangeListener(e -> listRowCountChanged());
|
||||
listOptionsPanel.add(listRowCountSpinner, "cell 1 0");
|
||||
}
|
||||
add(listOptionsPanel, "cell 3 1");
|
||||
|
||||
//---- treeLabel ----
|
||||
treeLabel.setText("JTree:");
|
||||
add(treeLabel, "cell 0 2");
|
||||
add(treeLabel, "cell 0 2,aligny top,growy 0");
|
||||
|
||||
//======== scrollPane3 ========
|
||||
{
|
||||
@@ -256,7 +313,7 @@ public class FlatComponents2Test
|
||||
tree1.setEditable(true);
|
||||
scrollPane3.setViewportView(tree1);
|
||||
}
|
||||
add(scrollPane3, "cell 1 2,growx");
|
||||
add(scrollPane3, "cell 1 2");
|
||||
|
||||
//======== scrollPane4 ========
|
||||
{
|
||||
@@ -265,151 +322,156 @@ public class FlatComponents2Test
|
||||
tree2.setEnabled(false);
|
||||
scrollPane4.setViewportView(tree2);
|
||||
}
|
||||
add(scrollPane4, "cell 2 2,growx");
|
||||
add(scrollPane4, "cell 2 2");
|
||||
|
||||
//======== treeOptionsPanel ========
|
||||
{
|
||||
treeOptionsPanel.setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
// columns
|
||||
"[fill]" +
|
||||
"[90,fill]",
|
||||
// rows
|
||||
"[]"));
|
||||
|
||||
//---- treeRowCountLabel ----
|
||||
treeRowCountLabel.setText("Row count:");
|
||||
treeOptionsPanel.add(treeRowCountLabel, "cell 0 0");
|
||||
|
||||
//---- treeRowCountSpinner ----
|
||||
treeRowCountSpinner.setModel(new SpinnerNumberModel(20, 20, null, 20));
|
||||
treeRowCountSpinner.addChangeListener(e -> treeRowCountChanged());
|
||||
treeOptionsPanel.add(treeRowCountSpinner, "cell 1 0");
|
||||
}
|
||||
add(treeOptionsPanel, "cell 3 2");
|
||||
|
||||
//---- tableLabel ----
|
||||
tableLabel.setText("JTable:");
|
||||
add(tableLabel, "cell 0 3");
|
||||
add(tableLabel, "cell 0 3,aligny top,growy 0");
|
||||
|
||||
//======== scrollPane5 ========
|
||||
{
|
||||
|
||||
//---- table1 ----
|
||||
table1.setModel(new DefaultTableModel(
|
||||
new Object[][] {
|
||||
{"item 1", "item 1b", "January", "July", 123, null},
|
||||
{"item 2", "item 2b", "February", "August", 456, true},
|
||||
{"item 3", null, "March", null, null, null},
|
||||
{"item 4", null, "April", null, null, null},
|
||||
{"item 5", null, "May", null, null, null},
|
||||
{"item 6", null, "June", null, null, null},
|
||||
{"item 7", null, "July", null, null, null},
|
||||
{"item 8", null, "August", null, null, null},
|
||||
{"item 9", null, "September", null, null, null},
|
||||
{"item 10", null, "October", null, null, null},
|
||||
{"item 11", null, "November", null, null, null},
|
||||
{"item 12", null, "December", null, null, null},
|
||||
},
|
||||
new String[] {
|
||||
"Not editable", "Text", "Combo", "Combo Editable", "Integer", "Boolean"
|
||||
}
|
||||
) {
|
||||
Class<?>[] columnTypes = new Class<?>[] {
|
||||
Object.class, Object.class, String.class, String.class, Integer.class, Boolean.class
|
||||
};
|
||||
boolean[] columnEditable = new boolean[] {
|
||||
false, true, true, true, true, true
|
||||
};
|
||||
@Override
|
||||
public Class<?> getColumnClass(int columnIndex) {
|
||||
return columnTypes[columnIndex];
|
||||
}
|
||||
@Override
|
||||
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
||||
return columnEditable[columnIndex];
|
||||
}
|
||||
});
|
||||
{
|
||||
TableColumnModel cm = table1.getColumnModel();
|
||||
cm.getColumn(2).setCellEditor(new DefaultCellEditor(
|
||||
new JComboBox(new DefaultComboBoxModel(new String[] {
|
||||
"January",
|
||||
"February",
|
||||
"March",
|
||||
"April",
|
||||
"May",
|
||||
"June",
|
||||
"July",
|
||||
"August",
|
||||
"September",
|
||||
"October",
|
||||
"November",
|
||||
"December"
|
||||
}))));
|
||||
cm.getColumn(3).setCellEditor(new DefaultCellEditor(
|
||||
new JComboBox(new DefaultComboBoxModel(new String[] {
|
||||
"January",
|
||||
"February",
|
||||
"March",
|
||||
"April",
|
||||
"May",
|
||||
"June",
|
||||
"July",
|
||||
"August",
|
||||
"September",
|
||||
"October",
|
||||
"November",
|
||||
"December"
|
||||
}))));
|
||||
}
|
||||
table1.setAutoCreateRowSorter(true);
|
||||
scrollPane5.setViewportView(table1);
|
||||
}
|
||||
add(scrollPane5, "cell 1 3 2 1,growx,width 300");
|
||||
add(scrollPane5, "cell 1 3 2 1,width 300");
|
||||
|
||||
//---- dndCheckBox ----
|
||||
dndCheckBox.setText("enable drag and drop");
|
||||
dndCheckBox.setMnemonic('D');
|
||||
dndCheckBox.addActionListener(e -> dndChanged());
|
||||
add(dndCheckBox, "cell 0 4 3 1");
|
||||
//======== tableOptionsPanel ========
|
||||
{
|
||||
tableOptionsPanel.setLayout(new MigLayout(
|
||||
"hidemode 3",
|
||||
// columns
|
||||
"[]" +
|
||||
"[90,fill]",
|
||||
// rows
|
||||
"[]" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]0" +
|
||||
"[]"));
|
||||
|
||||
//---- tableHeaderButtonCheckBox ----
|
||||
tableHeaderButtonCheckBox.setText("show button in table header");
|
||||
tableHeaderButtonCheckBox.addActionListener(e -> tableHeaderButtonChanged());
|
||||
add(tableHeaderButtonCheckBox, "cell 0 4 3 1");
|
||||
//---- tableRowCountLabel ----
|
||||
tableRowCountLabel.setText("Row count:");
|
||||
tableOptionsPanel.add(tableRowCountLabel, "cell 0 0");
|
||||
|
||||
//---- rowSelectionCheckBox ----
|
||||
rowSelectionCheckBox.setText("row selection");
|
||||
rowSelectionCheckBox.setSelected(true);
|
||||
rowSelectionCheckBox.addActionListener(e -> rowSelectionChanged());
|
||||
add(rowSelectionCheckBox, "cell 0 4 3 1");
|
||||
//---- tableRowCountSpinner ----
|
||||
tableRowCountSpinner.setModel(new SpinnerNumberModel(20, 0, null, 10));
|
||||
tableRowCountSpinner.addChangeListener(e -> tableRowCountChanged());
|
||||
tableOptionsPanel.add(tableRowCountSpinner, "cell 1 0");
|
||||
|
||||
//---- columnSelectionCheckBox ----
|
||||
columnSelectionCheckBox.setText("column selection");
|
||||
columnSelectionCheckBox.addActionListener(e -> columnSelectionChanged());
|
||||
add(columnSelectionCheckBox, "cell 0 4 3 1");
|
||||
//---- showHorizontalLinesCheckBox ----
|
||||
showHorizontalLinesCheckBox.setText("show horizontal lines");
|
||||
showHorizontalLinesCheckBox.addActionListener(e -> showHorizontalLinesChanged());
|
||||
tableOptionsPanel.add(showHorizontalLinesCheckBox, "cell 0 1 2 1");
|
||||
|
||||
//---- showHorizontalLinesCheckBox ----
|
||||
showHorizontalLinesCheckBox.setText("show horizontal lines");
|
||||
showHorizontalLinesCheckBox.addActionListener(e -> showHorizontalLinesChanged());
|
||||
add(showHorizontalLinesCheckBox, "cell 0 5 3 1");
|
||||
//---- showVerticalLinesCheckBox ----
|
||||
showVerticalLinesCheckBox.setText("show vertical lines");
|
||||
showVerticalLinesCheckBox.addActionListener(e -> showVerticalLinesChanged());
|
||||
tableOptionsPanel.add(showVerticalLinesCheckBox, "cell 0 2 2 1");
|
||||
|
||||
//---- showVerticalLinesCheckBox ----
|
||||
showVerticalLinesCheckBox.setText("show vertical lines");
|
||||
showVerticalLinesCheckBox.addActionListener(e -> showVerticalLinesChanged());
|
||||
add(showVerticalLinesCheckBox, "cell 0 5 3 1");
|
||||
//---- intercellSpacingCheckBox ----
|
||||
intercellSpacingCheckBox.setText("intercell spacing");
|
||||
intercellSpacingCheckBox.addActionListener(e -> intercellSpacingChanged());
|
||||
tableOptionsPanel.add(intercellSpacingCheckBox, "cell 0 3 2 1");
|
||||
|
||||
//---- intercellSpacingCheckBox ----
|
||||
intercellSpacingCheckBox.setText("intercell spacing");
|
||||
intercellSpacingCheckBox.addActionListener(e -> intercellSpacingChanged());
|
||||
add(intercellSpacingCheckBox, "cell 0 5 3 1");
|
||||
//---- redGridColorCheckBox ----
|
||||
redGridColorCheckBox.setText("red grid color");
|
||||
redGridColorCheckBox.addActionListener(e -> redGridColorChanged());
|
||||
tableOptionsPanel.add(redGridColorCheckBox, "cell 0 4 2 1");
|
||||
|
||||
//---- redGridColorCheckBox ----
|
||||
redGridColorCheckBox.setText("red grid color");
|
||||
redGridColorCheckBox.addActionListener(e -> redGridColorChanged());
|
||||
add(redGridColorCheckBox, "cell 0 5 3 1");
|
||||
//---- rowSelectionCheckBox ----
|
||||
rowSelectionCheckBox.setText("row selection");
|
||||
rowSelectionCheckBox.setSelected(true);
|
||||
rowSelectionCheckBox.addActionListener(e -> rowSelectionChanged());
|
||||
tableOptionsPanel.add(rowSelectionCheckBox, "cell 0 5 2 1");
|
||||
|
||||
//---- columnSelectionCheckBox ----
|
||||
columnSelectionCheckBox.setText("column selection");
|
||||
columnSelectionCheckBox.addActionListener(e -> columnSelectionChanged());
|
||||
tableOptionsPanel.add(columnSelectionCheckBox, "cell 0 6 2 1");
|
||||
|
||||
//---- dndCheckBox ----
|
||||
dndCheckBox.setText("enable drag and drop");
|
||||
dndCheckBox.setMnemonic('D');
|
||||
dndCheckBox.addActionListener(e -> dndChanged());
|
||||
tableOptionsPanel.add(dndCheckBox, "cell 0 7 2 1");
|
||||
|
||||
//---- tableHeaderButtonCheckBox ----
|
||||
tableHeaderButtonCheckBox.setText("show button in table header");
|
||||
tableHeaderButtonCheckBox.addActionListener(e -> tableHeaderButtonChanged());
|
||||
tableOptionsPanel.add(tableHeaderButtonCheckBox, "cell 0 8 2 1");
|
||||
}
|
||||
add(tableOptionsPanel, "cell 3 3");
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
|
||||
((JComboBox)((DefaultCellEditor)table1.getColumnModel().getColumn( 3 ).getCellEditor()).getComponent()).setEditable( true );
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
private JList<String> list1;
|
||||
private JList<String> list2;
|
||||
private JSpinner listRowCountSpinner;
|
||||
private JTree tree1;
|
||||
private JTree tree2;
|
||||
private JSpinner treeRowCountSpinner;
|
||||
private JScrollPane scrollPane5;
|
||||
private JTable table1;
|
||||
private JCheckBox dndCheckBox;
|
||||
private JCheckBox tableHeaderButtonCheckBox;
|
||||
private JCheckBox rowSelectionCheckBox;
|
||||
private JCheckBox columnSelectionCheckBox;
|
||||
private JSpinner tableRowCountSpinner;
|
||||
private JCheckBox showHorizontalLinesCheckBox;
|
||||
private JCheckBox showVerticalLinesCheckBox;
|
||||
private JCheckBox intercellSpacingCheckBox;
|
||||
private JCheckBox redGridColorCheckBox;
|
||||
private JCheckBox rowSelectionCheckBox;
|
||||
private JCheckBox columnSelectionCheckBox;
|
||||
private JCheckBox dndCheckBox;
|
||||
private JCheckBox tableHeaderButtonCheckBox;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
|
||||
private final String[] randomRowStrings = new String[1000];
|
||||
private final Random random = new Random();
|
||||
|
||||
private String randomRowString( int row ) {
|
||||
int index = row % randomRowStrings.length;
|
||||
|
||||
String s = randomRowStrings[index];
|
||||
if( s != null )
|
||||
return s;
|
||||
|
||||
char[] chars = new char[3 + random.nextInt( 15 - 3 )];
|
||||
for( int i = 0; i < chars.length; i++ )
|
||||
chars[i] = (char) ((i == 0 ? 'A' : 'a') + random.nextInt( 26 ));
|
||||
if( chars.length > 6 )
|
||||
chars[chars.length / 2] = ' ';
|
||||
s = new String( chars );
|
||||
|
||||
randomRowStrings[index] = s;
|
||||
return s;
|
||||
}
|
||||
|
||||
//---- class DummyTransferHandler -----------------------------------------
|
||||
|
||||
private static class DummyTransferHandler
|
||||
@@ -443,4 +505,234 @@ public class FlatComponents2Test
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//---- class TestListModel ------------------------------------------------
|
||||
|
||||
private class TestListModel
|
||||
extends AbstractListModel<String>
|
||||
{
|
||||
private int size;
|
||||
|
||||
TestListModel( int size ) {
|
||||
setSize( size );
|
||||
}
|
||||
|
||||
void setSize( int size ) {
|
||||
int oldSize = this.size;
|
||||
this.size = size;
|
||||
|
||||
// fire event
|
||||
if( size > oldSize )
|
||||
fireIntervalAdded( this, oldSize, size - 1 );
|
||||
else if( size < oldSize )
|
||||
fireIntervalRemoved( this, size, oldSize - 1 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getElementAt( int index ) {
|
||||
return (index < 20)
|
||||
? "item " + (index + 1)
|
||||
: "item " + (index + 1) + " " + randomRowString( index );
|
||||
}
|
||||
}
|
||||
|
||||
//---- TestTreeModel ------------------------------------------------------
|
||||
|
||||
private class TestTreeModel
|
||||
extends DefaultTreeModel
|
||||
{
|
||||
private int rowCount;
|
||||
|
||||
TestTreeModel( int rowCount ) {
|
||||
super( new DefaultMutableTreeNode( "JTree" ) );
|
||||
setRowCount( rowCount );
|
||||
}
|
||||
|
||||
void setRowCount( int rowCount ) {
|
||||
if( rowCount < 20 )
|
||||
rowCount = 20;
|
||||
|
||||
if( rowCount > this.rowCount ) {
|
||||
// add nodes
|
||||
int oldRootChildCount = root.getChildCount();
|
||||
while( rowCount > this.rowCount ) {
|
||||
addTwentyNodes( (DefaultMutableTreeNode) root, this.rowCount );
|
||||
this.rowCount += 20;
|
||||
}
|
||||
|
||||
// fire event
|
||||
int newRootChildCount = root.getChildCount();
|
||||
if( newRootChildCount > oldRootChildCount ) {
|
||||
int[] childIndices = new int[newRootChildCount - oldRootChildCount];
|
||||
for( int i = 0; i < childIndices.length; i++ )
|
||||
childIndices[i] = oldRootChildCount + i;
|
||||
nodesWereInserted( root, childIndices );
|
||||
}
|
||||
} else if( rowCount < this.rowCount ) {
|
||||
// remove nodes
|
||||
int oldRootChildCount = root.getChildCount();
|
||||
List<Object> removedChildren = new ArrayList<>();
|
||||
while( this.rowCount > rowCount ) {
|
||||
int index = root.getChildCount() - 1;
|
||||
removedChildren.add( 0, root.getChildAt( index ) );
|
||||
((DefaultMutableTreeNode)root).remove( index );
|
||||
this.rowCount -= 20;
|
||||
}
|
||||
|
||||
// fire event
|
||||
int newRootChildCount = root.getChildCount();
|
||||
if( newRootChildCount < oldRootChildCount ) {
|
||||
int[] childIndices = new int[oldRootChildCount - newRootChildCount];
|
||||
for( int i = 0; i < childIndices.length; i++ )
|
||||
childIndices[i] = newRootChildCount + i;
|
||||
nodesWereRemoved( root, childIndices, removedChildren.toArray() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addTwentyNodes( DefaultMutableTreeNode root, int firstRowIndex ) {
|
||||
if( firstRowIndex == 0 ) {
|
||||
DefaultMutableTreeNode n = new DefaultMutableTreeNode( "colors" );
|
||||
n.add( new DefaultMutableTreeNode( "blue" ) );
|
||||
n.add( new DefaultMutableTreeNode( "violet" ) );
|
||||
n.add( new DefaultMutableTreeNode( "red" ) );
|
||||
n.add( new DefaultMutableTreeNode( "yellow" ) );
|
||||
root.add( n );
|
||||
|
||||
n = new DefaultMutableTreeNode( "sports" );
|
||||
n.add( new DefaultMutableTreeNode( "basketball" ) );
|
||||
n.add( new DefaultMutableTreeNode( "soccer" ) );
|
||||
n.add( new DefaultMutableTreeNode( "football" ) );
|
||||
n.add( new DefaultMutableTreeNode( "hockey" ) );
|
||||
root.add( n );
|
||||
|
||||
n = new DefaultMutableTreeNode( "food" );
|
||||
n.add( new DefaultMutableTreeNode( "hot dogs" ) );
|
||||
|
||||
DefaultMutableTreeNode n2 = new DefaultMutableTreeNode( "pizza" );
|
||||
n2.add( new DefaultMutableTreeNode( "pizza aglio e olio" ) );
|
||||
n2.add( new DefaultMutableTreeNode( "pizza calabrese" ) );
|
||||
n2.add( new DefaultMutableTreeNode( "pizza infernale" ) );
|
||||
n2.add( new DefaultMutableTreeNode( "pizza margherita bianca" ) );
|
||||
n2.add( new DefaultMutableTreeNode( "pizza quattro stagioni" ) );
|
||||
n.add( n2 );
|
||||
|
||||
n.add( new DefaultMutableTreeNode( "ravioli" ) );
|
||||
n.add( new DefaultMutableTreeNode( "bananas" ) );
|
||||
root.add( n );
|
||||
} else {
|
||||
DefaultMutableTreeNode n = new DefaultMutableTreeNode( "item " + firstRowIndex + " " + randomRowString( firstRowIndex ) );
|
||||
for( int i = 1; i < 20; i++ ) {
|
||||
int index = firstRowIndex + i;
|
||||
n.add( new DefaultMutableTreeNode( "item " + index + " " + randomRowString( index ) ) );
|
||||
}
|
||||
root.add( n );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---- TestTableModel -----------------------------------------------------
|
||||
|
||||
private class TestTableModel
|
||||
extends AbstractTableModel
|
||||
{
|
||||
private final String[] columnNames = new String[] {
|
||||
"Not editable", "Text", "Combo", "Combo Editable", "Integer", "Boolean"
|
||||
};
|
||||
|
||||
private final Class<?>[] columnTypes = new Class<?>[] {
|
||||
Object.class, Object.class, String.class, String.class, Integer.class, Boolean.class
|
||||
};
|
||||
|
||||
private final boolean[] columnEditable = new boolean[] {
|
||||
false, true, true, true, true, true
|
||||
};
|
||||
|
||||
private final Object[][] rows = new Object[][] {
|
||||
{ "item 1", "item 1b", "January", "July", 123, null },
|
||||
{ "item 2", "item 2b", "February", "August", 456, true },
|
||||
{ "item 3", null, "March", null, null, null },
|
||||
{ "item 4", null, "April", null, null, null },
|
||||
{ "item 5", null, "May", null, null, null },
|
||||
{ "item 6", null, "June", null, null, null },
|
||||
{ "item 7", null, "July", null, null, null },
|
||||
{ "item 8", null, "August", null, null, null },
|
||||
{ "item 9", null, "September", null, null, null },
|
||||
{ "item 10", null, "October", null, null, null },
|
||||
{ "item 11", null, "November", null, null, null },
|
||||
{ "item 12", null, "December", null, null, null },
|
||||
};
|
||||
|
||||
private int rowCount = rows.length;
|
||||
private final Map<Integer, Object[]> moreRowsMap = new HashMap<>();
|
||||
|
||||
TestTableModel( int rowCount ) {
|
||||
setRowCount( rowCount );
|
||||
}
|
||||
|
||||
void setRowCount( int rowCount ) {
|
||||
int oldRowCount = this.rowCount;
|
||||
this.rowCount = rowCount;
|
||||
|
||||
// fire event
|
||||
if( rowCount > oldRowCount )
|
||||
fireTableRowsInserted( oldRowCount, rowCount - 1 );
|
||||
else if( rowCount < oldRowCount )
|
||||
fireTableRowsDeleted( rowCount, oldRowCount - 1 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRowCount() {
|
||||
return rowCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumnCount() {
|
||||
return columnNames.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getColumnName( int columnIndex ) {
|
||||
return columnNames[columnIndex];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getColumnClass( int columnIndex ) {
|
||||
return columnTypes[columnIndex];
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCellEditable( int rowIndex, int columnIndex ) {
|
||||
return columnEditable[columnIndex];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getValueAt( int rowIndex, int columnIndex ) {
|
||||
if( rowIndex < rows.length )
|
||||
return rows[rowIndex][columnIndex];
|
||||
|
||||
Object[] row = moreRowsMap.get( rowIndex );
|
||||
Object value = (row != null)
|
||||
? row[columnIndex]
|
||||
: (columnIndex == 1 ? randomRowString( rowIndex ) : null);
|
||||
return (columnIndex == 0 && value == null) ? "item " + (rowIndex + 1) : value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValueAt( Object value, int rowIndex, int columnIndex ) {
|
||||
if( rowIndex < rows.length )
|
||||
rows[rowIndex][columnIndex] = value;
|
||||
else {
|
||||
Object[] row = moreRowsMap.computeIfAbsent( rowIndex, k -> new Object[getColumnCount()] );
|
||||
row[columnIndex] = value;
|
||||
}
|
||||
|
||||
fireTableCellUpdated( rowIndex, columnIndex );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ new FormModel {
|
||||
}
|
||||
add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "ltr,insets dialog,hidemode 3"
|
||||
"$columnConstraints": "[][200][200]"
|
||||
"$rowConstraints": "[][][::200][150,grow][][]"
|
||||
"$columnConstraints": "[][200,fill][200,fill][fill]"
|
||||
"$rowConstraints": "[][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill]"
|
||||
} ) {
|
||||
name: "this"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
@@ -35,58 +35,24 @@ new FormModel {
|
||||
name: "listLabel"
|
||||
"text": "JList:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1"
|
||||
"value": "cell 0 1,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane1"
|
||||
add( new FormComponent( "javax.swing.JList" ) {
|
||||
name: "list1"
|
||||
"model": new javax.swing.DefaultListModel {
|
||||
addElement( "item 1" )
|
||||
addElement( "item 2" )
|
||||
addElement( "item 3" )
|
||||
addElement( "item 4" )
|
||||
addElement( "item 5" )
|
||||
addElement( "item 6" )
|
||||
addElement( "item 7" )
|
||||
addElement( "item 8" )
|
||||
addElement( "item 9" )
|
||||
addElement( "item 10" )
|
||||
addElement( "item 11" )
|
||||
addElement( "item 12" )
|
||||
addElement( "item 13" )
|
||||
addElement( "item 14" )
|
||||
addElement( "item 15" )
|
||||
}
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.typeParameters": "String"
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 1,growx"
|
||||
"value": "cell 1 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane2"
|
||||
add( new FormComponent( "javax.swing.JList" ) {
|
||||
name: "list2"
|
||||
"model": new javax.swing.DefaultListModel {
|
||||
addElement( "item 1" )
|
||||
addElement( "item 2" )
|
||||
addElement( "item 3" )
|
||||
addElement( "item 4" )
|
||||
addElement( "item 5" )
|
||||
addElement( "item 6" )
|
||||
addElement( "item 7" )
|
||||
addElement( "item 8" )
|
||||
addElement( "item 9" )
|
||||
addElement( "item 10" )
|
||||
addElement( "item 11" )
|
||||
addElement( "item 12" )
|
||||
addElement( "item 13" )
|
||||
addElement( "item 14" )
|
||||
addElement( "item 15" )
|
||||
}
|
||||
"enabled": false
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.typeParameters": "String"
|
||||
@@ -94,13 +60,42 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 1,growx"
|
||||
"value": "cell 2 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$columnConstraints": "[fill][90,fill]"
|
||||
"$rowConstraints": "[]"
|
||||
} ) {
|
||||
name: "listOptionsPanel"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "listRowCountLabel"
|
||||
"text": "Row count:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||
name: "listRowCountSpinner"
|
||||
"model": &SpinnerNumberModel0 new javax.swing.SpinnerNumberModel {
|
||||
minimum: 0
|
||||
stepSize: 10
|
||||
value: 20
|
||||
}
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "listRowCountChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "treeLabel"
|
||||
"text": "JTree:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
"value": "cell 0 2,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane3"
|
||||
@@ -113,7 +108,7 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 2,growx"
|
||||
"value": "cell 1 2"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane4"
|
||||
@@ -125,13 +120,42 @@ new FormModel {
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 2,growx"
|
||||
"value": "cell 2 2"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$columnConstraints": "[fill][90,fill]"
|
||||
"$rowConstraints": "[]"
|
||||
} ) {
|
||||
name: "treeOptionsPanel"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "treeRowCountLabel"
|
||||
"text": "Row count:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||
name: "treeRowCountSpinner"
|
||||
"model": new javax.swing.SpinnerNumberModel {
|
||||
minimum: 20
|
||||
stepSize: 20
|
||||
value: 20
|
||||
}
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "treeRowCountChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tableLabel"
|
||||
"text": "JTable:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
"value": "cell 0 3,aligny top,growy 0"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||
name: "scrollPane5"
|
||||
@@ -140,225 +164,124 @@ new FormModel {
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JTable" ) {
|
||||
name: "table1"
|
||||
"model": new com.jformdesigner.model.SwingTableModel( new java.util.Vector {
|
||||
add( new java.util.Vector {
|
||||
add( "item 1" )
|
||||
add( "item 1b" )
|
||||
add( "January" )
|
||||
add( "July" )
|
||||
add( 123 )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 2" )
|
||||
add( "item 2b" )
|
||||
add( "February" )
|
||||
add( "August" )
|
||||
add( 456 )
|
||||
add( true )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 3" )
|
||||
add( null )
|
||||
add( "March" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 4" )
|
||||
add( null )
|
||||
add( "April" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 5" )
|
||||
add( null )
|
||||
add( "May" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 6" )
|
||||
add( null )
|
||||
add( "June" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 7" )
|
||||
add( null )
|
||||
add( "July" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 8" )
|
||||
add( null )
|
||||
add( "August" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 9" )
|
||||
add( null )
|
||||
add( "September" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 10" )
|
||||
add( null )
|
||||
add( "October" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 11" )
|
||||
add( null )
|
||||
add( "November" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
add( new java.util.Vector {
|
||||
add( "item 12" )
|
||||
add( null )
|
||||
add( "December" )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
}, new java.util.Vector {
|
||||
add( "Not editable" )
|
||||
add( "Text" )
|
||||
add( "Combo" )
|
||||
add( "Combo Editable" )
|
||||
add( "Integer" )
|
||||
add( "Boolean" )
|
||||
}, new java.util.Vector {
|
||||
add( null )
|
||||
add( null )
|
||||
add( class java.lang.String )
|
||||
add( class java.lang.String )
|
||||
add( class java.lang.Integer )
|
||||
add( class java.lang.Boolean )
|
||||
}, new java.util.Vector {
|
||||
add( false )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
add( null )
|
||||
}, new java.util.Vector {
|
||||
add( null )
|
||||
add( null )
|
||||
add( new com.jformdesigner.model.SwingTableColumn( new java.lang.Object[ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], 0, 0, 0, true ) )
|
||||
add( new com.jformdesigner.model.SwingTableColumn( new java.lang.Object[ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], 0, 0, 0, true ) )
|
||||
add( null )
|
||||
add( null )
|
||||
} )
|
||||
"autoCreateRowSorter": true
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 3 2 1,growx,width 300"
|
||||
"value": "cell 1 3 2 1,width 300"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "dndCheckBox"
|
||||
"text": "enable drag and drop"
|
||||
"mnemonic": 68
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "dndChanged", false ) )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3"
|
||||
"$columnConstraints": "[][90,fill]"
|
||||
"$rowConstraints": "[][]0[]0[]0[]0[]0[]0[]0[]"
|
||||
} ) {
|
||||
name: "tableOptionsPanel"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "tableRowCountLabel"
|
||||
"text": "Row count:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||
name: "tableRowCountSpinner"
|
||||
"model": #SpinnerNumberModel0
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "tableRowCountChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showHorizontalLinesCheckBox"
|
||||
"text": "show horizontal lines"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showHorizontalLinesChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 1 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showVerticalLinesCheckBox"
|
||||
"text": "show vertical lines"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showVerticalLinesChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "intercellSpacingCheckBox"
|
||||
"text": "intercell spacing"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "intercellSpacingChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "redGridColorCheckBox"
|
||||
"text": "red grid color"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "redGridColorChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "rowSelectionCheckBox"
|
||||
"text": "row selection"
|
||||
"selected": true
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "rowSelectionChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "columnSelectionCheckBox"
|
||||
"text": "column selection"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "columnSelectionChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 6 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "dndCheckBox"
|
||||
"text": "enable drag and drop"
|
||||
"mnemonic": 68
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "dndChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 7 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "tableHeaderButtonCheckBox"
|
||||
"text": "show button in table header"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tableHeaderButtonChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 8 2 1"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "tableHeaderButtonCheckBox"
|
||||
"text": "show button in table header"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tableHeaderButtonChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "rowSelectionCheckBox"
|
||||
"text": "row selection"
|
||||
"selected": true
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "rowSelectionChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "columnSelectionCheckBox"
|
||||
"text": "column selection"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "columnSelectionChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showHorizontalLinesCheckBox"
|
||||
"text": "show horizontal lines"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showHorizontalLinesChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showVerticalLinesCheckBox"
|
||||
"text": "show vertical lines"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showVerticalLinesChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "intercellSpacingCheckBox"
|
||||
"text": "intercell spacing"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "intercellSpacingChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5 3 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "redGridColorCheckBox"
|
||||
"text": "red grid color"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "redGridColorChanged", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 5 3 1"
|
||||
"value": "cell 3 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 790, 715 )
|
||||
"size": new java.awt.Dimension( 790, 825 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,6 +134,7 @@ public class FlatComponentsTest
|
||||
JLabel labelLabel = new JLabel();
|
||||
JLabel label1 = new JLabel();
|
||||
JLabel label2 = new JLabel();
|
||||
FlatComponentsTest.TestMultiLineLabel testMultiLineLabel1 = new FlatComponentsTest.TestMultiLineLabel();
|
||||
JLabel buttonLabel = new JLabel();
|
||||
JButton button1 = new JButton();
|
||||
JButton button17 = new JButton();
|
||||
@@ -367,6 +368,10 @@ public class FlatComponentsTest
|
||||
label2.setEnabled(false);
|
||||
add(label2, "cell 2 0");
|
||||
|
||||
//---- testMultiLineLabel1 ----
|
||||
testMultiLineLabel1.setText("Multi-line label based on JTextArea\n2nd line");
|
||||
add(testMultiLineLabel1, "cell 3 0 2 1");
|
||||
|
||||
//---- buttonLabel ----
|
||||
buttonLabel.setText("JButton:");
|
||||
add(buttonLabel, "cell 0 1");
|
||||
@@ -1402,4 +1407,24 @@ public class FlatComponentsTest
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
//---- class TestMultiLineLabel -------------------------------------------
|
||||
|
||||
private static class TestMultiLineLabel
|
||||
extends JTextArea
|
||||
{
|
||||
public TestMultiLineLabel() {
|
||||
setEditable( false );
|
||||
setFocusable( false );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
setBackground( UIManager.getColor( "Label.background" ) );
|
||||
setForeground( UIManager.getColor( "Label.foreground" ) );
|
||||
setFont( UIManager.getFont( "Label.font" ) );
|
||||
setBorder( null );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,12 @@ new FormModel {
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0"
|
||||
} )
|
||||
add( new FormComponent( "com.formdev.flatlaf.testing.FlatComponentsTest$TestMultiLineLabel" ) {
|
||||
name: "testMultiLineLabel1"
|
||||
"text": "Multi-line label based on JTextArea\n2nd line"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 3 0 2 1"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "buttonLabel"
|
||||
"text": "JButton:"
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
/*
|
||||
* Created by JFormDesigner on Tue Aug 27 21:47:02 CEST 2019
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.testing;
|
||||
@@ -27,6 +39,8 @@ public class FlatContainerTest
|
||||
|
||||
public FlatContainerTest() {
|
||||
initComponents();
|
||||
|
||||
addInitialTabs( tabbedPane1, tabbedPane2, tabbedPane3, tabbedPane4 );
|
||||
}
|
||||
|
||||
private void tabScrollChanged() {
|
||||
@@ -35,8 +49,20 @@ public class FlatContainerTest
|
||||
tabbedPane2.setTabLayoutPolicy( tabLayoutPolicy );
|
||||
tabbedPane3.setTabLayoutPolicy( tabLayoutPolicy );
|
||||
tabbedPane4.setTabLayoutPolicy( tabLayoutPolicy );
|
||||
|
||||
if( !autoMoreTabs && tabScrollCheckBox.isSelected() && !moreTabsCheckBox.isSelected() ) {
|
||||
moreTabsCheckBox.setSelected( true );
|
||||
moreTabsChanged();
|
||||
autoMoreTabs = true;
|
||||
} else if( autoMoreTabs && !tabScrollCheckBox.isSelected() && moreTabsCheckBox.isSelected() ) {
|
||||
moreTabsCheckBox.setSelected( false );
|
||||
moreTabsChanged();
|
||||
autoMoreTabs = false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean autoMoreTabs;
|
||||
|
||||
private void showTabSeparatorsChanged() {
|
||||
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
||||
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
||||
@@ -59,61 +85,70 @@ public class FlatContainerTest
|
||||
addRemoveMoreTabs( tabbedPane2, moreTabs );
|
||||
addRemoveMoreTabs( tabbedPane3, moreTabs );
|
||||
addRemoveMoreTabs( tabbedPane4, moreTabs );
|
||||
|
||||
autoMoreTabs = false;
|
||||
}
|
||||
|
||||
private void addRemoveMoreTabs( JTabbedPane tabbedPane, boolean add ) {
|
||||
if( add ) {
|
||||
tabbedPane.addTab( "Tab 4", new JLabel( "tab 4" ) );
|
||||
tabbedPane.addTab( "Tab 5", new JLabel( "tab 5" ) );
|
||||
addTab( tabbedPane, "Tab 4", "tab content 4" );
|
||||
addTab( tabbedPane, "Tab 5", "tab content 5" );
|
||||
addTab( tabbedPane, "Tab 6", "tab content 6" );
|
||||
addTab( tabbedPane, "Tab 7", "tab content 7" );
|
||||
addTab( tabbedPane, "Tab 8", "tab content 8" );
|
||||
} else {
|
||||
int tabCount = tabbedPane.getTabCount();
|
||||
if( tabCount > 3 ) {
|
||||
for( int i = 0; i < 2; i++ )
|
||||
for( int i = 0; i < 5; i++ )
|
||||
tabbedPane.removeTabAt( tabbedPane.getTabCount() - 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addInitialTabs( JTabbedPane... tabbedPanes ) {
|
||||
for( JTabbedPane tabbedPane : tabbedPanes ) {
|
||||
tabbedPane.addTab( "Tab 1", new Panel1() );
|
||||
|
||||
JComponent tab2 = new Panel2();
|
||||
tab2.setBorder( new LineBorder( Color.magenta ) );
|
||||
tabbedPane.addTab( "Second Tab", tab2 );
|
||||
|
||||
addTab( tabbedPane, "Disabled", "tab content 3" );
|
||||
tabbedPane.setEnabledAt( 2, false );
|
||||
}
|
||||
}
|
||||
|
||||
private void addTab( JTabbedPane tabbedPane, String title, String text ) {
|
||||
tabbedPane.addTab( title, createTab( text ) );
|
||||
}
|
||||
|
||||
private JComponent createTab( String text ) {
|
||||
JLabel label = new JLabel( text );
|
||||
label.setHorizontalAlignment( SwingConstants.CENTER );
|
||||
|
||||
JPanel tab = new JPanel( new BorderLayout() );
|
||||
tab.add( label, BorderLayout.CENTER );
|
||||
return tab;
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
JPanel panel9 = new JPanel();
|
||||
JLabel splitPaneLabel = new JLabel();
|
||||
JSplitPane splitPane3 = new JSplitPane();
|
||||
JSplitPane splitPane1 = new JSplitPane();
|
||||
JPanel panel10 = new JPanel();
|
||||
JTextField textField2 = new JTextField();
|
||||
JButton button1 = new JButton();
|
||||
JPanel panel11 = new JPanel();
|
||||
JTextField textField3 = new JTextField();
|
||||
JButton button2 = new JButton();
|
||||
FlatContainerTest.Panel1 panel15 = new FlatContainerTest.Panel1();
|
||||
FlatContainerTest.Panel2 panel21 = new FlatContainerTest.Panel2();
|
||||
JSplitPane splitPane2 = new JSplitPane();
|
||||
JPanel panel12 = new JPanel();
|
||||
JLabel label3 = new JLabel();
|
||||
JPanel panel13 = new JPanel();
|
||||
JLabel label4 = new JLabel();
|
||||
JLabel tabbedPaneLabel = new JLabel();
|
||||
tabbedPane1 = new JTabbedPane();
|
||||
JPanel panel1 = new JPanel();
|
||||
JLabel label1 = new JLabel();
|
||||
JTextField textField4 = new JTextField();
|
||||
JButton button3 = new JButton();
|
||||
JPanel panel2 = new JPanel();
|
||||
JTextField textField5 = new JTextField();
|
||||
JButton button4 = new JButton();
|
||||
JLabel label2 = new JLabel();
|
||||
tabbedPane3 = new JTabbedPane();
|
||||
JPanel panel5 = new JPanel();
|
||||
JLabel label5 = new JLabel();
|
||||
JPanel panel6 = new JPanel();
|
||||
JLabel label6 = new JLabel();
|
||||
tabbedPane2 = new JTabbedPane();
|
||||
JPanel panel3 = new JPanel();
|
||||
JLabel label3 = new JLabel();
|
||||
JPanel panel4 = new JPanel();
|
||||
JLabel label4 = new JLabel();
|
||||
tabbedPane4 = new JTabbedPane();
|
||||
JPanel panel7 = new JPanel();
|
||||
JLabel label7 = new JLabel();
|
||||
JPanel panel8 = new JPanel();
|
||||
JLabel label8 = new JLabel();
|
||||
JPanel panel14 = new JPanel();
|
||||
moreTabsCheckBox = new JCheckBox();
|
||||
tabScrollCheckBox = new JCheckBox();
|
||||
@@ -133,8 +168,8 @@ public class FlatContainerTest
|
||||
{
|
||||
panel9.setOpaque(false);
|
||||
panel9.setLayout(new FormLayout(
|
||||
"70dlu:grow, $lcgap, 70dlu:grow",
|
||||
"default, $lgap, fill:70dlu, $lgap, pref, 2*($lgap, fill:70dlu:grow), $lgap, pref"));
|
||||
"70dlu:grow, $ugap, 70dlu:grow",
|
||||
"default, $lgap, fill:70dlu, $pgap, pref, $lgap, 2*(fill:80dlu:grow, $ugap), pref"));
|
||||
|
||||
//---- splitPaneLabel ----
|
||||
splitPaneLabel.setText("JSplitPane:");
|
||||
@@ -149,35 +184,13 @@ public class FlatContainerTest
|
||||
splitPane1.setResizeWeight(0.5);
|
||||
splitPane1.setOneTouchExpandable(true);
|
||||
|
||||
//======== panel10 ========
|
||||
{
|
||||
panel10.setBackground(Color.orange);
|
||||
panel10.setLayout(new FlowLayout());
|
||||
//---- panel15 ----
|
||||
panel15.setBackground(new Color(217, 163, 67));
|
||||
splitPane1.setLeftComponent(panel15);
|
||||
|
||||
//---- textField2 ----
|
||||
textField2.setText("some text");
|
||||
panel10.add(textField2);
|
||||
|
||||
//---- button1 ----
|
||||
button1.setText("...");
|
||||
panel10.add(button1);
|
||||
}
|
||||
splitPane1.setLeftComponent(panel10);
|
||||
|
||||
//======== panel11 ========
|
||||
{
|
||||
panel11.setBackground(Color.magenta);
|
||||
panel11.setLayout(new FlowLayout());
|
||||
|
||||
//---- textField3 ----
|
||||
textField3.setText("some text");
|
||||
panel11.add(textField3);
|
||||
|
||||
//---- button2 ----
|
||||
button2.setText("...");
|
||||
panel11.add(button2);
|
||||
}
|
||||
splitPane1.setRightComponent(panel11);
|
||||
//---- panel21 ----
|
||||
panel21.setBackground(new Color(98, 181, 67));
|
||||
splitPane1.setRightComponent(panel21);
|
||||
}
|
||||
splitPane3.setLeftComponent(splitPane1);
|
||||
|
||||
@@ -189,15 +202,27 @@ public class FlatContainerTest
|
||||
|
||||
//======== panel12 ========
|
||||
{
|
||||
panel12.setBackground(Color.orange);
|
||||
panel12.setLayout(new FlowLayout());
|
||||
panel12.setBackground(new Color(242, 101, 34));
|
||||
panel12.setLayout(new BorderLayout());
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("TOP");
|
||||
label3.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label3.setForeground(Color.white);
|
||||
panel12.add(label3, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane2.setTopComponent(panel12);
|
||||
|
||||
//======== panel13 ========
|
||||
{
|
||||
panel13.setBackground(Color.magenta);
|
||||
panel13.setLayout(new FlowLayout());
|
||||
panel13.setBackground(new Color(64, 182, 224));
|
||||
panel13.setLayout(new BorderLayout());
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("BOTTOM");
|
||||
label4.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
label4.setForeground(Color.white);
|
||||
panel13.add(label4, BorderLayout.CENTER);
|
||||
}
|
||||
splitPane2.setBottomComponent(panel13);
|
||||
}
|
||||
@@ -208,128 +233,23 @@ public class FlatContainerTest
|
||||
//---- tabbedPaneLabel ----
|
||||
tabbedPaneLabel.setText("JTabbedPane:");
|
||||
panel9.add(tabbedPaneLabel, cc.xy(1, 5));
|
||||
|
||||
//======== tabbedPane1 ========
|
||||
{
|
||||
|
||||
//======== panel1 ========
|
||||
{
|
||||
panel1.setLayout(new FlowLayout());
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("TOP");
|
||||
panel1.add(label1);
|
||||
|
||||
//---- textField4 ----
|
||||
textField4.setText("some text");
|
||||
panel1.add(textField4);
|
||||
|
||||
//---- button3 ----
|
||||
button3.setText("...");
|
||||
panel1.add(button3);
|
||||
}
|
||||
tabbedPane1.addTab("Tab 1", panel1);
|
||||
|
||||
//======== panel2 ========
|
||||
{
|
||||
panel2.setBorder(new LineBorder(Color.magenta));
|
||||
panel2.setLayout(new FlowLayout());
|
||||
|
||||
//---- textField5 ----
|
||||
textField5.setText("some text");
|
||||
panel2.add(textField5);
|
||||
|
||||
//---- button4 ----
|
||||
button4.setText("...");
|
||||
panel2.add(button4);
|
||||
}
|
||||
tabbedPane1.addTab("Tab 2", panel2);
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("text");
|
||||
tabbedPane1.addTab("Tab 3", label2);
|
||||
}
|
||||
panel9.add(tabbedPane1, cc.xy(1, 7));
|
||||
|
||||
//======== tabbedPane3 ========
|
||||
{
|
||||
tabbedPane3.setTabPlacement(SwingConstants.LEFT);
|
||||
|
||||
//======== panel5 ========
|
||||
{
|
||||
panel5.setLayout(new FlowLayout());
|
||||
|
||||
//---- label5 ----
|
||||
label5.setText("LEFT");
|
||||
panel5.add(label5);
|
||||
}
|
||||
tabbedPane3.addTab("Tab 1", panel5);
|
||||
|
||||
//======== panel6 ========
|
||||
{
|
||||
panel6.setBorder(new LineBorder(Color.magenta));
|
||||
panel6.setLayout(new FlowLayout());
|
||||
}
|
||||
tabbedPane3.addTab("Tab 2", panel6);
|
||||
|
||||
//---- label6 ----
|
||||
label6.setText("text");
|
||||
tabbedPane3.addTab("Tab 3", label6);
|
||||
}
|
||||
panel9.add(tabbedPane3, cc.xy(3, 7));
|
||||
|
||||
//======== tabbedPane2 ========
|
||||
{
|
||||
tabbedPane2.setTabPlacement(SwingConstants.BOTTOM);
|
||||
|
||||
//======== panel3 ========
|
||||
{
|
||||
panel3.setLayout(new FlowLayout());
|
||||
|
||||
//---- label3 ----
|
||||
label3.setText("BOTTOM");
|
||||
panel3.add(label3);
|
||||
}
|
||||
tabbedPane2.addTab("Tab 1", panel3);
|
||||
|
||||
//======== panel4 ========
|
||||
{
|
||||
panel4.setBorder(new LineBorder(Color.magenta));
|
||||
panel4.setLayout(new FlowLayout());
|
||||
}
|
||||
tabbedPane2.addTab("Tab 2", panel4);
|
||||
tabbedPane2.setEnabledAt(1, false);
|
||||
|
||||
//---- label4 ----
|
||||
label4.setText("text");
|
||||
tabbedPane2.addTab("Tab 3", label4);
|
||||
}
|
||||
panel9.add(tabbedPane2, cc.xy(1, 9));
|
||||
|
||||
//======== tabbedPane4 ========
|
||||
{
|
||||
tabbedPane4.setTabPlacement(SwingConstants.RIGHT);
|
||||
|
||||
//======== panel7 ========
|
||||
{
|
||||
panel7.setLayout(new FlowLayout());
|
||||
|
||||
//---- label7 ----
|
||||
label7.setText("RIGHT");
|
||||
panel7.add(label7);
|
||||
}
|
||||
tabbedPane4.addTab("Tab 1", panel7);
|
||||
|
||||
//======== panel8 ========
|
||||
{
|
||||
panel8.setBorder(new LineBorder(Color.magenta));
|
||||
panel8.setLayout(new FlowLayout());
|
||||
}
|
||||
tabbedPane4.addTab("Tab 2", panel8);
|
||||
|
||||
//---- label8 ----
|
||||
label8.setText("text");
|
||||
tabbedPane4.addTab("Tab 3", label8);
|
||||
}
|
||||
panel9.add(tabbedPane4, cc.xy(3, 9));
|
||||
|
||||
@@ -347,25 +267,24 @@ public class FlatContainerTest
|
||||
"[center]"));
|
||||
|
||||
//---- moreTabsCheckBox ----
|
||||
moreTabsCheckBox.setText("more tabs");
|
||||
moreTabsCheckBox.setText("More tabs");
|
||||
moreTabsCheckBox.setMnemonic('M');
|
||||
moreTabsCheckBox.addActionListener(e -> moreTabsChanged());
|
||||
panel14.add(moreTabsCheckBox, "cell 0 0");
|
||||
|
||||
//---- tabScrollCheckBox ----
|
||||
tabScrollCheckBox.setText("tabLayoutPolicy = SCROLL");
|
||||
tabScrollCheckBox.setText("Use scroll layout");
|
||||
tabScrollCheckBox.setMnemonic('S');
|
||||
tabScrollCheckBox.addActionListener(e -> tabScrollChanged());
|
||||
panel14.add(tabScrollCheckBox, "cell 1 0,alignx left,growx 0");
|
||||
|
||||
//---- showTabSeparatorsCheckBox ----
|
||||
showTabSeparatorsCheckBox.setText("JTabbedPane.showTabSeparators");
|
||||
showTabSeparatorsCheckBox.setText("Show tab separators");
|
||||
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
||||
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
||||
|
||||
//---- hasFullBorderCheckBox ----
|
||||
hasFullBorderCheckBox.setText("JTabbedPane.hasFullBorder");
|
||||
hasFullBorderCheckBox.setMnemonic('F');
|
||||
hasFullBorderCheckBox.setText("Show content border");
|
||||
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
||||
panel14.add(hasFullBorderCheckBox, "cell 3 0,alignx left,growx 0");
|
||||
}
|
||||
@@ -385,4 +304,84 @@ public class FlatContainerTest
|
||||
private JCheckBox showTabSeparatorsCheckBox;
|
||||
private JCheckBox hasFullBorderCheckBox;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
|
||||
//---- class Tab1Panel ----------------------------------------------------
|
||||
|
||||
private static class Panel1
|
||||
extends JPanel
|
||||
{
|
||||
private Panel1() {
|
||||
initComponents();
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
JLabel label1 = new JLabel();
|
||||
JTextField textField4 = new JTextField();
|
||||
JButton button3 = new JButton();
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"hidemode 3,align center center",
|
||||
// columns
|
||||
"[fill]" +
|
||||
"[fill]" +
|
||||
"[fill]",
|
||||
// rows
|
||||
"[fill]"));
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("text");
|
||||
add(label1, "cell 0 0");
|
||||
|
||||
//---- textField4 ----
|
||||
textField4.setText("some text");
|
||||
add(textField4, "cell 1 0");
|
||||
|
||||
//---- button3 ----
|
||||
button3.setText("...");
|
||||
add(button3, "cell 2 0");
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
}
|
||||
|
||||
//---- class Tab2Panel ----------------------------------------------------
|
||||
|
||||
private static class Panel2
|
||||
extends JPanel
|
||||
{
|
||||
private Panel2() {
|
||||
initComponents();
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
JTextField textField5 = new JTextField();
|
||||
JButton button4 = new JButton();
|
||||
|
||||
//======== this ========
|
||||
setLayout(new MigLayout(
|
||||
"insets 0,hidemode 3,align center center",
|
||||
// columns
|
||||
"[fill]" +
|
||||
"[fill]",
|
||||
// rows
|
||||
"[fill]"));
|
||||
|
||||
//---- textField5 ----
|
||||
textField5.setText("more text");
|
||||
add(textField5, "cell 0 0");
|
||||
|
||||
//---- button4 ----
|
||||
button4.setText("...");
|
||||
add(button4, "cell 1 0");
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.1.0.272" Java: "13.0.1" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -13,8 +13,8 @@ new FormModel {
|
||||
} ) {
|
||||
name: "this"
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
|
||||
"$columnSpecs": "70dlu:grow, labelcompgap, 70dlu:grow"
|
||||
"$rowSpecs": "default, linegap, fill:70dlu, linegap, pref, linegap, fill:70dlu:grow, linegap, fill:70dlu:grow, linegap, pref"
|
||||
"$columnSpecs": "70dlu:grow, unrelgap, 70dlu:grow"
|
||||
"$rowSpecs": "default, linegap, fill:70dlu, pargap, pref, linegap, fill:80dlu:grow, unrelgap, fill:80dlu:grow, unrelgap, pref"
|
||||
} ) {
|
||||
name: "panel9"
|
||||
"opaque": false
|
||||
@@ -29,31 +29,15 @@ new FormModel {
|
||||
name: "splitPane1"
|
||||
"resizeWeight": 0.5
|
||||
"oneTouchExpandable": true
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel10"
|
||||
"background": sfield java.awt.Color orange
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField2"
|
||||
"text": "some text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "button1"
|
||||
"text": "..."
|
||||
} )
|
||||
add( new FormComponent( "com.formdev.flatlaf.testing.FlatContainerTest$Panel1" ) {
|
||||
name: "panel15"
|
||||
"background": new java.awt.Color( 217, 163, 67, 255 )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel11"
|
||||
"background": sfield java.awt.Color magenta
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField3"
|
||||
"text": "some text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "button2"
|
||||
"text": "..."
|
||||
} )
|
||||
add( new FormComponent( "com.formdev.flatlaf.testing.FlatContainerTest$Panel2" ) {
|
||||
name: "panel21"
|
||||
"background": new java.awt.Color( 98, 181, 67, 255 )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
@@ -65,15 +49,31 @@ new FormModel {
|
||||
"orientation": 0
|
||||
"resizeWeight": 0.5
|
||||
"oneTouchExpandable": true
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel12"
|
||||
"background": sfield java.awt.Color orange
|
||||
"background": new java.awt.Color( 242, 101, 34, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "TOP"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "left"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "panel13"
|
||||
"background": sfield java.awt.Color magenta
|
||||
"background": new java.awt.Color( 64, 182, 224, 255 )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
"text": "BOTTOM"
|
||||
"horizontalAlignment": 0
|
||||
"foreground": sfield java.awt.Color white
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "Center"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||
"value": "right"
|
||||
} )
|
||||
@@ -96,43 +96,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel1"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
"text": "TOP"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField4"
|
||||
"text": "some text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "button3"
|
||||
"text": "..."
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel2"
|
||||
"border": &LineBorder0 new javax.swing.border.LineBorder( sfield java.awt.Color magenta, 1, false )
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField5"
|
||||
"text": "some text"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "button4"
|
||||
"text": "..."
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 1
|
||||
"gridY": 7
|
||||
@@ -143,27 +106,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel5"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label5"
|
||||
"text": "LEFT"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel6"
|
||||
"border": #LineBorder0
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label6"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 3
|
||||
"gridY": 7
|
||||
@@ -174,28 +116,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel3"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label3"
|
||||
"text": "BOTTOM"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel4"
|
||||
"border": #LineBorder0
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
"enabled": false
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label4"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridY": 9
|
||||
} )
|
||||
@@ -205,27 +125,6 @@ new FormModel {
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel7"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label7"
|
||||
"text": "RIGHT"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 1"
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
||||
name: "panel8"
|
||||
"border": #LineBorder0
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 2"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label8"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"title": "Tab 3"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||
"gridX": 3
|
||||
"gridY": 9
|
||||
@@ -239,7 +138,7 @@ new FormModel {
|
||||
"opaque": false
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "moreTabsCheckBox"
|
||||
"text": "more tabs"
|
||||
"text": "More tabs"
|
||||
"mnemonic": 77
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
@@ -250,7 +149,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "tabScrollCheckBox"
|
||||
"text": "tabLayoutPolicy = SCROLL"
|
||||
"text": "Use scroll layout"
|
||||
"mnemonic": 83
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
@@ -261,7 +160,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "showTabSeparatorsCheckBox"
|
||||
"text": "JTabbedPane.showTabSeparators"
|
||||
"text": "Show tab separators"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
@@ -271,8 +170,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||
name: "hasFullBorderCheckBox"
|
||||
"text": "JTabbedPane.hasFullBorder"
|
||||
"mnemonic": 70
|
||||
"text": "Show content border"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
@@ -291,5 +189,61 @@ new FormModel {
|
||||
"location": new java.awt.Point( 0, 0 )
|
||||
"size": new java.awt.Dimension( 625, 515 )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "hidemode 3,align center center"
|
||||
"$columnConstraints": "[fill][fill][fill]"
|
||||
"$rowConstraints": "[fill]"
|
||||
} ) {
|
||||
name: "panel1"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.className": "Panel1"
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label1"
|
||||
"text": "text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField4"
|
||||
"text": "some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "button3"
|
||||
"text": "..."
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 0, 595 )
|
||||
"size": new java.awt.Dimension( 291, 118 )
|
||||
} )
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3,align center center"
|
||||
"$columnConstraints": "[fill][fill]"
|
||||
"$rowConstraints": "[fill]"
|
||||
} ) {
|
||||
name: "panel2"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.className": "Panel2"
|
||||
}
|
||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||
name: "textField5"
|
||||
"text": "more text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 0"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "button4"
|
||||
"text": "..."
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0"
|
||||
} )
|
||||
}, new FormLayoutConstraints( null ) {
|
||||
"location": new java.awt.Point( 340, 595 )
|
||||
"size": new java.awt.Dimension( 291, 118 )
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,6 +86,9 @@ public class FlatHtmlTest
|
||||
label10 = new JLabel();
|
||||
radioButtonMenuItem1 = new JRadioButtonMenuItem();
|
||||
radioButtonMenuItem2 = new JRadioButtonMenuItem();
|
||||
label14 = new JLabel();
|
||||
label15 = new JLabel();
|
||||
label16 = new JLabel();
|
||||
label1 = new JLabel();
|
||||
scrollPane15 = new JScrollPane();
|
||||
editorPane1 = new JEditorPane();
|
||||
@@ -146,6 +149,7 @@ public class FlatHtmlTest
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]" +
|
||||
"[]"));
|
||||
|
||||
//---- label5 ----
|
||||
@@ -173,7 +177,7 @@ public class FlatHtmlTest
|
||||
panel1.add(button2, "cell 2 1");
|
||||
|
||||
//---- label11 ----
|
||||
label11.setText("text");
|
||||
label11.setText("JToggleButton:");
|
||||
panel1.add(label11, "cell 0 2");
|
||||
|
||||
//---- toggleButton1 ----
|
||||
@@ -187,7 +191,7 @@ public class FlatHtmlTest
|
||||
panel1.add(toggleButton2, "cell 2 2");
|
||||
|
||||
//---- label12 ----
|
||||
label12.setText("text");
|
||||
label12.setText("JCheckBox:");
|
||||
panel1.add(label12, "cell 0 3");
|
||||
|
||||
//---- checkBox1 ----
|
||||
@@ -199,7 +203,7 @@ public class FlatHtmlTest
|
||||
panel1.add(checkBox2, "cell 2 3");
|
||||
|
||||
//---- label13 ----
|
||||
label13.setText("text");
|
||||
label13.setText("JRadioButton:");
|
||||
panel1.add(label13, "cell 0 4");
|
||||
|
||||
//---- radioButton1 ----
|
||||
@@ -265,6 +269,20 @@ public class FlatHtmlTest
|
||||
radioButtonMenuItem2.setText("Some text");
|
||||
radioButtonMenuItem2.setSelected(true);
|
||||
panel1.add(radioButtonMenuItem2, "cell 2 8");
|
||||
|
||||
//---- label14 ----
|
||||
label14.setText("JToolTip:");
|
||||
panel1.add(label14, "cell 0 9");
|
||||
|
||||
//---- label15 ----
|
||||
label15.setText("(move mouse here)");
|
||||
label15.setToolTipText("<html>Some <b>Bold</b> Text");
|
||||
panel1.add(label15, "cell 1 9");
|
||||
|
||||
//---- label16 ----
|
||||
label16.setText("(move mouse here)");
|
||||
label16.setToolTipText("Some text");
|
||||
panel1.add(label16, "cell 2 9");
|
||||
}
|
||||
add(panel1, "cell 4 0 1 3,aligny top,growy 0");
|
||||
|
||||
@@ -379,6 +397,9 @@ public class FlatHtmlTest
|
||||
private JLabel label10;
|
||||
private JRadioButtonMenuItem radioButtonMenuItem1;
|
||||
private JRadioButtonMenuItem radioButtonMenuItem2;
|
||||
private JLabel label14;
|
||||
private JLabel label15;
|
||||
private JLabel label16;
|
||||
private JLabel label1;
|
||||
private JScrollPane scrollPane15;
|
||||
private JEditorPane editorPane1;
|
||||
|
||||
@@ -36,7 +36,7 @@ new FormModel {
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||
"$layoutConstraints": "insets 0,hidemode 3"
|
||||
"$columnConstraints": "[fill][fill][fill]"
|
||||
"$rowConstraints": "[][][][][][][][][]"
|
||||
"$rowConstraints": "[][][][][][][][][][]"
|
||||
} ) {
|
||||
name: "panel1"
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
@@ -77,7 +77,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label11"
|
||||
"text": "text"
|
||||
"text": "JToggleButton:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 2"
|
||||
} )
|
||||
@@ -97,7 +97,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label12"
|
||||
"text": "text"
|
||||
"text": "JCheckBox:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 3"
|
||||
} )
|
||||
@@ -115,7 +115,7 @@ new FormModel {
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label13"
|
||||
"text": "text"
|
||||
"text": "JRadioButton:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 4"
|
||||
} )
|
||||
@@ -207,6 +207,26 @@ new FormModel {
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 8"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label14"
|
||||
"text": "JToolTip:"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 0 9"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label15"
|
||||
"text": "(move mouse here)"
|
||||
"toolTipText": "<html>Some <b>Bold</b> Text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 9"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label16"
|
||||
"text": "(move mouse here)"
|
||||
"toolTipText": "Some text"
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 9"
|
||||
} )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 4 0 1 3,aligny top,growy 0"
|
||||
} )
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
/*
|
||||
* Created by JFormDesigner on Tue Aug 27 21:47:02 CEST 2019
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.testing;
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright 2020 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.formdev.flatlaf.testing;
|
||||
|
||||
import java.awt.DisplayMode;
|
||||
import java.awt.GraphicsConfiguration;
|
||||
import java.awt.GraphicsDevice;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
/**
|
||||
* Displays information about screens connected to a computer.
|
||||
*
|
||||
* This is a single-file program that can be compiled/run without any other
|
||||
* FlatLaf code or dependencies.
|
||||
*
|
||||
* Since Java 11, you can run this program from source with:
|
||||
* java FlatScreenInfo.java
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class FlatScreenInfo
|
||||
{
|
||||
public static void main( String[] args ) {
|
||||
SwingUtilities.invokeLater( () -> {
|
||||
printScreenInfo();
|
||||
} );
|
||||
}
|
||||
|
||||
private static void printScreenInfo() {
|
||||
Toolkit toolkit = Toolkit.getDefaultToolkit();
|
||||
GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||
GraphicsDevice defaultScreenDevice = graphicsEnvironment.getDefaultScreenDevice();
|
||||
GraphicsDevice[] screenDevices = graphicsEnvironment.getScreenDevices();
|
||||
|
||||
System.out.print( "Scale factors: " );
|
||||
for( GraphicsDevice gd : screenDevices ) {
|
||||
GraphicsConfiguration gc = gd.getDefaultConfiguration();
|
||||
|
||||
if( gd != screenDevices[0] )
|
||||
System.out.print( " / " );
|
||||
|
||||
System.out.print( (int) (gc.getDefaultTransform().getScaleX() * 100) );
|
||||
System.out.print( "%" );
|
||||
}
|
||||
System.out.println();
|
||||
|
||||
System.out.println( "Java version: " + System.getProperty( "java.version" ) );
|
||||
|
||||
for( GraphicsDevice gd : screenDevices ) {
|
||||
GraphicsConfiguration gc = gd.getDefaultConfiguration();
|
||||
DisplayMode displayMode = gd.getDisplayMode();
|
||||
Rectangle bounds = gc.getBounds();
|
||||
int width = displayMode.getWidth();
|
||||
int height = displayMode.getHeight();
|
||||
double boundsScaleX = (bounds.width > width)
|
||||
? (double) bounds.width / (double) width
|
||||
: -((double) width / (double) bounds.width);
|
||||
double boundsScaleY = (bounds.height > height)
|
||||
? (double) bounds.height / (double) height
|
||||
: -((double) height / (double) bounds.height);
|
||||
boundsScaleX = Math.round( boundsScaleX * 1000. ) / 1000.;
|
||||
boundsScaleY = Math.round( boundsScaleY * 1000. ) / 1000.;
|
||||
Insets screenInsets = toolkit.getScreenInsets( gc );
|
||||
AffineTransform defaultTransform = gc.getDefaultTransform();
|
||||
double scaleX = defaultTransform.getScaleX();
|
||||
double scaleY = defaultTransform.getScaleY();
|
||||
|
||||
System.out.println();
|
||||
System.out.print( "ID: " + gd.getIDstring() );
|
||||
if( gd == defaultScreenDevice )
|
||||
System.out.print( " (main)" );
|
||||
System.out.println();
|
||||
|
||||
System.out.printf( "Size: %d x %d / %d Bit / %d Hz%n",
|
||||
displayMode.getWidth(), displayMode.getHeight(),
|
||||
displayMode.getBitDepth(), displayMode.getRefreshRate() );
|
||||
System.out.printf( "Bounds: %d x %d / x %d / y %d",
|
||||
bounds.width, bounds.height, bounds.x, bounds.y );
|
||||
if( Math.abs( boundsScaleX ) != 1 || Math.abs( boundsScaleY ) != 1 )
|
||||
System.out.printf( " (scale %s)", toString( boundsScaleX, boundsScaleY ) );
|
||||
System.out.println();
|
||||
System.out.printf( "Insets: left %d / right %d / top %d / bottom %d%n",
|
||||
screenInsets.left, screenInsets.right, screenInsets.top, screenInsets.bottom );
|
||||
System.out.println( "Scale: " + toString( scaleX, scaleY ) );
|
||||
}
|
||||
}
|
||||
|
||||
private static String toString( double scaleX, double scaleY ) {
|
||||
return (scaleX == scaleY)
|
||||
? String.valueOf( scaleX )
|
||||
: scaleX + " / " + scaleY;
|
||||
}
|
||||
}
|
||||
@@ -74,9 +74,16 @@ public class FlatTestFrame
|
||||
System.setProperty( FlatSystemProperties.UI_SCALE, scaleFactor );
|
||||
}
|
||||
|
||||
// install inspectors
|
||||
FlatInspector.install( "ctrl shift alt X" );
|
||||
FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||
|
||||
// disable animated Laf change
|
||||
System.setProperty( "flatlaf.animatedLafChange", "false" );
|
||||
|
||||
// test loading custom defaults from package
|
||||
FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.testing.customdefaults" );
|
||||
|
||||
// set look and feel
|
||||
DemoPrefs.initLaf( args );
|
||||
|
||||
@@ -246,6 +253,13 @@ public class FlatTestFrame
|
||||
} );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
|
||||
FlatUIDefaultsInspector.hide();
|
||||
}
|
||||
|
||||
private void updateTitle() {
|
||||
double systemScaleFactor = UIScale.getSystemScaleFactor( getGraphicsConfiguration() );
|
||||
float userScaleFactor = UIScale.getUserScaleFactor();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "13.0.2" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
|
||||
@@ -78,6 +78,10 @@ public class FlatWindowDecorationsTest
|
||||
menuBarEmbeddedCheckBox.setEnabled( window instanceof JFrame );
|
||||
maximizedBoundsCheckBox.setEnabled( window instanceof Frame );
|
||||
|
||||
addMenuButton.setEnabled( menuBarCheckBox.isEnabled() );
|
||||
removeMenuButton.setEnabled( menuBarCheckBox.isEnabled() );
|
||||
changeMenuButton.setEnabled( menuBarCheckBox.isEnabled() );
|
||||
|
||||
boolean windowHasIcons = (window != null && !window.getIconImages().isEmpty());
|
||||
iconNoneRadioButton.setEnabled( windowHasIcons );
|
||||
iconTestAllRadioButton.setEnabled( windowHasIcons );
|
||||
@@ -246,9 +250,9 @@ public class FlatWindowDecorationsTest
|
||||
private void initComponents() {
|
||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||
menuBarCheckBox = new JCheckBox();
|
||||
JButton addMenuButton = new JButton();
|
||||
JButton removeMenuButton = new JButton();
|
||||
JButton changeMenuButton = new JButton();
|
||||
addMenuButton = new JButton();
|
||||
removeMenuButton = new JButton();
|
||||
changeMenuButton = new JButton();
|
||||
menuBarEmbeddedCheckBox = new JCheckBox();
|
||||
resizableCheckBox = new JCheckBox();
|
||||
maximizedBoundsCheckBox = new JCheckBox();
|
||||
@@ -652,6 +656,9 @@ public class FlatWindowDecorationsTest
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
private JCheckBox menuBarCheckBox;
|
||||
private JButton addMenuButton;
|
||||
private JButton removeMenuButton;
|
||||
private JButton changeMenuButton;
|
||||
private JCheckBox menuBarEmbeddedCheckBox;
|
||||
private JCheckBox resizableCheckBox;
|
||||
private JCheckBox maximizedBoundsCheckBox;
|
||||
|
||||
@@ -26,6 +26,9 @@ new FormModel {
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "addMenuButton"
|
||||
"text": "Add menu"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "addMenu", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0 1 2,align left top,grow 0 0"
|
||||
@@ -33,6 +36,9 @@ new FormModel {
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "removeMenuButton"
|
||||
"text": "Remove menu"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "removeMenu", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0 1 2,align left top,grow 0 0"
|
||||
@@ -40,6 +46,9 @@ new FormModel {
|
||||
add( new FormComponent( "javax.swing.JButton" ) {
|
||||
name: "changeMenuButton"
|
||||
"text": "Change menu"
|
||||
auxiliary() {
|
||||
"JavaCodeGenerator.variableLocal": false
|
||||
}
|
||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "changeMenu", false ) )
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 1 0 1 2,align left top,grow 0 0"
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.formdev.flatlaf.testing.extras;
|
||||
|
||||
import javax.swing.*;
|
||||
import com.formdev.flatlaf.FlatIconColors;
|
||||
import com.formdev.flatlaf.extras.*;
|
||||
import com.formdev.flatlaf.testing.*;
|
||||
import net.miginfocom.swing.*;
|
||||
@@ -31,7 +30,6 @@ public class FlatExtrasTest
|
||||
public static void main( String[] args ) {
|
||||
SwingUtilities.invokeLater( () -> {
|
||||
FlatTestFrame frame = FlatTestFrame.create( args, "FlatExtrasTest" );
|
||||
System.out.println( UIManager.getColor( FlatIconColors.ACTIONS_GREY.key ) );
|
||||
frame.showFrame( FlatExtrasTest::new );
|
||||
} );
|
||||
}
|
||||
@@ -109,7 +107,8 @@ public class FlatExtrasTest
|
||||
|
||||
//---- triStateLabel1 ----
|
||||
triStateLabel1.setText("text");
|
||||
add(triStateLabel1, "cell 2 0");
|
||||
triStateLabel1.setEnabled(false);
|
||||
add(triStateLabel1, "cell 2 0,gapx 30");
|
||||
|
||||
//---- triStateCheckBox2 ----
|
||||
triStateCheckBox2.setText("third state disabled");
|
||||
@@ -119,7 +118,8 @@ public class FlatExtrasTest
|
||||
|
||||
//---- triStateLabel2 ----
|
||||
triStateLabel2.setText("text");
|
||||
add(triStateLabel2, "cell 2 1");
|
||||
triStateLabel2.setEnabled(false);
|
||||
add(triStateLabel2, "cell 2 1,gapx 30");
|
||||
|
||||
//---- label2 ----
|
||||
label2.setText("SVG Icons:");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.1.0.272" Java: "13.0.2" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -25,8 +25,9 @@ new FormModel {
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "triStateLabel1"
|
||||
"text": "text"
|
||||
"enabled": false
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 0"
|
||||
"value": "cell 2 0,gapx 30"
|
||||
} )
|
||||
add( new FormComponent( "com.formdev.flatlaf.extras.TriStateCheckBox" ) {
|
||||
name: "triStateCheckBox2"
|
||||
@@ -39,8 +40,9 @@ new FormModel {
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "triStateLabel2"
|
||||
"text": "text"
|
||||
"enabled": false
|
||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||
"value": "cell 2 1"
|
||||
"value": "cell 2 1,gapx 30"
|
||||
} )
|
||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||
name: "label2"
|
||||
|
||||
@@ -61,6 +61,7 @@ import javax.swing.plaf.UIResource;
|
||||
import javax.swing.plaf.basic.BasicLookAndFeel;
|
||||
import com.formdev.flatlaf.*;
|
||||
import com.formdev.flatlaf.intellijthemes.FlatAllIJThemes;
|
||||
import com.formdev.flatlaf.testing.FlatTestLaf;
|
||||
import com.formdev.flatlaf.ui.FlatLineBorder;
|
||||
import com.formdev.flatlaf.util.ColorFunctions.ColorFunction;
|
||||
import com.formdev.flatlaf.util.ColorFunctions.HSLIncreaseDecrease;
|
||||
@@ -96,6 +97,8 @@ public class UIDefaultsDump
|
||||
dump( FlatDarculaLaf.class.getName(), dir );
|
||||
}
|
||||
|
||||
dump( FlatTestLaf.class.getName(), dir );
|
||||
|
||||
// dump( MyBasicLookAndFeel.class.getName(), dir );
|
||||
// dump( MetalLookAndFeel.class.getName(), dir );
|
||||
// dump( NimbusLookAndFeel.class.getName(), dir );
|
||||
|
||||
@@ -16,19 +16,21 @@
|
||||
|
||||
#---- variables ----
|
||||
|
||||
@background=#ccffcc
|
||||
@foreground=#ff0000
|
||||
@selectionBackground=#00aa00
|
||||
@selectionForeground=#ffff00
|
||||
@selectionInactiveBackground=#888888
|
||||
@selectionInactiveForeground=#ffffff
|
||||
@disabledText=#000088
|
||||
@textComponentBackground=#ffffff
|
||||
@background=#cfc
|
||||
@foreground=#f00
|
||||
@selectionBackground=#0a0
|
||||
@selectionForeground=#ff0
|
||||
@selectionInactiveBackground=#888
|
||||
@selectionInactiveForeground=#fff
|
||||
@disabledText=#008
|
||||
@textComponentBackground=#fff
|
||||
@menuBackground=#fff
|
||||
@menuHoverBackground=darken(@menuBackground,10%)
|
||||
@menuCheckBackground=darken(@menuBackground,10%)
|
||||
@menuCheckHoverBackground=darken(@menuBackground,20%)
|
||||
@cellFocusColor=#ff0000
|
||||
@menuAcceleratorForeground=#f88
|
||||
@menuAcceleratorSelectionForeground=#fff
|
||||
@cellFocusColor=#f00
|
||||
@icon=#afafaf
|
||||
|
||||
@dropCellBackground=#f00
|
||||
@@ -39,20 +41,10 @@
|
||||
|
||||
#---- globals ----
|
||||
|
||||
*.background=@background
|
||||
*.foreground=@foreground
|
||||
*.textBackground=#ccffcc
|
||||
*.textForeground=#ff0000
|
||||
*.caretForeground=#0000ff
|
||||
*.caretForeground=#00f
|
||||
*.inactiveBackground=#f0f0f0
|
||||
*.inactiveForeground=#000088
|
||||
*.selectionBackground=@selectionBackground
|
||||
*.selectionForeground=@selectionForeground
|
||||
*.inactiveForeground=#008
|
||||
*.disabledBackground=#e0e0e0
|
||||
*.disabledForeground=@disabledText
|
||||
*.disabledText=@disabledText
|
||||
*.acceleratorForeground=#ff8888
|
||||
*.acceleratorSelectionForeground=#ffffff
|
||||
|
||||
|
||||
#---- system colors ----
|
||||
@@ -69,40 +61,40 @@ controlDkShadow=#696969
|
||||
|
||||
Button.startBackground=#fff
|
||||
Button.endBackground=#bbb
|
||||
Button.focusedBackground=#00ffff
|
||||
Button.hoverBackground=#ffff00
|
||||
Button.focusedBackground=#0ff
|
||||
Button.hoverBackground=#ff0
|
||||
Button.pressedBackground=#FFC800
|
||||
|
||||
Button.startBorderColor=#00f
|
||||
Button.endBorderColor=#f00
|
||||
Button.disabledBorderColor=#000088
|
||||
Button.disabledBorderColor=#008
|
||||
Button.focusedBorderColor=#466d94
|
||||
Button.hoverBorderColor=#ff0000
|
||||
Button.hoverBorderColor=#f00
|
||||
|
||||
Button.default.startBackground=#ddd
|
||||
Button.default.endBackground=#888
|
||||
Button.default.foreground=#880000
|
||||
Button.default.focusedBackground=#00ffff
|
||||
Button.default.hoverBackground=#ffff00
|
||||
Button.default.foreground=#800
|
||||
Button.default.focusedBackground=#0ff
|
||||
Button.default.hoverBackground=#ff0
|
||||
Button.default.pressedBackground=#FFC800
|
||||
Button.default.startBorderColor=#f00
|
||||
Button.default.endBorderColor=#00f
|
||||
Button.default.hoverBorderColor=#ff0000
|
||||
Button.default.hoverBorderColor=#f00
|
||||
Button.default.focusedBorderColor=#537699
|
||||
Button.default.focusColor=#ff0000
|
||||
Button.default.focusColor=#f00
|
||||
|
||||
Button.toolbar.hoverBackground=#ffffff
|
||||
Button.toolbar.pressedBackground=#eeeeee
|
||||
Button.toolbar.hoverBackground=#fff
|
||||
Button.toolbar.pressedBackground=#eee
|
||||
|
||||
|
||||
#---- CheckBox ----
|
||||
|
||||
# enabled
|
||||
CheckBox.icon.borderColor=#878787
|
||||
CheckBox.icon.background=#FFFFFF
|
||||
CheckBox.icon.background=#fff
|
||||
CheckBox.icon.selectedBorderColor=#4982CC
|
||||
CheckBox.icon.selectedBackground=#4D89C9
|
||||
CheckBox.icon.checkmarkColor=#FFFFFF
|
||||
CheckBox.icon.checkmarkColor=#fff
|
||||
|
||||
# disabled
|
||||
CheckBox.icon.disabledBorderColor=#BDBDBD
|
||||
@@ -111,12 +103,12 @@ CheckBox.icon.disabledCheckmarkColor=#ABABAB
|
||||
|
||||
# focused
|
||||
CheckBox.icon.focusedBorderColor=#7B9FC7
|
||||
CheckBox.icon.focusedBackground=#00ffff
|
||||
CheckBox.icon.focusedBackground=#0ff
|
||||
CheckBox.icon.selectedFocusedBorderColor=#ACCFF7
|
||||
|
||||
# hover
|
||||
CheckBox.icon.hoverBorderColor=#ff0000
|
||||
CheckBox.icon.hoverBackground=#ffff00
|
||||
CheckBox.icon.hoverBorderColor=#f00
|
||||
CheckBox.icon.hoverBackground=#ff0
|
||||
|
||||
# pressed
|
||||
CheckBox.icon.pressedBackground=#FFC800
|
||||
@@ -124,18 +116,18 @@ CheckBox.icon.pressedBackground=#FFC800
|
||||
|
||||
#---- ComboBox ----
|
||||
|
||||
ComboBox.background=#ffffff
|
||||
ComboBox.background=#fff
|
||||
ComboBox.buttonBackground=#f0f0f0
|
||||
ComboBox.buttonEditableBackground=#cccccc
|
||||
ComboBox.buttonArrowColor=#666666
|
||||
ComboBox.buttonEditableBackground=#ccc
|
||||
ComboBox.buttonArrowColor=#666
|
||||
ComboBox.buttonDisabledArrowColor=#ABABAB
|
||||
ComboBox.buttonHoverArrowColor=#ff0000
|
||||
ComboBox.buttonHoverArrowColor=#f00
|
||||
|
||||
|
||||
#---- Component ----
|
||||
|
||||
Component.borderColor=#ff0000
|
||||
Component.disabledBorderColor=#000088
|
||||
Component.borderColor=#f00
|
||||
Component.disabledBorderColor=#008
|
||||
Component.focusedBorderColor=#466d94
|
||||
Component.focusColor=#97c3f3
|
||||
#Component.focusWidth=5
|
||||
@@ -155,7 +147,7 @@ DesktopIcon.background=darken($Desktop.background,20%)
|
||||
|
||||
#---- HelpButton ----
|
||||
|
||||
HelpButton.questionMarkColor=#0000ff
|
||||
HelpButton.questionMarkColor=#00f
|
||||
|
||||
|
||||
#---- InternalFrame ----
|
||||
@@ -178,16 +170,16 @@ InternalFrame.closePressedForeground=#fff
|
||||
|
||||
#---- Label ----
|
||||
|
||||
Label.foreground=#008800
|
||||
Label.disabledForeground=#000088
|
||||
Label.foreground=#080
|
||||
Label.disabledForeground=#008
|
||||
|
||||
|
||||
#---- List ----
|
||||
|
||||
List.background=#f0ffff
|
||||
List.cellNoFocusBorder=1,6,1,6
|
||||
List.focusSelectedCellHighlightBorder=1,6,1,6,#880000
|
||||
List.focusCellHighlightBorder=1,6,1,6,#880000
|
||||
List.focusSelectedCellHighlightBorder=1,6,1,6,#800
|
||||
List.focusCellHighlightBorder=1,6,1,6,#800
|
||||
|
||||
|
||||
#---- Menu ----
|
||||
@@ -198,7 +190,7 @@ Menu.icon.disabledArrowColor=#ABABAB
|
||||
|
||||
#---- MenuBar ----
|
||||
|
||||
MenuBar.borderColor=#4444ff
|
||||
MenuBar.borderColor=#44f
|
||||
MenuBar.hoverBackground=#fdd
|
||||
|
||||
|
||||
@@ -210,14 +202,14 @@ MenuItemCheckBox.icon.disabledCheckmarkColor=#ABABAB
|
||||
|
||||
#---- OptionPane ----
|
||||
|
||||
OptionPane.background=#ffdddd
|
||||
OptionPane.foreground=#ff0000
|
||||
OptionPane.background=#fdd
|
||||
OptionPane.foreground=#f00
|
||||
|
||||
OptionPane.icon.errorColor=#ff0000
|
||||
OptionPane.icon.informationColor=#00ff00
|
||||
OptionPane.icon.questionColor=#0000ff
|
||||
OptionPane.icon.warningColor=#ffcc00
|
||||
OptionPane.icon.foreground=#ffffff
|
||||
OptionPane.icon.errorColor=#f00
|
||||
OptionPane.icon.informationColor=#0f0
|
||||
OptionPane.icon.questionColor=#00f
|
||||
OptionPane.icon.warningColor=#fc0
|
||||
OptionPane.icon.foreground=#fff
|
||||
|
||||
|
||||
#---- Popup ----
|
||||
@@ -229,7 +221,7 @@ Popup.dropShadowInsets=-6,6,6,6
|
||||
|
||||
#---- PopupMenu ----
|
||||
|
||||
PopupMenu.borderColor=#0000ff
|
||||
PopupMenu.borderColor=#00f
|
||||
|
||||
|
||||
#---- PopupMenuSeparator ----
|
||||
@@ -241,24 +233,24 @@ PopupMenuSeparator.stripeIndent=1
|
||||
|
||||
#---- ProgressBar ----
|
||||
|
||||
ProgressBar.background=#88ff88
|
||||
ProgressBar.background=#8f8
|
||||
ProgressBar.foreground=#73737333
|
||||
ProgressBar.selectionForeground=#ff0000
|
||||
ProgressBar.selectionBackground=#000088
|
||||
ProgressBar.selectionForeground=#f00
|
||||
ProgressBar.selectionBackground=#008
|
||||
ProgressBar.cycleTime=10000
|
||||
|
||||
|
||||
#---- ScrollBar ----
|
||||
|
||||
ScrollBar.track=#88ff88
|
||||
ScrollBar.track=#8f8
|
||||
ScrollBar.thumb=#73737333
|
||||
ScrollBar.hoverTrackColor=#00ff00
|
||||
ScrollBar.hoverThumbColor=#ff0000
|
||||
ScrollBar.hoverTrackColor=#0f0
|
||||
ScrollBar.hoverThumbColor=#f00
|
||||
|
||||
|
||||
#---- Separator ----
|
||||
|
||||
Separator.foreground=#00bb00
|
||||
Separator.foreground=#0b0
|
||||
Separator.height=20
|
||||
Separator.stripeWidth=10
|
||||
Separator.stripeIndent=5
|
||||
@@ -266,54 +258,54 @@ Separator.stripeIndent=5
|
||||
|
||||
#---- Slider ----
|
||||
|
||||
Slider.trackColor=#00bb00
|
||||
Slider.thumbColor=#880000
|
||||
Slider.tickColor=#ff0000
|
||||
Slider.trackColor=#0b0
|
||||
Slider.thumbColor=#800
|
||||
Slider.tickColor=#f00
|
||||
Slider.focusedColor=$Component.focusColor
|
||||
Slider.hoverColor=#0000ff
|
||||
Slider.disabledForeground=#000088
|
||||
Slider.hoverColor=#00f
|
||||
Slider.disabledForeground=#008
|
||||
|
||||
|
||||
#---- SplitPane ----
|
||||
|
||||
SplitPaneDivider.draggingColor=#880000
|
||||
SplitPaneDivider.oneTouchArrowColor=#00ff00
|
||||
SplitPaneDivider.oneTouchHoverArrowColor=#ff0000
|
||||
SplitPaneDivider.draggingColor=#800
|
||||
SplitPaneDivider.oneTouchArrowColor=#0f0
|
||||
SplitPaneDivider.oneTouchHoverArrowColor=#f00
|
||||
|
||||
|
||||
#---- TabbedPane ----
|
||||
|
||||
TabbedPane.disabledForeground=#777777
|
||||
TabbedPane.disabledForeground=#777
|
||||
TabbedPane.selectedBackground=#0f0
|
||||
TabbedPane.selectedForeground=#00f
|
||||
TabbedPane.underlineColor=#4A88C7
|
||||
TabbedPane.disabledUnderlineColor=#7a7a7a
|
||||
TabbedPane.hoverColor=#eeeeee
|
||||
TabbedPane.focusColor=#dddddd
|
||||
TabbedPane.hoverColor=#eee
|
||||
TabbedPane.focusColor=#ddd
|
||||
TabbedPane.tabSeparatorColor=#00f
|
||||
TabbedPane.contentAreaColor=#bbbbbb
|
||||
TabbedPane.contentAreaColor=#bbb
|
||||
|
||||
|
||||
#---- Table ----
|
||||
|
||||
Table.rowHeight=25
|
||||
Table.background=#fffff0
|
||||
Table.sortIconColor=#ffff00
|
||||
Table.gridColor=#00ffff
|
||||
Table.sortIconColor=#ff0
|
||||
Table.gridColor=#0ff
|
||||
|
||||
|
||||
#---- TableHeader ----
|
||||
|
||||
TableHeader.background=#4444ff
|
||||
TableHeader.foreground=#ffffff
|
||||
TableHeader.separatorColor=#00ff00
|
||||
TableHeader.bottomSeparatorColor=#00ff00
|
||||
TableHeader.background=#44f
|
||||
TableHeader.foreground=#fff
|
||||
TableHeader.separatorColor=#0f0
|
||||
TableHeader.bottomSeparatorColor=#0f0
|
||||
|
||||
|
||||
#---- TitledBorder ----
|
||||
|
||||
TitledBorder.titleColor=#ff00ff
|
||||
TitledBorder.border=1,1,1,1,#ff00ff
|
||||
TitledBorder.titleColor=#f0f
|
||||
TitledBorder.border=1,1,1,1,#f0f
|
||||
|
||||
|
||||
#---- TitlePane ----
|
||||
@@ -326,27 +318,27 @@ TitlePane.inactiveForeground=#fff
|
||||
|
||||
#---- ToggleButton ----
|
||||
|
||||
ToggleButton.background=#ddddff
|
||||
ToggleButton.selectedBackground=#44ff44
|
||||
ToggleButton.selectedForeground=#000000
|
||||
ToggleButton.disabledSelectedBackground=#44dd44
|
||||
ToggleButton.background=#ddf
|
||||
ToggleButton.selectedBackground=#4f4
|
||||
ToggleButton.selectedForeground=#000
|
||||
ToggleButton.disabledSelectedBackground=#4d4
|
||||
|
||||
ToggleButton.focusedBackground=#00ffff
|
||||
ToggleButton.hoverBackground=#ffff00
|
||||
ToggleButton.focusedBackground=#0ff
|
||||
ToggleButton.hoverBackground=#ff0
|
||||
ToggleButton.pressedBackground=#FFC800
|
||||
|
||||
ToggleButton.toolbar.selectedBackground=#dddddd
|
||||
ToggleButton.toolbar.selectedBackground=#ddd
|
||||
|
||||
|
||||
#---- ToolTip ----
|
||||
|
||||
ToolTip.background=#eeeeff
|
||||
ToolTip.background=#eef
|
||||
|
||||
|
||||
#---- Tree ----
|
||||
|
||||
Tree.background=#fff0ff
|
||||
Tree.paintLines=true
|
||||
Tree.hash=#ff0000
|
||||
Tree.hash=#f00
|
||||
Tree.editorBorder=1,1,1,1,#f00
|
||||
Tree.editorBorderSelectionColor=#00f
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
# @background=#000
|
||||
@@ -0,0 +1,2 @@
|
||||
# Component.arc=9999
|
||||
# TextComponent.arc=9999
|
||||
@@ -0,0 +1 @@
|
||||
# @background=#fff
|
||||
@@ -16,59 +16,59 @@
|
||||
|
||||
#---- BusyLabel ----
|
||||
|
||||
JXBusyLabel.baseColor=#00ff00
|
||||
JXBusyLabel.highlightColor=#ff0000
|
||||
JXBusyLabel.baseColor=#0f0
|
||||
JXBusyLabel.highlightColor=#f00
|
||||
|
||||
|
||||
#---- Header ----
|
||||
|
||||
JXHeader.background=#ff8888
|
||||
JXHeader.startBackground=#ffcccc
|
||||
JXHeader.titleForeground=#0000ff
|
||||
JXHeader.descriptionForeground=#ff0000
|
||||
JXHeader.background=#f88
|
||||
JXHeader.startBackground=#fcc
|
||||
JXHeader.titleForeground=#00f
|
||||
JXHeader.descriptionForeground=#f00
|
||||
|
||||
|
||||
#---- Hyperlink ----
|
||||
|
||||
Hyperlink.linkColor=#ff0000
|
||||
Hyperlink.visitedColor=#0000ff
|
||||
Hyperlink.disabledText=#000088
|
||||
Hyperlink.linkColor=#f00
|
||||
Hyperlink.visitedColor=#00f
|
||||
Hyperlink.disabledText=#008
|
||||
|
||||
|
||||
#---- MonthView ----
|
||||
|
||||
JXMonthView.background=@textComponentBackground
|
||||
JXMonthView.monthStringBackground=#00ff00
|
||||
JXMonthView.monthStringForeground=#0000ff
|
||||
JXMonthView.daysOfTheWeekForeground=#00ff00
|
||||
JXMonthView.weekOfTheYearForeground=#0000ff
|
||||
JXMonthView.unselectableDayForeground=#0000ff
|
||||
JXMonthView.selectedBackground=#aaffaa
|
||||
JXMonthView.flaggedDayForeground=#00ffff
|
||||
JXMonthView.monthStringBackground=#0f0
|
||||
JXMonthView.monthStringForeground=#00f
|
||||
JXMonthView.daysOfTheWeekForeground=#0f0
|
||||
JXMonthView.weekOfTheYearForeground=#00f
|
||||
JXMonthView.unselectableDayForeground=#00f
|
||||
JXMonthView.selectedBackground=#afa
|
||||
JXMonthView.flaggedDayForeground=#0ff
|
||||
JXMonthView.leadingDayForeground=#c0c0c0
|
||||
JXMonthView.trailingDayForeground=#c0c0c0
|
||||
JXMonthView.arrowColor=#0000ff
|
||||
JXMonthView.arrowColor=#00f
|
||||
JXMonthView.disabledArrowColor=#ABABAB
|
||||
|
||||
|
||||
#---- TaskPaneContainer ----
|
||||
|
||||
TaskPaneContainer.background=#ff8888
|
||||
TaskPaneContainer.background=#f88
|
||||
TaskPaneContainer.border=10,10,10,10
|
||||
|
||||
|
||||
#---- TaskPane ----
|
||||
|
||||
TaskPane.background=#00ff00
|
||||
TaskPane.borderColor=#0000ff
|
||||
TaskPane.background=#0f0
|
||||
TaskPane.borderColor=#00f
|
||||
TaskPane.contentInsets=10,10,10,10
|
||||
|
||||
TaskPane.titleBackgroundGradientStart=#ffff00
|
||||
TaskPane.titleForeground=#ff00ff
|
||||
TaskPane.titleOver=#0000aa
|
||||
TaskPane.specialTitleBackground=#00ffff
|
||||
TaskPane.specialTitleForeground=#444444
|
||||
TaskPane.specialTitleOver=#dd0000
|
||||
TaskPane.titleBackgroundGradientStart=#ff0
|
||||
TaskPane.titleForeground=#f0f
|
||||
TaskPane.titleOver=#00a
|
||||
TaskPane.specialTitleBackground=#0ff
|
||||
TaskPane.specialTitleForeground=#444
|
||||
TaskPane.specialTitleOver=#d00
|
||||
|
||||
|
||||
#---- TitledPanel ----
|
||||
|
||||
@@ -80,7 +80,8 @@ Button.default.pressedBackground #3f6796 com.formdev.flatlaf.util.DerivedColo
|
||||
Button.defaultButtonFollowsFocus true
|
||||
Button.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.disabledBorderColor #5e6060 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.disabledText #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.disabledSelectedBackground #53585a com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse)
|
||||
Button.disabledText #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.font [active] $defaultFont [UI]
|
||||
Button.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -93,12 +94,15 @@ Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [U
|
||||
Button.minimumWidth 72
|
||||
Button.pressedBackground #5b5f62 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse)
|
||||
Button.rollover true
|
||||
Button.selectedBackground #656a6c com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse)
|
||||
Button.selectedForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.shadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.textIconGap 4
|
||||
Button.textShiftOffset 0
|
||||
Button.toolbar.hoverBackground #4e5355 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse)
|
||||
Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI]
|
||||
Button.toolbar.pressedBackground #565a5d com.formdev.flatlaf.util.DerivedColor [UI] lighten(4% autoInverse)
|
||||
Button.toolbar.selectedBackground #5d6265 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse)
|
||||
Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI]
|
||||
ButtonUI com.formdev.flatlaf.ui.FlatButtonUI
|
||||
|
||||
@@ -113,7 +117,7 @@ Caret.width [active] 1
|
||||
CheckBox.arc 4
|
||||
CheckBox.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI]
|
||||
CheckBox.disabledText #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBox.disabledText #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBox.font [active] $defaultFont [UI]
|
||||
CheckBox.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBox.icon.background #43494a javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -152,7 +156,7 @@ CheckBoxMenuItem.background #303234 javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBoxMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI]
|
||||
CheckBoxMenuItem.borderPainted true
|
||||
CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI]
|
||||
CheckBoxMenuItem.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBoxMenuItem.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBoxMenuItem.font [active] $defaultFont [UI]
|
||||
CheckBoxMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
@@ -192,7 +196,7 @@ ComboBox.buttonHoverArrowColor #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
ComboBox.buttonShadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||
ComboBox.buttonStyle auto
|
||||
ComboBox.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
ComboBox.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
ComboBox.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
ComboBox.editorColumns 0
|
||||
ComboBox.font [active] $defaultFont [UI]
|
||||
ComboBox.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -266,7 +270,7 @@ EditorPane.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
EditorPane.font [active] $defaultFont [UI]
|
||||
EditorPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
EditorPane.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
EditorPane.inactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
EditorPane.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
EditorPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
EditorPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
EditorPane.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -305,9 +309,9 @@ FormattedTextField.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResourc
|
||||
FormattedTextField.font [active] $defaultFont [UI]
|
||||
FormattedTextField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextField.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextField.inactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextField.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
FormattedTextField.placeholderForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextField.placeholderForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextField.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI
|
||||
@@ -335,7 +339,7 @@ HelpButton.questionMarkColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI]
|
||||
|
||||
#---- Hyperlink ----
|
||||
|
||||
Hyperlink.disabledText #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
Hyperlink.disabledText #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
Hyperlink.linkColor #589df6 javax.swing.plaf.ColorUIResource [UI]
|
||||
Hyperlink.visitedColor #589df6 javax.swing.plaf.ColorUIResource [UI]
|
||||
HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI
|
||||
@@ -371,7 +375,7 @@ InternalFrame.inactiveBorderColor #353739 javax.swing.plaf.ColorUIResource [U
|
||||
InternalFrame.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI]
|
||||
InternalFrame.inactiveDropShadowOpacity 0.75
|
||||
InternalFrame.inactiveTitleBackground #303234 javax.swing.plaf.ColorUIResource [UI]
|
||||
InternalFrame.inactiveTitleForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
InternalFrame.inactiveTitleForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
InternalFrame.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI]
|
||||
InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI]
|
||||
InternalFrame.titleFont [active] $defaultFont [UI]
|
||||
@@ -412,15 +416,15 @@ JXHeader.startBackground #4c5052 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.arrowColor #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.background #45494a javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.daysOfTheWeekForeground #aaaaaa javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.disabledArrowColor #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.disabledArrowColor #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.flaggedDayForeground #e05555 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.leadingDayForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.leadingDayForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI]
|
||||
JXMonthView.monthStringBackground #4c5052 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.monthStringForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI]
|
||||
JXMonthView.selectedBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.trailingDayForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.trailingDayForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.unselectableDayForeground #e05555 javax.swing.plaf.ColorUIResource [UI]
|
||||
JXMonthView.weekOfTheYearForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
|
||||
@@ -449,7 +453,7 @@ JideTabbedPaneUI com.formdev.flatlaf.jideoss.ui.FlatJideTabbedPane
|
||||
#---- Label ----
|
||||
|
||||
Label.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
Label.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
Label.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
Label.disabledShadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||
Label.font [active] $defaultFont [UI]
|
||||
Label.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -492,7 +496,7 @@ Menu.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.F
|
||||
Menu.borderPainted true
|
||||
Menu.cancelMode hideLastSubmenu
|
||||
Menu.crossMenuMnemonic true
|
||||
Menu.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
Menu.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
Menu.font [active] $defaultFont [UI]
|
||||
Menu.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
Menu.icon.arrowColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -540,7 +544,7 @@ MenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.F
|
||||
MenuItem.borderPainted true
|
||||
MenuItem.checkBackground #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse)
|
||||
MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI]
|
||||
MenuItem.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
MenuItem.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
MenuItem.font [active] $defaultFont [UI]
|
||||
MenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
MenuItem.iconTextGap 6
|
||||
@@ -643,11 +647,12 @@ PasswordField.echoChar '\u2022'
|
||||
PasswordField.font [active] $defaultFont [UI]
|
||||
PasswordField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.inactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
PasswordField.placeholderForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.placeholderForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.showCapsLock true
|
||||
PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI
|
||||
|
||||
|
||||
@@ -706,7 +711,7 @@ ProgressBarUI com.formdev.flatlaf.ui.FlatProgressBarUI
|
||||
RadioButton.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI]
|
||||
RadioButton.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButton.disabledText #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButton.disabledText #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButton.font [active] $defaultFont [UI]
|
||||
RadioButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButton.highlight #242424 javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -732,7 +737,7 @@ RadioButtonMenuItem.background #303234 javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButtonMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI]
|
||||
RadioButtonMenuItem.borderPainted true
|
||||
RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI]
|
||||
RadioButtonMenuItem.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButtonMenuItem.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButtonMenuItem.font [active] $defaultFont [UI]
|
||||
RadioButtonMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
@@ -863,7 +868,7 @@ Spinner.buttonDisabledArrowColor #585858 javax.swing.plaf.ColorUIResource [UI
|
||||
Spinner.buttonHoverArrowColor #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
Spinner.buttonStyle button
|
||||
Spinner.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
Spinner.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
Spinner.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
Spinner.editorAlignment 11
|
||||
Spinner.editorBorderPainted false
|
||||
Spinner.font [active] $defaultFont [UI]
|
||||
@@ -904,7 +909,7 @@ TabbedPane.contentAreaColor #323232 javax.swing.plaf.ColorUIResource [UI]
|
||||
TabbedPane.contentOpaque true
|
||||
TabbedPane.contentSeparatorHeight 1
|
||||
TabbedPane.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI]
|
||||
TabbedPane.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
TabbedPane.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
TabbedPane.disabledUnderlineColor #7a7a7a javax.swing.plaf.ColorUIResource [UI]
|
||||
TabbedPane.focus #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TabbedPane.focusColor #3d4b5c javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -1010,7 +1015,7 @@ TextArea.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextArea.font [active] $defaultFont [UI]
|
||||
TextArea.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TextArea.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextArea.inactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TextArea.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextArea.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
TextArea.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
TextArea.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -1035,10 +1040,10 @@ TextField.font [active] $defaultFont [UI]
|
||||
TextField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.highlight #242424 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.inactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.light #313131 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
TextField.placeholderForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.placeholderForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TextField.shadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -1055,7 +1060,7 @@ TextPane.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextPane.font [active] $defaultFont [UI]
|
||||
TextPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TextPane.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextPane.inactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
TextPane.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
TextPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
TextPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
TextPane.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -1080,7 +1085,7 @@ TitlePane.iconMargins 3,8,3,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||
TitlePane.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI]
|
||||
TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI]
|
||||
TitlePane.inactiveBackground #303234 javax.swing.plaf.ColorUIResource [UI]
|
||||
TitlePane.inactiveForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
TitlePane.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
TitlePane.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI]
|
||||
TitlePane.menuBarEmbedded true
|
||||
TitlePane.menuBarMargins 0,8,0,22 javax.swing.plaf.InsetsUIResource [UI]
|
||||
@@ -1107,7 +1112,7 @@ ToggleButton.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.F
|
||||
ToggleButton.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI]
|
||||
ToggleButton.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
ToggleButton.disabledSelectedBackground #53585a com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse)
|
||||
ToggleButton.disabledText #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
ToggleButton.disabledText #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
ToggleButton.font [active] $defaultFont [UI]
|
||||
ToggleButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
ToggleButton.highlight #242424 javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -1141,7 +1146,7 @@ ToolBar.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI]
|
||||
ToolBar.dockingBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
ToolBar.dockingForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
ToolBar.floatingBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
ToolBar.floatingForeground #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
ToolBar.floatingForeground #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
ToolBar.font [active] $defaultFont [UI]
|
||||
ToolBar.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
ToolBar.gripColor #adadad javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -1287,7 +1292,7 @@ swingx/TaskPaneUI com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI
|
||||
text #45494a javax.swing.plaf.ColorUIResource [UI]
|
||||
textHighlight #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||
textHighlightText #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
textInactiveText #777777 javax.swing.plaf.ColorUIResource [UI]
|
||||
textInactiveText #888888 javax.swing.plaf.ColorUIResource [UI]
|
||||
textText #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
window #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
windowBorder #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
|
||||
@@ -80,6 +80,7 @@ Button.default.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColo
|
||||
Button.defaultButtonFollowsFocus true
|
||||
Button.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.disabledBorderColor #cfcfcf javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.disabledSelectedBackground #dedede com.formdev.flatlaf.util.DerivedColor [UI] darken(13% autoInverse)
|
||||
Button.disabledText #8c8c8c javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.focusedBorderColor #87afda javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -94,12 +95,15 @@ Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [U
|
||||
Button.minimumWidth 72
|
||||
Button.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse)
|
||||
Button.rollover true
|
||||
Button.selectedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse)
|
||||
Button.selectedForeground #000000 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI]
|
||||
Button.textIconGap 4
|
||||
Button.textShiftOffset 0
|
||||
Button.toolbar.hoverBackground #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse)
|
||||
Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI]
|
||||
Button.toolbar.pressedBackground #d9d9d9 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse)
|
||||
Button.toolbar.selectedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse)
|
||||
Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI]
|
||||
ButtonUI com.formdev.flatlaf.ui.FlatButtonUI
|
||||
|
||||
@@ -653,6 +657,7 @@ PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||
PasswordField.placeholderForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI]
|
||||
PasswordField.showCapsLock true
|
||||
PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI
|
||||
|
||||
|
||||
|
||||
@@ -25,3 +25,29 @@ dependencies {
|
||||
implementation( "com.fifesoft:rsyntaxtextarea:3.1.1" )
|
||||
implementation( "com.fifesoft:autocomplete:3.1.0" )
|
||||
}
|
||||
|
||||
tasks {
|
||||
jar {
|
||||
dependsOn( ":flatlaf-core:jar" )
|
||||
dependsOn( ":flatlaf-extras:jar" )
|
||||
|
||||
manifest {
|
||||
attributes( "Main-Class" to "com.formdev.flatlaf.themeeditor.FlatThemeFileEditor" )
|
||||
|
||||
if( JavaVersion.current() >= JavaVersion.VERSION_1_9 )
|
||||
attributes( "Multi-Release" to "true" )
|
||||
}
|
||||
|
||||
exclude( "module-info.class" )
|
||||
exclude( "META-INF/versions/*/module-info.class" )
|
||||
|
||||
// include all dependencies in jar
|
||||
from( {
|
||||
configurations.runtimeClasspath.get()
|
||||
.filter { it.name.endsWith( "jar" ) }
|
||||
.map { zipTree( it ).matching {
|
||||
exclude( "META-INF/LICENSE" )
|
||||
} }
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import javax.swing.*;
|
||||
import org.fife.ui.rsyntaxtextarea.FileLocation;
|
||||
import com.formdev.flatlaf.FlatLightLaf;
|
||||
import com.formdev.flatlaf.extras.FlatInspector;
|
||||
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
|
||||
import com.formdev.flatlaf.util.UIScale;
|
||||
|
||||
/**
|
||||
@@ -51,6 +52,7 @@ public class FlatThemeFileEditor
|
||||
SwingUtilities.invokeLater( () -> {
|
||||
FlatLightLaf.install();
|
||||
FlatInspector.install( "ctrl alt shift X" );
|
||||
FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||
|
||||
FlatThemeFileEditor frame = new FlatThemeFileEditor();
|
||||
|
||||
@@ -85,7 +87,7 @@ public class FlatThemeFileEditor
|
||||
themeEditorArea = new FlatThemeEditorPane();
|
||||
|
||||
//======== this ========
|
||||
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||
setTitle("FlatLaf Theme Editor");
|
||||
Container contentPane = getContentPane();
|
||||
contentPane.setLayout(new BorderLayout());
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
JFDML JFormDesigner: "7.0.1.0.272" Java: "13.0.1" encoding: "UTF-8"
|
||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
||||
|
||||
new FormModel {
|
||||
contentType: "form/swing"
|
||||
@@ -7,7 +7,7 @@ new FormModel {
|
||||
name: "this"
|
||||
"$locationPolicy": 2
|
||||
"$sizePolicy": 2
|
||||
"defaultCloseOperation": 2
|
||||
"defaultCloseOperation": 3
|
||||
"title": "FlatLaf Theme Editor"
|
||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||
name: "dialogPane"
|
||||
|
||||
@@ -28,6 +28,7 @@ Button.default.pressedBackground
|
||||
Button.defaultButtonFollowsFocus
|
||||
Button.disabledBackground
|
||||
Button.disabledBorderColor
|
||||
Button.disabledSelectedBackground
|
||||
Button.disabledText
|
||||
Button.focusInputMap
|
||||
Button.focusedBackground
|
||||
@@ -43,12 +44,15 @@ Button.margin
|
||||
Button.minimumWidth
|
||||
Button.pressedBackground
|
||||
Button.rollover
|
||||
Button.selectedBackground
|
||||
Button.selectedForeground
|
||||
Button.shadow
|
||||
Button.textIconGap
|
||||
Button.textShiftOffset
|
||||
Button.toolbar.hoverBackground
|
||||
Button.toolbar.margin
|
||||
Button.toolbar.pressedBackground
|
||||
Button.toolbar.selectedBackground
|
||||
Button.toolbar.spacingInsets
|
||||
ButtonUI
|
||||
Caret.width
|
||||
@@ -448,6 +452,7 @@ PasswordField.margin
|
||||
PasswordField.placeholderForeground
|
||||
PasswordField.selectionBackground
|
||||
PasswordField.selectionForeground
|
||||
PasswordField.showCapsLock
|
||||
PasswordFieldUI
|
||||
Popup.dropShadowColor
|
||||
Popup.dropShadowInsets
|
||||
|
||||
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 27 KiB |
BIN
images/arc_orange.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/carbon.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
images/cyan_light.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
images/dark_purple.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/extras-FlatInspector.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
images/extras-FlatSVGIcon.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
images/extras-FlatUIDefaultsInspector.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
images/extras-TriStateCheckBox.png
Normal file
|
After Width: | Height: | Size: 715 B |