mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 06:27:13 -06:00
Compare commits
73 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 | ||
|
|
f1fd6dcdd2 | ||
|
|
2975ed2eae | ||
|
|
5a27d03faa | ||
|
|
8bcf9dbcaf | ||
|
|
56ebd26361 | ||
|
|
b0426b81a7 |
80
CHANGELOG.md
80
CHANGELOG.md
@@ -1,6 +1,86 @@
|
|||||||
FlatLaf Change Log
|
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
|
||||||
|
|
||||||
|
- Table: Detect whether component is used in cell editor and automatically
|
||||||
|
disable round border style and reduce cell editor outer border width (used for
|
||||||
|
focus indicator) to zero. (issue #148)
|
||||||
|
- ComboBox, Spinner and TextField: Support disabling round border style per
|
||||||
|
component, if globally enabled (set client property `JComponent.roundRect` to
|
||||||
|
`false`). (issue #148)
|
||||||
|
|
||||||
|
#### Fixed bugs
|
||||||
|
|
||||||
|
- Custom window decorations: Embedded menu bar did not always respond to mouse
|
||||||
|
events after adding menus and when running in JetBrains Runtime. (issue #151)
|
||||||
|
- IntelliJ Themes: Fixed NPE in Solarized themes on scroll bar hover.
|
||||||
|
|
||||||
|
|
||||||
## 0.39
|
## 0.39
|
||||||
|
|
||||||
#### New features
|
#### 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
|
The look is heavily inspired by **Darcula** and **IntelliJ** themes from
|
||||||
IntelliJ IDEA 2019.2+ and uses almost the same colors and icons.
|
IntelliJ IDEA 2019.2+ and uses almost the same colors and icons.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

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

|

|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
Demo
|
Demo
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
val releaseVersion = "0.39"
|
val releaseVersion = "0.42"
|
||||||
val developmentVersion = "0.40-SNAPSHOT"
|
val developmentVersion = "0.43-SNAPSHOT"
|
||||||
|
|
||||||
version = if( java.lang.Boolean.getBoolean( "release" ) ) releaseVersion else developmentVersion
|
version = if( java.lang.Boolean.getBoolean( "release" ) ) releaseVersion else developmentVersion
|
||||||
|
|
||||||
|
|||||||
@@ -314,6 +314,15 @@ public interface FlatClientProperties
|
|||||||
return (value instanceof Boolean) ? (boolean) value : defaultValue;
|
return (value instanceof Boolean) ? (boolean) value : defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether a client property of a component is a {@link Boolean} and returns its value.
|
||||||
|
* If the client property is not set, or not a {@link Boolean}, defaultValue is returned.
|
||||||
|
*/
|
||||||
|
static Boolean clientPropertyBooleanStrict( JComponent c, String key, Boolean defaultValue ) {
|
||||||
|
Object value = c.getClientProperty( key );
|
||||||
|
return (value instanceof Boolean) ? (Boolean) value : defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether a client property of a component is an integer and returns its value.
|
* Checks whether a client property of a component is an integer and returns its value.
|
||||||
* If the client property is not set, or not an integer, defaultValue is returned.
|
* If the client property is not set, or not an integer, defaultValue is returned.
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import java.awt.image.ImageFilter;
|
|||||||
import java.awt.image.ImageProducer;
|
import java.awt.image.ImageProducer;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.io.File;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -76,6 +77,8 @@ public abstract class FlatLaf
|
|||||||
static final Logger LOG = Logger.getLogger( FlatLaf.class.getName() );
|
static final Logger LOG = Logger.getLogger( FlatLaf.class.getName() );
|
||||||
private static final String DESKTOPFONTHINTS = "awt.font.desktophints";
|
private static final String DESKTOPFONTHINTS = "awt.font.desktophints";
|
||||||
|
|
||||||
|
private static List<Object> customDefaultsSources;
|
||||||
|
|
||||||
private String desktopPropertyName;
|
private String desktopPropertyName;
|
||||||
private String desktopPropertyName2;
|
private String desktopPropertyName2;
|
||||||
private PropertyChangeListener desktopPropertyListener;
|
private PropertyChangeListener desktopPropertyListener;
|
||||||
@@ -552,6 +555,87 @@ public abstract class FlatLaf
|
|||||||
defaults.put( key, value );
|
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() {
|
private static void reSetLookAndFeel() {
|
||||||
EventQueue.invokeLater( () -> {
|
EventQueue.invokeLater( () -> {
|
||||||
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
|
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
|
||||||
|
|||||||
@@ -263,6 +263,9 @@ public class IntelliJTheme
|
|||||||
for( Map.Entry<String, Object> e : ((Map<String, Object>)value).entrySet() )
|
for( Map.Entry<String, Object> e : ((Map<String, Object>)value).entrySet() )
|
||||||
apply( key + '.' + e.getKey(), e.getValue(), defaults, defaultsKeysCache, uiKeys );
|
apply( key + '.' + e.getKey(), e.getValue(), defaults, defaultsKeysCache, uiKeys );
|
||||||
} else {
|
} else {
|
||||||
|
if( "".equals( value ) )
|
||||||
|
return; // ignore empty value
|
||||||
|
|
||||||
uiKeys.add( key );
|
uiKeys.add( key );
|
||||||
|
|
||||||
// fix ComboBox size and Spinner border in all Material UI Lite themes
|
// fix ComboBox size and Spinner border in all Material UI Lite themes
|
||||||
@@ -528,6 +531,7 @@ public class IntelliJTheme
|
|||||||
uiKeyMapping.put( "Slider.trackWidth", "" ); // ignore (used in Material Theme UI Lite)
|
uiKeyMapping.put( "Slider.trackWidth", "" ); // ignore (used in Material Theme UI Lite)
|
||||||
|
|
||||||
// TitlePane
|
// TitlePane
|
||||||
|
uiKeyCopying.put( "TitlePane.inactiveBackground", "TitlePane.background" );
|
||||||
uiKeyMapping.put( "TitlePane.infoForeground", "TitlePane.foreground" );
|
uiKeyMapping.put( "TitlePane.infoForeground", "TitlePane.foreground" );
|
||||||
uiKeyMapping.put( "TitlePane.inactiveInfoForeground", "TitlePane.inactiveForeground" );
|
uiKeyMapping.put( "TitlePane.inactiveInfoForeground", "TitlePane.inactiveForeground" );
|
||||||
|
|
||||||
|
|||||||
@@ -19,14 +19,18 @@ package com.formdev.flatlaf;
|
|||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
@@ -115,6 +119,46 @@ class UIDefaultsLoader
|
|||||||
addonClassLoaders.add( addonClassLoader );
|
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
|
// add additional defaults
|
||||||
if( additionalDefaults != null )
|
if( additionalDefaults != null )
|
||||||
properties.putAll( additionalDefaults );
|
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 -> {
|
Function<String, String> propertiesGetter = key -> {
|
||||||
return properties.getProperty( key );
|
return properties.getProperty( key );
|
||||||
};
|
};
|
||||||
@@ -161,37 +228,10 @@ class UIDefaultsLoader
|
|||||||
return resolveValue( value, propertiesGetter );
|
return resolveValue( value, propertiesGetter );
|
||||||
};
|
};
|
||||||
|
|
||||||
// get globals, which override all other defaults that end with same suffix
|
// parse and add properties to UI defaults
|
||||||
HashMap<String, Object> globals = new HashMap<>();
|
|
||||||
for( Map.Entry<Object, Object> e : properties.entrySet() ) {
|
for( Map.Entry<Object, Object> e : properties.entrySet() ) {
|
||||||
String key = (String) e.getKey();
|
String key = (String) e.getKey();
|
||||||
if( !key.startsWith( GLOBAL_PREFIX ) )
|
if( key.startsWith( VARIABLE_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 ) )
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
String value = resolveValue( (String) e.getValue(), propertiesGetter );
|
String value = resolveValue( (String) e.getValue(), propertiesGetter );
|
||||||
|
|||||||
@@ -87,15 +87,14 @@ public class FlatBorder
|
|||||||
try {
|
try {
|
||||||
FlatUIUtils.setRenderingHints( g2 );
|
FlatUIUtils.setRenderingHints( g2 );
|
||||||
|
|
||||||
boolean isCellEditor = isCellEditor( c );
|
float focusWidth = scale( (float) getFocusWidth( c ) );
|
||||||
float focusWidth = isCellEditor ? 0 : scale( (float) getFocusWidth( c ) );
|
|
||||||
float borderWidth = scale( (float) getBorderWidth( c ) );
|
float borderWidth = scale( (float) getBorderWidth( c ) );
|
||||||
float arc = isCellEditor ? 0 : scale( (float) getArc( c ) );
|
float arc = scale( (float) getArc( c ) );
|
||||||
Color outlineColor = getOutlineColor( c );
|
Color outlineColor = getOutlineColor( c );
|
||||||
|
|
||||||
// paint outer border
|
// paint outer border
|
||||||
if( outlineColor != null || isFocused( c ) ) {
|
if( outlineColor != null || isFocused( c ) ) {
|
||||||
float innerWidth = !isCellEditor && !(c instanceof JScrollPane)
|
float innerWidth = !isCellEditor( c ) && !(c instanceof JScrollPane)
|
||||||
? (outlineColor != null ? innerOutlineWidth : innerFocusWidth)
|
? (outlineColor != null ? innerOutlineWidth : innerFocusWidth)
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
@@ -204,8 +203,7 @@ public class FlatBorder
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Insets getBorderInsets( Component c, Insets insets ) {
|
public Insets getBorderInsets( Component c, Insets insets ) {
|
||||||
boolean isCellEditor = isCellEditor( c );
|
float focusWidth = scale( (float) getFocusWidth( c ) );
|
||||||
float focusWidth = isCellEditor ? 0 : scale( (float) getFocusWidth( c ) );
|
|
||||||
float ow = focusWidth + scale( (float) getLineWidth( c ) );
|
float ow = focusWidth + scale( (float) getLineWidth( c ) );
|
||||||
|
|
||||||
insets = super.getBorderInsets( c, insets );
|
insets = super.getBorderInsets( c, insets );
|
||||||
@@ -214,7 +212,7 @@ public class FlatBorder
|
|||||||
insets.bottom = Math.round( scale( (float) insets.bottom ) + ow );
|
insets.bottom = Math.round( scale( (float) insets.bottom ) + ow );
|
||||||
insets.right = Math.round( scale( (float) insets.right ) + ow );
|
insets.right = Math.round( scale( (float) insets.right ) + ow );
|
||||||
|
|
||||||
if( isCellEditor ) {
|
if( isCellEditor( c ) ) {
|
||||||
// remove top and bottom insets if used as cell editor
|
// remove top and bottom insets if used as cell editor
|
||||||
insets.top = insets.bottom = 0;
|
insets.top = insets.bottom = 0;
|
||||||
|
|
||||||
@@ -232,6 +230,9 @@ public class FlatBorder
|
|||||||
* Returns the (unscaled) thickness of the outer focus border.
|
* Returns the (unscaled) thickness of the outer focus border.
|
||||||
*/
|
*/
|
||||||
protected int getFocusWidth( Component c ) {
|
protected int getFocusWidth( Component c ) {
|
||||||
|
if( isCellEditor( c ) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
return focusWidth;
|
return focusWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -141,6 +141,9 @@ public class FlatButtonBorder
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getArc( Component c ) {
|
protected int getArc( Component c ) {
|
||||||
|
if( isCellEditor( c ) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
switch( FlatButtonUI.getButtonType( c ) ) {
|
switch( FlatButtonUI.getButtonType( c ) ) {
|
||||||
case FlatButtonUI.TYPE_SQUARE: return 0;
|
case FlatButtonUI.TYPE_SQUARE: return 0;
|
||||||
case FlatButtonUI.TYPE_ROUND_RECT: return Short.MAX_VALUE;
|
case FlatButtonUI.TYPE_ROUND_RECT: return Short.MAX_VALUE;
|
||||||
|
|||||||
@@ -67,8 +67,11 @@ import com.formdev.flatlaf.util.UIScale;
|
|||||||
* @uiDefault Button.focusedBackground Color optional
|
* @uiDefault Button.focusedBackground Color optional
|
||||||
* @uiDefault Button.hoverBackground Color optional
|
* @uiDefault Button.hoverBackground Color optional
|
||||||
* @uiDefault Button.pressedBackground Color optional
|
* @uiDefault Button.pressedBackground Color optional
|
||||||
|
* @uiDefault Button.selectedBackground Color
|
||||||
|
* @uiDefault Button.selectedForeground Color
|
||||||
* @uiDefault Button.disabledBackground Color optional
|
* @uiDefault Button.disabledBackground Color optional
|
||||||
* @uiDefault Button.disabledText Color
|
* @uiDefault Button.disabledText Color
|
||||||
|
* @uiDefault Button.disabledSelectedBackground Color
|
||||||
* @uiDefault Button.default.background 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.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
|
* @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.spacingInsets Insets
|
||||||
* @uiDefault Button.toolbar.hoverBackground Color
|
* @uiDefault Button.toolbar.hoverBackground Color
|
||||||
* @uiDefault Button.toolbar.pressedBackground Color
|
* @uiDefault Button.toolbar.pressedBackground Color
|
||||||
|
* @uiDefault Button.toolbar.selectedBackground Color
|
||||||
*
|
*
|
||||||
* @author Karl Tauber
|
* @author Karl Tauber
|
||||||
*/
|
*/
|
||||||
@@ -101,8 +105,11 @@ public class FlatButtonUI
|
|||||||
protected Color focusedBackground;
|
protected Color focusedBackground;
|
||||||
protected Color hoverBackground;
|
protected Color hoverBackground;
|
||||||
protected Color pressedBackground;
|
protected Color pressedBackground;
|
||||||
|
protected Color selectedBackground;
|
||||||
|
protected Color selectedForeground;
|
||||||
protected Color disabledBackground;
|
protected Color disabledBackground;
|
||||||
protected Color disabledText;
|
protected Color disabledText;
|
||||||
|
protected Color disabledSelectedBackground;
|
||||||
|
|
||||||
protected Color defaultBackground;
|
protected Color defaultBackground;
|
||||||
protected Color defaultEndBackground;
|
protected Color defaultEndBackground;
|
||||||
@@ -119,6 +126,7 @@ public class FlatButtonUI
|
|||||||
protected Insets toolbarSpacingInsets;
|
protected Insets toolbarSpacingInsets;
|
||||||
protected Color toolbarHoverBackground;
|
protected Color toolbarHoverBackground;
|
||||||
protected Color toolbarPressedBackground;
|
protected Color toolbarPressedBackground;
|
||||||
|
protected Color toolbarSelectedBackground;
|
||||||
|
|
||||||
private Icon helpButtonIcon;
|
private Icon helpButtonIcon;
|
||||||
|
|
||||||
@@ -150,8 +158,11 @@ public class FlatButtonUI
|
|||||||
focusedBackground = UIManager.getColor( prefix + "focusedBackground" );
|
focusedBackground = UIManager.getColor( prefix + "focusedBackground" );
|
||||||
hoverBackground = UIManager.getColor( prefix + "hoverBackground" );
|
hoverBackground = UIManager.getColor( prefix + "hoverBackground" );
|
||||||
pressedBackground = UIManager.getColor( prefix + "pressedBackground" );
|
pressedBackground = UIManager.getColor( prefix + "pressedBackground" );
|
||||||
|
selectedBackground = UIManager.getColor( prefix + "selectedBackground" );
|
||||||
|
selectedForeground = UIManager.getColor( prefix + "selectedForeground" );
|
||||||
disabledBackground = UIManager.getColor( prefix + "disabledBackground" );
|
disabledBackground = UIManager.getColor( prefix + "disabledBackground" );
|
||||||
disabledText = UIManager.getColor( prefix + "disabledText" );
|
disabledText = UIManager.getColor( prefix + "disabledText" );
|
||||||
|
disabledSelectedBackground = UIManager.getColor( prefix + "disabledSelectedBackground" );
|
||||||
|
|
||||||
if( UIManager.getBoolean( "Button.paintShadow" ) ) {
|
if( UIManager.getBoolean( "Button.paintShadow" ) ) {
|
||||||
shadowWidth = FlatUIUtils.getUIInt( "Button.shadowWidth", 2 );
|
shadowWidth = FlatUIUtils.getUIInt( "Button.shadowWidth", 2 );
|
||||||
@@ -174,6 +185,7 @@ public class FlatButtonUI
|
|||||||
toolbarSpacingInsets = UIManager.getInsets( "Button.toolbar.spacingInsets" );
|
toolbarSpacingInsets = UIManager.getInsets( "Button.toolbar.spacingInsets" );
|
||||||
toolbarHoverBackground = UIManager.getColor( prefix + "toolbar.hoverBackground" );
|
toolbarHoverBackground = UIManager.getColor( prefix + "toolbar.hoverBackground" );
|
||||||
toolbarPressedBackground = UIManager.getColor( prefix + "toolbar.pressedBackground" );
|
toolbarPressedBackground = UIManager.getColor( prefix + "toolbar.pressedBackground" );
|
||||||
|
toolbarSelectedBackground = UIManager.getColor( prefix + "toolbar.selectedBackground" );
|
||||||
|
|
||||||
helpButtonIcon = UIManager.getIcon( "HelpButton.icon" );
|
helpButtonIcon = UIManager.getIcon( "HelpButton.icon" );
|
||||||
|
|
||||||
@@ -369,6 +381,17 @@ public class FlatButtonUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Color getBackground( JComponent c ) {
|
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() )
|
if( !c.isEnabled() )
|
||||||
return disabledBackground;
|
return disabledBackground;
|
||||||
|
|
||||||
@@ -430,6 +453,9 @@ public class FlatButtonUI
|
|||||||
if( !c.isEnabled() )
|
if( !c.isEnabled() )
|
||||||
return disabledText;
|
return disabledText;
|
||||||
|
|
||||||
|
if( ((AbstractButton)c).isSelected() && !isToolBarButton( c ) )
|
||||||
|
return selectedForeground;
|
||||||
|
|
||||||
// use component foreground if explicitly set
|
// use component foreground if explicitly set
|
||||||
Color fg = c.getForeground();
|
Color fg = c.getForeground();
|
||||||
if( isCustomForeground( fg ) )
|
if( isCustomForeground( fg ) )
|
||||||
|
|||||||
@@ -57,4 +57,8 @@ public class FlatEmptyBorder
|
|||||||
insets.bottom = scale( bottom );
|
insets.bottom = scale( bottom );
|
||||||
return insets;
|
return insets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Insets getUnscaledBorderInsets() {
|
||||||
|
return super.getBorderInsets();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ import javax.swing.plaf.basic.BasicInternalFrameUI;
|
|||||||
public class FlatInternalFrameUI
|
public class FlatInternalFrameUI
|
||||||
extends BasicInternalFrameUI
|
extends BasicInternalFrameUI
|
||||||
{
|
{
|
||||||
|
protected FlatWindowResizer windowResizer;
|
||||||
|
|
||||||
public static ComponentUI createUI( JComponent c ) {
|
public static ComponentUI createUI( JComponent c ) {
|
||||||
return new FlatInternalFrameUI( (JInternalFrame) c );
|
return new FlatInternalFrameUI( (JInternalFrame) c );
|
||||||
}
|
}
|
||||||
@@ -97,6 +99,18 @@ public class FlatInternalFrameUI
|
|||||||
super.installUI( c );
|
super.installUI( c );
|
||||||
|
|
||||||
LookAndFeel.installProperty( frame, "opaque", false );
|
LookAndFeel.installProperty( frame, "opaque", false );
|
||||||
|
|
||||||
|
windowResizer = createWindowResizer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uninstallUI( JComponent c ) {
|
||||||
|
super.uninstallUI( c );
|
||||||
|
|
||||||
|
if( windowResizer != null ) {
|
||||||
|
windowResizer.uninstall();
|
||||||
|
windowResizer = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -104,6 +118,10 @@ public class FlatInternalFrameUI
|
|||||||
return new FlatInternalFrameTitlePane( w );
|
return new FlatInternalFrameTitlePane( w );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected FlatWindowResizer createWindowResizer() {
|
||||||
|
return new FlatWindowResizer.InternalFrameResizer( frame, this::getDesktopManager );
|
||||||
|
}
|
||||||
|
|
||||||
//---- class FlatInternalFrameBorder --------------------------------------
|
//---- class FlatInternalFrameBorder --------------------------------------
|
||||||
|
|
||||||
public static 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.
|
* or the application has to be changed to extend a FlatLaf renderer.
|
||||||
*/
|
*/
|
||||||
private void toggleSelectionColors() {
|
private void toggleSelectionColors() {
|
||||||
|
if( list == null )
|
||||||
|
return;
|
||||||
|
|
||||||
if( FlatUIUtils.isPermanentFocusOwner( list ) ) {
|
if( FlatUIUtils.isPermanentFocusOwner( list ) ) {
|
||||||
if( list.getSelectionBackground() == selectionInactiveBackground )
|
if( list.getSelectionBackground() == selectionInactiveBackground )
|
||||||
list.setSelectionBackground( selectionBackground );
|
list.setSelectionBackground( selectionBackground );
|
||||||
|
|||||||
@@ -123,6 +123,14 @@ public class FlatMenuUI
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dimension getMinimumSize( JComponent c ) {
|
||||||
|
// avoid that top-level menus (in menu bar) are made smaller if horizontal space is rare
|
||||||
|
// same code is in BasicMenuUI since Java 10
|
||||||
|
// see https://bugs.openjdk.java.net/browse/JDK-8178430
|
||||||
|
return ((JMenu)menuItem).isTopLevelMenu() ? c.getPreferredSize() : null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) {
|
protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) {
|
||||||
return renderer.getPreferredMenuItemSize();
|
return renderer.getPreferredMenuItemSize();
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ import com.formdev.flatlaf.util.HiDPIUtils;
|
|||||||
* @uiDefault Component.minimumWidth int
|
* @uiDefault Component.minimumWidth int
|
||||||
* @uiDefault Component.isIntelliJTheme boolean
|
* @uiDefault Component.isIntelliJTheme boolean
|
||||||
* @uiDefault PasswordField.placeholderForeground Color
|
* @uiDefault PasswordField.placeholderForeground Color
|
||||||
|
* @uiDefault PasswordField.showCapsLock boolean
|
||||||
* @uiDefault PasswordField.capsLockIcon Icon
|
* @uiDefault PasswordField.capsLockIcon Icon
|
||||||
* @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always
|
* @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always
|
||||||
*
|
*
|
||||||
@@ -71,6 +72,7 @@ public class FlatPasswordFieldUI
|
|||||||
protected int minimumWidth;
|
protected int minimumWidth;
|
||||||
protected boolean isIntelliJTheme;
|
protected boolean isIntelliJTheme;
|
||||||
protected Color placeholderForeground;
|
protected Color placeholderForeground;
|
||||||
|
protected boolean showCapsLock;
|
||||||
protected Icon capsLockIcon;
|
protected Icon capsLockIcon;
|
||||||
|
|
||||||
private FocusListener focusListener;
|
private FocusListener focusListener;
|
||||||
@@ -88,6 +90,7 @@ public class FlatPasswordFieldUI
|
|||||||
minimumWidth = UIManager.getInt( "Component.minimumWidth" );
|
minimumWidth = UIManager.getInt( "Component.minimumWidth" );
|
||||||
isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" );
|
isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" );
|
||||||
placeholderForeground = UIManager.getColor( prefix + ".placeholderForeground" );
|
placeholderForeground = UIManager.getColor( prefix + ".placeholderForeground" );
|
||||||
|
showCapsLock = UIManager.getBoolean( "PasswordField.showCapsLock" );
|
||||||
capsLockIcon = UIManager.getIcon( "PasswordField.capsLockIcon" );
|
capsLockIcon = UIManager.getIcon( "PasswordField.capsLockIcon" );
|
||||||
|
|
||||||
LookAndFeel.installProperty( getComponent(), "opaque", false );
|
LookAndFeel.installProperty( getComponent(), "opaque", false );
|
||||||
@@ -160,6 +163,9 @@ public class FlatPasswordFieldUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void paintCapsLock( Graphics g ) {
|
protected void paintCapsLock( Graphics g ) {
|
||||||
|
if( !showCapsLock )
|
||||||
|
return;
|
||||||
|
|
||||||
JTextComponent c = getComponent();
|
JTextComponent c = getComponent();
|
||||||
if( !FlatUIUtils.isPermanentFocusOwner( c ) ||
|
if( !FlatUIUtils.isPermanentFocusOwner( c ) ||
|
||||||
!Toolkit.getDefaultToolkit().getLockingKeyState( KeyEvent.VK_CAPS_LOCK ) )
|
!Toolkit.getDefaultToolkit().getLockingKeyState( KeyEvent.VK_CAPS_LOCK ) )
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import java.awt.Component;
|
|||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
|
import java.awt.MouseInfo;
|
||||||
import java.awt.Panel;
|
import java.awt.Panel;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
@@ -33,6 +34,7 @@ import javax.swing.JComponent;
|
|||||||
import javax.swing.JLayeredPane;
|
import javax.swing.JLayeredPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JToolTip;
|
import javax.swing.JToolTip;
|
||||||
|
import javax.swing.JWindow;
|
||||||
import javax.swing.Popup;
|
import javax.swing.Popup;
|
||||||
import javax.swing.PopupFactory;
|
import javax.swing.PopupFactory;
|
||||||
import javax.swing.RootPaneContainer;
|
import javax.swing.RootPaneContainer;
|
||||||
@@ -41,6 +43,7 @@ import javax.swing.UIManager;
|
|||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
import com.formdev.flatlaf.FlatClientProperties;
|
import com.formdev.flatlaf.FlatClientProperties;
|
||||||
import com.formdev.flatlaf.util.SystemInfo;
|
import com.formdev.flatlaf.util.SystemInfo;
|
||||||
|
import com.formdev.flatlaf.util.UIScale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A popup factory that adds drop shadows to popups on Windows.
|
* 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 )
|
public Popup getPopup( Component owner, Component contents, int x, int y )
|
||||||
throws IllegalArgumentException
|
throws IllegalArgumentException
|
||||||
{
|
{
|
||||||
|
Point pt = fixToolTipLocation( owner, contents, x, y );
|
||||||
|
if( pt != null ) {
|
||||||
|
x = pt.x;
|
||||||
|
y = pt.y;
|
||||||
|
}
|
||||||
|
|
||||||
if( !isDropShadowPainted( owner, contents ) )
|
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
|
// macOS and Linux adds drop shadow to heavy weight popups
|
||||||
if( SystemInfo.isMacOS || SystemInfo.isLinux ) {
|
if( SystemInfo.isMacOS || SystemInfo.isLinux ) {
|
||||||
Popup popup = getHeavyWeightPopup( owner, contents, x, y );
|
Popup popup = getPopupForScreenOfOwner( owner, contents, x, y, true );
|
||||||
if( popup == null )
|
if( popup == null )
|
||||||
popup = super.getPopup( owner, contents, x, y );
|
popup = getPopupForScreenOfOwner( owner, contents, x, y, false );
|
||||||
return new NonFlashingPopup( popup, contents );
|
return new NonFlashingPopup( popup, contents );
|
||||||
}
|
}
|
||||||
|
|
||||||
// create drop shadow popup
|
// 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 ) {
|
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 ---------------------------------------------
|
//---- class NonFlashingPopup ---------------------------------------------
|
||||||
|
|
||||||
private class NonFlashingPopup
|
private class NonFlashingPopup
|
||||||
@@ -157,7 +263,7 @@ public class FlatPopupFactory
|
|||||||
@Override
|
@Override
|
||||||
public void show() {
|
public void show() {
|
||||||
if( delegate != null ) {
|
if( delegate != null ) {
|
||||||
delegate.show();
|
showPopupAndFixLocation( delegate, popupWindow );
|
||||||
|
|
||||||
// increase tooltip size if necessary because it may be too small on HiDPI screens
|
// increase tooltip size if necessary because it may be too small on HiDPI screens
|
||||||
// https://bugs.openjdk.java.net/browse/JDK-8213535
|
// https://bugs.openjdk.java.net/browse/JDK-8213535
|
||||||
@@ -249,7 +355,7 @@ public class FlatPopupFactory
|
|||||||
// create heavy weight popup for drop shadow
|
// create heavy weight popup for drop shadow
|
||||||
int x = popupWindow.getX() - insets.left;
|
int x = popupWindow.getX() - insets.left;
|
||||||
int y = popupWindow.getY() - insets.top;
|
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
|
// make drop shadow popup window translucent
|
||||||
dropShadowWindow = SwingUtilities.windowForComponent( dropShadowPanel );
|
dropShadowWindow = SwingUtilities.windowForComponent( dropShadowPanel );
|
||||||
@@ -291,7 +397,7 @@ public class FlatPopupFactory
|
|||||||
@Override
|
@Override
|
||||||
public void show() {
|
public void show() {
|
||||||
if( dropShadowDelegate != null )
|
if( dropShadowDelegate != null )
|
||||||
dropShadowDelegate.show();
|
showPopupAndFixLocation( dropShadowDelegate, dropShadowWindow );
|
||||||
|
|
||||||
if( mediumWeightPanel != null )
|
if( mediumWeightPanel != null )
|
||||||
showMediumWeightDropShadow();
|
showMediumWeightDropShadow();
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ public class FlatRootPaneUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected FlatWindowResizer createWindowResizer() {
|
protected FlatWindowResizer createWindowResizer() {
|
||||||
return new FlatWindowResizer( rootPane );
|
return new FlatWindowResizer.WindowResizer( rootPane );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FlatTitlePane createTitlePane() {
|
protected FlatTitlePane createTitlePane() {
|
||||||
@@ -304,6 +304,9 @@ public class FlatRootPaneUI
|
|||||||
Container contentPane = rootPane.getContentPane();
|
Container contentPane = rootPane.getContentPane();
|
||||||
if( contentPane != null )
|
if( contentPane != null )
|
||||||
contentPane.setBounds( 0, nextY, width, Math.max( height - nextY, 0 ) );
|
contentPane.setBounds( 0, nextY, width, Math.max( height - nextY, 0 ) );
|
||||||
|
|
||||||
|
if( titlePane != null )
|
||||||
|
titlePane.menuBarLayouted();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -33,6 +33,10 @@ public class FlatRoundBorder
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getArc( Component c ) {
|
protected int getArc( Component c ) {
|
||||||
return FlatUIUtils.isRoundRect( c ) ? Short.MAX_VALUE : arc;
|
if( isCellEditor( c ) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
Boolean roundRect = FlatUIUtils.isRoundRect( c );
|
||||||
|
return roundRect != null ? (roundRect ? Short.MAX_VALUE : 0) : arc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ public class FlatTableHeaderUI
|
|||||||
g2.setColor( separatorColor );
|
g2.setColor( separatorColor );
|
||||||
|
|
||||||
int sepCount = columnCount;
|
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--;
|
sepCount--;
|
||||||
|
|
||||||
if( header.getComponentOrientation().isLeftToRight() ) {
|
if( header.getComponentOrientation().isLeftToRight() ) {
|
||||||
|
|||||||
@@ -188,6 +188,9 @@ public class FlatTableUI
|
|||||||
* or the application has to be changed to extend a FlatLaf renderer.
|
* or the application has to be changed to extend a FlatLaf renderer.
|
||||||
*/
|
*/
|
||||||
private void toggleSelectionColors() {
|
private void toggleSelectionColors() {
|
||||||
|
if( table == null )
|
||||||
|
return;
|
||||||
|
|
||||||
if( FlatUIUtils.isPermanentFocusOwner( table ) ) {
|
if( FlatUIUtils.isPermanentFocusOwner( table ) ) {
|
||||||
if( table.getSelectionBackground() == selectionInactiveBackground )
|
if( table.getSelectionBackground() == selectionInactiveBackground )
|
||||||
table.setSelectionBackground( selectionBackground );
|
table.setSelectionBackground( selectionBackground );
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class FlatTextAreaUI
|
|||||||
{
|
{
|
||||||
protected int minimumWidth;
|
protected int minimumWidth;
|
||||||
protected boolean isIntelliJTheme;
|
protected boolean isIntelliJTheme;
|
||||||
|
protected Color background;
|
||||||
protected Color disabledBackground;
|
protected Color disabledBackground;
|
||||||
protected Color inactiveBackground;
|
protected Color inactiveBackground;
|
||||||
|
|
||||||
@@ -67,12 +68,20 @@ public class FlatTextAreaUI
|
|||||||
return new FlatTextAreaUI();
|
return new FlatTextAreaUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void installUI( JComponent c ) {
|
||||||
|
super.installUI( c );
|
||||||
|
|
||||||
|
updateBackground();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void installDefaults() {
|
protected void installDefaults() {
|
||||||
super.installDefaults();
|
super.installDefaults();
|
||||||
|
|
||||||
minimumWidth = UIManager.getInt( "Component.minimumWidth" );
|
minimumWidth = UIManager.getInt( "Component.minimumWidth" );
|
||||||
isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" );
|
isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" );
|
||||||
|
background = UIManager.getColor( "TextArea.background" );
|
||||||
disabledBackground = UIManager.getColor( "TextArea.disabledBackground" );
|
disabledBackground = UIManager.getColor( "TextArea.disabledBackground" );
|
||||||
inactiveBackground = UIManager.getColor( "TextArea.inactiveBackground" );
|
inactiveBackground = UIManager.getColor( "TextArea.inactiveBackground" );
|
||||||
}
|
}
|
||||||
@@ -81,6 +90,7 @@ public class FlatTextAreaUI
|
|||||||
protected void uninstallDefaults() {
|
protected void uninstallDefaults() {
|
||||||
super.uninstallDefaults();
|
super.uninstallDefaults();
|
||||||
|
|
||||||
|
background = null;
|
||||||
disabledBackground = null;
|
disabledBackground = null;
|
||||||
inactiveBackground = null;
|
inactiveBackground = null;
|
||||||
}
|
}
|
||||||
@@ -89,26 +99,36 @@ public class FlatTextAreaUI
|
|||||||
protected void propertyChange( PropertyChangeEvent e ) {
|
protected void propertyChange( PropertyChangeEvent e ) {
|
||||||
super.propertyChange( e );
|
super.propertyChange( e );
|
||||||
FlatEditorPaneUI.propertyChange( getComponent(), e );
|
FlatEditorPaneUI.propertyChange( getComponent(), e );
|
||||||
|
|
||||||
|
switch( e.getPropertyName() ) {
|
||||||
|
case "editable":
|
||||||
|
case "enabled":
|
||||||
|
updateBackground();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void updateBackground() {
|
||||||
protected void paintSafely( Graphics g ) {
|
|
||||||
super.paintSafely( HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void paintBackground( Graphics g ) {
|
|
||||||
JTextComponent c = getComponent();
|
JTextComponent c = getComponent();
|
||||||
|
|
||||||
Color background = c.getBackground();
|
Color background = c.getBackground();
|
||||||
g.setColor( !(background instanceof UIResource)
|
if( !(background instanceof UIResource) )
|
||||||
? background
|
return;
|
||||||
: (isIntelliJTheme && (!c.isEnabled() || !c.isEditable())
|
|
||||||
? FlatUIUtils.getParentBackground( c )
|
// do not update background if it currently has a unknown color (assigned from outside)
|
||||||
: (!c.isEnabled()
|
if( background != this.background &&
|
||||||
? disabledBackground
|
background != disabledBackground &&
|
||||||
: (!c.isEditable() ? inactiveBackground : background))) );
|
background != inactiveBackground )
|
||||||
g.fillRect( 0, 0, c.getWidth(), c.getHeight() );
|
return;
|
||||||
|
|
||||||
|
Color newBackground = !c.isEnabled()
|
||||||
|
? disabledBackground
|
||||||
|
: (!c.isEditable()
|
||||||
|
? inactiveBackground
|
||||||
|
: this.background);
|
||||||
|
|
||||||
|
if( newBackground != background )
|
||||||
|
c.setBackground( newBackground );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -128,4 +148,22 @@ public class FlatTextAreaUI
|
|||||||
|
|
||||||
return FlatEditorPaneUI.applyMinimumWidth( c, size, minimumWidth );
|
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 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,10 @@ public class FlatTextBorder
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getArc( Component c ) {
|
protected int getArc( Component c ) {
|
||||||
return FlatUIUtils.isRoundRect( c ) ? Short.MAX_VALUE : arc;
|
if( isCellEditor( c ) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
Boolean roundRect = FlatUIUtils.isRoundRect( c );
|
||||||
|
return roundRect != null ? (roundRect ? Short.MAX_VALUE : 0) : arc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.formdev.flatlaf.ui;
|
|||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
|
import java.awt.Container;
|
||||||
import java.awt.Dialog;
|
import java.awt.Dialog;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
@@ -165,7 +166,25 @@ public class FlatTitlePane
|
|||||||
|
|
||||||
createButtons();
|
createButtons();
|
||||||
|
|
||||||
setLayout( new BorderLayout() );
|
setLayout( new BorderLayout() {
|
||||||
|
@Override
|
||||||
|
public void layoutContainer( Container target ) {
|
||||||
|
super.layoutContainer( target );
|
||||||
|
|
||||||
|
// make left panel (with embedded menu bar) smaller if horizontal space is rare
|
||||||
|
// to avoid that embedded menu bar overlaps button bar
|
||||||
|
Insets insets = target.getInsets();
|
||||||
|
int width = target.getWidth() - insets.left - insets.right;
|
||||||
|
if( leftPanel.getWidth() + buttonPanel.getWidth() > width ) {
|
||||||
|
int oldWidth = leftPanel.getWidth();
|
||||||
|
int newWidth = Math.max( width - buttonPanel.getWidth(), 0 );
|
||||||
|
leftPanel.setSize( newWidth, leftPanel.getHeight() );
|
||||||
|
if( !getComponentOrientation().isLeftToRight() )
|
||||||
|
leftPanel.setLocation( leftPanel.getX() + (oldWidth - newWidth), leftPanel.getY() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
add( leftPanel, BorderLayout.LINE_START );
|
add( leftPanel, BorderLayout.LINE_START );
|
||||||
add( titleLabel, BorderLayout.CENTER );
|
add( titleLabel, BorderLayout.CENTER );
|
||||||
add( buttonPanel, BorderLayout.LINE_END );
|
add( buttonPanel, BorderLayout.LINE_END );
|
||||||
@@ -221,12 +240,15 @@ public class FlatTitlePane
|
|||||||
protected void activeChanged( boolean active ) {
|
protected void activeChanged( boolean active ) {
|
||||||
boolean hasEmbeddedMenuBar = rootPane.getJMenuBar() != null && isMenuBarEmbedded();
|
boolean hasEmbeddedMenuBar = rootPane.getJMenuBar() != null && isMenuBarEmbedded();
|
||||||
Color background = FlatUIUtils.nonUIResource( active ? activeBackground : inactiveBackground );
|
Color background = FlatUIUtils.nonUIResource( active ? activeBackground : inactiveBackground );
|
||||||
Color foreground = FlatUIUtils.nonUIResource( active
|
Color foreground = FlatUIUtils.nonUIResource( active ? activeForeground : inactiveForeground );
|
||||||
? (hasEmbeddedMenuBar ? embeddedForeground : activeForeground)
|
Color titleForeground = (hasEmbeddedMenuBar && active) ? FlatUIUtils.nonUIResource( embeddedForeground ) : foreground;
|
||||||
: inactiveForeground );
|
|
||||||
|
|
||||||
setBackground( background );
|
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 );
|
titleLabel.setHorizontalAlignment( hasEmbeddedMenuBar ? SwingConstants.CENTER : SwingConstants.LEADING );
|
||||||
|
|
||||||
@@ -391,6 +413,12 @@ public class FlatTitlePane
|
|||||||
return FlatUIUtils.subtractInsets( bounds, UIScale.scale( getMenuBarMargins() ) );
|
return FlatUIUtils.subtractInsets( bounds, UIScale.scale( getMenuBarMargins() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Insets getMenuBarMargins() {
|
||||||
|
return getComponentOrientation().isLeftToRight()
|
||||||
|
? menuBarMargins
|
||||||
|
: new Insets( menuBarMargins.top, menuBarMargins.right, menuBarMargins.bottom, menuBarMargins.left );
|
||||||
|
}
|
||||||
|
|
||||||
protected void menuBarChanged() {
|
protected void menuBarChanged() {
|
||||||
menuBarPlaceholder.invalidate();
|
menuBarPlaceholder.invalidate();
|
||||||
|
|
||||||
@@ -400,12 +428,27 @@ public class FlatTitlePane
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Insets getMenuBarMargins() {
|
protected void menuBarLayouted() {
|
||||||
return getComponentOrientation().isLeftToRight()
|
updateJBRHitTestSpotsAndTitleBarHeightLater();
|
||||||
? menuBarMargins
|
|
||||||
: new Insets( menuBarMargins.top, menuBarMargins.right, menuBarMargins.bottom, menuBarMargins.left );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*debug
|
||||||
|
@Override
|
||||||
|
public void paint( Graphics g ) {
|
||||||
|
super.paint( g );
|
||||||
|
|
||||||
|
if( debugTitleBarHeight > 0 ) {
|
||||||
|
g.setColor( Color.green );
|
||||||
|
g.drawLine( 0, debugTitleBarHeight, getWidth(), debugTitleBarHeight );
|
||||||
|
}
|
||||||
|
if( debugHitTestSpots != null ) {
|
||||||
|
g.setColor( Color.blue );
|
||||||
|
for( Rectangle r : debugHitTestSpots )
|
||||||
|
g.drawRect( r.x, r.y, r.width, r.height );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintComponent( Graphics g ) {
|
protected void paintComponent( Graphics g ) {
|
||||||
g.setColor( getBackground() );
|
g.setColor( getBackground() );
|
||||||
@@ -583,6 +626,12 @@ public class FlatTitlePane
|
|||||||
titleBarHeight--;
|
titleBarHeight--;
|
||||||
|
|
||||||
JBRCustomDecorations.setHitTestSpotsAndTitleBarHeight( window, hitTestSpots, titleBarHeight );
|
JBRCustomDecorations.setHitTestSpotsAndTitleBarHeight( window, hitTestSpots, titleBarHeight );
|
||||||
|
|
||||||
|
/*debug
|
||||||
|
debugHitTestSpots = hitTestSpots;
|
||||||
|
debugTitleBarHeight = titleBarHeight;
|
||||||
|
repaint();
|
||||||
|
debug*/
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addJBRHitTestSpot( JComponent c, boolean subtractMenuBarMargins, List<Rectangle> hitTestSpots ) {
|
protected void addJBRHitTestSpot( JComponent c, boolean subtractMenuBarMargins, List<Rectangle> hitTestSpots ) {
|
||||||
@@ -599,6 +648,11 @@ public class FlatTitlePane
|
|||||||
hitTestSpots.add( r );
|
hitTestSpots.add( r );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*debug
|
||||||
|
private List<Rectangle> debugHitTestSpots;
|
||||||
|
private int debugTitleBarHeight;
|
||||||
|
debug*/
|
||||||
|
|
||||||
//---- class TitlePaneBorder ----------------------------------------------
|
//---- class TitlePaneBorder ----------------------------------------------
|
||||||
|
|
||||||
protected class FlatTitlePaneBorder
|
protected class FlatTitlePaneBorder
|
||||||
@@ -700,8 +754,7 @@ public class FlatTitlePane
|
|||||||
|
|
||||||
//---- interface MouseListener ----
|
//---- interface MouseListener ----
|
||||||
|
|
||||||
private int lastXOnScreen;
|
private Point dragOffset;
|
||||||
private int lastYOnScreen;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked( MouseEvent e ) {
|
public void mouseClicked( MouseEvent e ) {
|
||||||
@@ -725,8 +778,10 @@ public class FlatTitlePane
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed( MouseEvent e ) {
|
public void mousePressed( MouseEvent e ) {
|
||||||
lastXOnScreen = e.getXOnScreen();
|
if( window == null )
|
||||||
lastYOnScreen = e.getYOnScreen();
|
return; // should newer occur
|
||||||
|
|
||||||
|
dragOffset = SwingUtilities.convertPoint( FlatTitlePane.this, e.getPoint(), window );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public void mouseReleased( MouseEvent e ) {}
|
@Override public void mouseReleased( MouseEvent e ) {}
|
||||||
@@ -737,46 +792,45 @@ public class FlatTitlePane
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged( MouseEvent e ) {
|
public void mouseDragged( MouseEvent e ) {
|
||||||
|
if( window == null )
|
||||||
|
return; // should newer occur
|
||||||
|
|
||||||
if( hasJBRCustomDecoration() )
|
if( hasJBRCustomDecoration() )
|
||||||
return; // do nothing if running in JBR
|
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
|
// restore window if it is maximized
|
||||||
if( window instanceof Frame ) {
|
if( window instanceof Frame ) {
|
||||||
Frame frame = (Frame) window;
|
Frame frame = (Frame) window;
|
||||||
int state = frame.getExtendedState();
|
int state = frame.getExtendedState();
|
||||||
if( (state & Frame.MAXIMIZED_BOTH) != 0 ) {
|
if( (state & Frame.MAXIMIZED_BOTH) != 0 ) {
|
||||||
int maximizedX = window.getX();
|
int maximizedWidth = window.getWidth();
|
||||||
int maximizedY = window.getY();
|
|
||||||
|
|
||||||
// restore window size, which also moves window to pre-maximized location
|
// restore window size, which also moves window to pre-maximized location
|
||||||
frame.setExtendedState( state & ~Frame.MAXIMIZED_BOTH );
|
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 restoredWidth = window.getWidth();
|
||||||
int newX = maximizedX;
|
int center = restoredWidth / 2;
|
||||||
JComponent rightComp = getComponentOrientation().isLeftToRight() ? buttonPanel : leftPanel;
|
if( dragOffset.x > center ) {
|
||||||
if( xOnScreen >= maximizedX + restoredWidth - rightComp.getWidth() - 10 )
|
// this is same/similar to what Windows 10 does
|
||||||
newX = xOnScreen + rightComp.getWidth() + 10 - restoredWidth;
|
if( dragOffset.x > maximizedWidth - center )
|
||||||
|
dragOffset.x = restoredWidth - (maximizedWidth - dragOffset.x);
|
||||||
// move window near mouse
|
else
|
||||||
window.setLocation( newX, maximizedY );
|
dragOffset.x = center;
|
||||||
return;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute new window location
|
// compute new window location
|
||||||
int newX = window.getX() + (xOnScreen - lastXOnScreen);
|
int newX = e.getXOnScreen() - dragOffset.x;
|
||||||
int newY = window.getY() + (yOnScreen - lastYOnScreen);
|
int newY = e.getYOnScreen() - dragOffset.y;
|
||||||
|
|
||||||
|
if( newX == window.getX() && newY == window.getY() )
|
||||||
|
return;
|
||||||
|
|
||||||
// move window
|
// move window
|
||||||
window.setLocation( newX, newY );
|
window.setLocation( newX, newY );
|
||||||
|
|
||||||
lastXOnScreen = xOnScreen;
|
|
||||||
lastYOnScreen = yOnScreen;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public void mouseMoved( MouseEvent e ) {}
|
@Override public void mouseMoved( MouseEvent e ) {}
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import java.awt.Component;
|
|||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import javax.swing.AbstractButton;
|
import javax.swing.AbstractButton;
|
||||||
import javax.swing.ButtonModel;
|
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JToggleButton;
|
import javax.swing.JToggleButton;
|
||||||
import javax.swing.UIManager;
|
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.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.endBackground Color optional; if set, a gradient paint is used
|
||||||
* @uiDefault ToggleButton.pressedBackground Color
|
* @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.selectedBackground Color
|
||||||
* @uiDefault ToggleButton.selectedForeground Color
|
* @uiDefault ToggleButton.selectedForeground Color
|
||||||
|
* @uiDefault ToggleButton.disabledBackground Color optional
|
||||||
|
* @uiDefault ToggleButton.disabledText Color
|
||||||
* @uiDefault ToggleButton.disabledSelectedBackground Color
|
* @uiDefault ToggleButton.disabledSelectedBackground Color
|
||||||
|
* @uiDefault ToggleButton.toolbar.hoverBackground Color
|
||||||
|
* @uiDefault ToggleButton.toolbar.pressedBackground Color
|
||||||
* @uiDefault ToggleButton.toolbar.selectedBackground Color
|
* @uiDefault ToggleButton.toolbar.selectedBackground Color
|
||||||
*
|
*
|
||||||
|
* <!-- FlatToggleButtonUI -->
|
||||||
|
*
|
||||||
* @uiDefault ToggleButton.tab.underlineHeight int
|
* @uiDefault ToggleButton.tab.underlineHeight int
|
||||||
* @uiDefault ToggleButton.tab.underlineColor Color
|
* @uiDefault ToggleButton.tab.underlineColor Color
|
||||||
* @uiDefault ToggleButton.tab.disabledUnderlineColor Color
|
* @uiDefault ToggleButton.tab.disabledUnderlineColor Color
|
||||||
@@ -75,12 +73,6 @@ import com.formdev.flatlaf.util.UIScale;
|
|||||||
public class FlatToggleButtonUI
|
public class FlatToggleButtonUI
|
||||||
extends FlatButtonUI
|
extends FlatButtonUI
|
||||||
{
|
{
|
||||||
protected Color selectedBackground;
|
|
||||||
protected Color selectedForeground;
|
|
||||||
protected Color disabledSelectedBackground;
|
|
||||||
|
|
||||||
protected Color toolbarSelectedBackground;
|
|
||||||
|
|
||||||
protected int tabUnderlineHeight;
|
protected int tabUnderlineHeight;
|
||||||
protected Color tabUnderlineColor;
|
protected Color tabUnderlineColor;
|
||||||
protected Color tabDisabledUnderlineColor;
|
protected Color tabDisabledUnderlineColor;
|
||||||
@@ -108,12 +100,6 @@ public class FlatToggleButtonUI
|
|||||||
super.installDefaults( b );
|
super.installDefaults( b );
|
||||||
|
|
||||||
if( !defaults_initialized ) {
|
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" );
|
tabUnderlineHeight = UIManager.getInt( "ToggleButton.tab.underlineHeight" );
|
||||||
tabUnderlineColor = UIManager.getColor( "ToggleButton.tab.underlineColor" );
|
tabUnderlineColor = UIManager.getColor( "ToggleButton.tab.underlineColor" );
|
||||||
tabDisabledUnderlineColor = UIManager.getColor( "ToggleButton.tab.disabledUnderlineColor" );
|
tabDisabledUnderlineColor = UIManager.getColor( "ToggleButton.tab.disabledUnderlineColor" );
|
||||||
@@ -185,30 +171,4 @@ public class FlatToggleButtonUI
|
|||||||
} else
|
} else
|
||||||
super.paintBackground( g, c );
|
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 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import java.awt.geom.Rectangle2D;
|
|||||||
import java.awt.geom.RoundRectangle2D;
|
import java.awt.geom.RoundRectangle2D;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
|
import javax.swing.JTable;
|
||||||
import javax.swing.LookAndFeel;
|
import javax.swing.LookAndFeel;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
@@ -137,11 +138,21 @@ public class FlatUIUtils
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCellEditor( Component c ) {
|
public static boolean isCellEditor( Component c ) {
|
||||||
// check whether used as cell editor in file chooser
|
// check whether used in cell editor (check 3 levels up)
|
||||||
// Tree.cellEditor is set in sun.swing.FilePane.editFileName()
|
Component c2 = c;
|
||||||
|
for( int i = 0; i <= 2 && c2 != null; i++ ) {
|
||||||
|
Container parent = c2.getParent();
|
||||||
|
if( parent instanceof JTable && ((JTable)parent).getEditorComponent() == c2 )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
c2 = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check whether used as cell editor
|
||||||
// Table.editor is set in JTable.GenericEditor constructor
|
// Table.editor is set in JTable.GenericEditor constructor
|
||||||
|
// Tree.cellEditor is set in sun.swing.FilePane.editFileName()
|
||||||
String name = c.getName();
|
String name = c.getName();
|
||||||
if( "Tree.cellEditor".equals( name ) || "Table.editor".equals( name ) )
|
if( "Table.editor".equals( name ) || "Tree.cellEditor".equals( name ) )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// for using combo box as cell editor in table
|
// for using combo box as cell editor in table
|
||||||
@@ -159,9 +170,11 @@ public class FlatUIUtils
|
|||||||
keyboardFocusManager.getActiveWindow() == SwingUtilities.windowForComponent( c );
|
keyboardFocusManager.getActiveWindow() == SwingUtilities.windowForComponent( c );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isRoundRect( Component c ) {
|
public static Boolean isRoundRect( Component c ) {
|
||||||
return c instanceof JComponent && FlatClientProperties.clientPropertyBoolean(
|
return (c instanceof JComponent)
|
||||||
(JComponent) c, FlatClientProperties.COMPONENT_ROUND_RECT, false );
|
? FlatClientProperties.clientPropertyBooleanStrict(
|
||||||
|
(JComponent) c, FlatClientProperties.COMPONENT_ROUND_RECT, null )
|
||||||
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,11 +17,13 @@
|
|||||||
package com.formdev.flatlaf.ui;
|
package com.formdev.flatlaf.ui;
|
||||||
|
|
||||||
import static java.awt.Cursor.*;
|
import static java.awt.Cursor.*;
|
||||||
|
import static javax.swing.SwingConstants.*;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
import java.awt.Dialog;
|
import java.awt.Dialog;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Frame;
|
import java.awt.Frame;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Insets;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
@@ -34,54 +36,59 @@ import java.awt.event.WindowEvent;
|
|||||||
import java.awt.event.WindowStateListener;
|
import java.awt.event.WindowStateListener;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import javax.swing.DesktopManager;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
|
import javax.swing.JInternalFrame;
|
||||||
import javax.swing.JLayeredPane;
|
import javax.swing.JLayeredPane;
|
||||||
import javax.swing.JRootPane;
|
import javax.swing.JRootPane;
|
||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
import com.formdev.flatlaf.util.UIScale;
|
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
|
* @author Karl Tauber
|
||||||
*/
|
*/
|
||||||
public class FlatWindowResizer
|
public abstract class FlatWindowResizer
|
||||||
implements PropertyChangeListener, WindowStateListener, ComponentListener
|
implements PropertyChangeListener, ComponentListener
|
||||||
{
|
{
|
||||||
protected final static Integer WINDOW_RESIZER_LAYER = JLayeredPane.DRAG_LAYER + 1;
|
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 borderDragThickness = FlatUIUtils.getUIInt( "RootPane.borderDragThickness", 5 );
|
||||||
protected final int cornerDragWidth = FlatUIUtils.getUIInt( "RootPane.cornerDragWidth", 16 );
|
protected final int cornerDragWidth = FlatUIUtils.getUIInt( "RootPane.cornerDragWidth", 16 );
|
||||||
protected final boolean honorFrameMinimumSizeOnResize = UIManager.getBoolean( "RootPane.honorFrameMinimumSizeOnResize" );
|
protected final boolean honorFrameMinimumSizeOnResize = UIManager.getBoolean( "RootPane.honorFrameMinimumSizeOnResize" );
|
||||||
protected final boolean honorDialogMinimumSizeOnResize = UIManager.getBoolean( "RootPane.honorDialogMinimumSizeOnResize" );
|
protected final boolean honorDialogMinimumSizeOnResize = UIManager.getBoolean( "RootPane.honorDialogMinimumSizeOnResize" );
|
||||||
|
|
||||||
protected final JComponent north;
|
protected final DragBorderComponent topDragComp;
|
||||||
protected final JComponent south;
|
protected final DragBorderComponent bottomDragComp;
|
||||||
protected final JComponent west;
|
protected final DragBorderComponent leftDragComp;
|
||||||
protected final JComponent east;
|
protected final DragBorderComponent rightDragComp;
|
||||||
|
|
||||||
protected Window window;
|
protected FlatWindowResizer( JComponent resizeComp ) {
|
||||||
|
this.resizeComp = resizeComp;
|
||||||
|
|
||||||
public FlatWindowResizer( JRootPane rootPane ) {
|
topDragComp = createDragBorderComponent( NW_RESIZE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR );
|
||||||
this.rootPane = rootPane;
|
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 );
|
Container cont = (resizeComp instanceof JRootPane) ? ((JRootPane)resizeComp).getLayeredPane() : resizeComp;
|
||||||
south = createDragBorderComponent( SW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR );
|
Object cons = (cont instanceof JLayeredPane) ? WINDOW_RESIZER_LAYER : null;
|
||||||
west = createDragBorderComponent( NW_RESIZE_CURSOR, W_RESIZE_CURSOR, SW_RESIZE_CURSOR );
|
cont.add( topDragComp, cons, 0 );
|
||||||
east = createDragBorderComponent( NE_RESIZE_CURSOR, E_RESIZE_CURSOR, SE_RESIZE_CURSOR );
|
cont.add( bottomDragComp, cons, 1 );
|
||||||
|
cont.add( leftDragComp, cons, 2 );
|
||||||
|
cont.add( rightDragComp, cons, 3 );
|
||||||
|
|
||||||
JLayeredPane layeredPane = rootPane.getLayeredPane();
|
resizeComp.addComponentListener( this );
|
||||||
layeredPane.add( north, WINDOW_RESIZER_LAYER );
|
resizeComp.addPropertyChangeListener( "ancestor", this );
|
||||||
layeredPane.add( south, WINDOW_RESIZER_LAYER );
|
|
||||||
layeredPane.add( west, WINDOW_RESIZER_LAYER );
|
|
||||||
layeredPane.add( east, WINDOW_RESIZER_LAYER );
|
|
||||||
|
|
||||||
rootPane.addComponentListener( this );
|
if( resizeComp.isDisplayable() )
|
||||||
rootPane.addPropertyChangeListener( "ancestor", this );
|
|
||||||
|
|
||||||
if( rootPane.isDisplayable() )
|
|
||||||
addNotify();
|
addNotify();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,85 +99,96 @@ public class FlatWindowResizer
|
|||||||
public void uninstall() {
|
public void uninstall() {
|
||||||
removeNotify();
|
removeNotify();
|
||||||
|
|
||||||
rootPane.removeComponentListener( this );
|
resizeComp.removeComponentListener( this );
|
||||||
rootPane.removePropertyChangeListener( "ancestor", this );
|
resizeComp.removePropertyChangeListener( "ancestor", this );
|
||||||
|
|
||||||
JLayeredPane layeredPane = rootPane.getLayeredPane();
|
Container cont = topDragComp.getParent();
|
||||||
layeredPane.remove( north );
|
cont.remove( topDragComp );
|
||||||
layeredPane.remove( south );
|
cont.remove( bottomDragComp );
|
||||||
layeredPane.remove( west );
|
cont.remove( leftDragComp );
|
||||||
layeredPane.remove( east );
|
cont.remove( rightDragComp );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doLayout() {
|
public void doLayout() {
|
||||||
if( !north.isVisible() )
|
if( !topDragComp.isVisible() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int y = 0;
|
int y = 0;
|
||||||
int width = rootPane.getWidth();
|
int width = resizeComp.getWidth();
|
||||||
int height = rootPane.getHeight();
|
int height = resizeComp.getHeight();
|
||||||
if( width == 0 || height == 0 )
|
if( width == 0 || height == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Insets resizeInsets = getResizeInsets();
|
||||||
int thickness = UIScale.scale( borderDragThickness );
|
int thickness = UIScale.scale( borderDragThickness );
|
||||||
int y2 = y + thickness;
|
int topThickness = Math.max( resizeInsets.top, thickness );
|
||||||
int height2 = height - (thickness * 2);
|
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 );
|
// set bounds of drag components
|
||||||
south.setBounds( x, y + height - thickness, width, thickness );
|
topDragComp.setBounds( x, y, width, topThickness );
|
||||||
west.setBounds( x, y2, thickness, height2 );
|
bottomDragComp.setBounds( x, y + height - bottomThickness, width, bottomThickness );
|
||||||
east.setBounds( x + width - thickness, y2, thickness, height2 );
|
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() {
|
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();
|
updateVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeNotify() {
|
protected void removeNotify() {
|
||||||
if( window instanceof Frame ) {
|
|
||||||
window.removePropertyChangeListener( "resizable", this );
|
|
||||||
window.removeWindowStateListener( this );
|
|
||||||
}
|
|
||||||
window = null;
|
|
||||||
|
|
||||||
updateVisibility();
|
updateVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateVisibility() {
|
protected void updateVisibility() {
|
||||||
boolean visible = isWindowResizable();
|
boolean visible = isWindowResizable();
|
||||||
if( visible == north.isVisible() )
|
if( visible == topDragComp.isVisible() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
north.setVisible( visible );
|
topDragComp.setVisible( visible );
|
||||||
south.setVisible( visible );
|
bottomDragComp.setVisible( visible );
|
||||||
west.setVisible( visible );
|
leftDragComp.setVisible( visible );
|
||||||
|
|
||||||
// The east component is not hidden, instead its bounds are set to 0,0,1,1 and
|
// 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.
|
// it is disabled. This is necessary so that DragBorderComponent.paintComponent() is invoked.
|
||||||
east.setEnabled( visible );
|
rightDragComp.setEnabled( visible );
|
||||||
if( visible ) {
|
if( visible ) {
|
||||||
east.setVisible( true ); // necessary because it is initially invisible
|
rightDragComp.setVisible( true ); // necessary because it is initially invisible
|
||||||
doLayout();
|
doLayout();
|
||||||
} else
|
} else
|
||||||
east.setBounds( 0, 0, 1, 1 );
|
rightDragComp.setBounds( 0, 0, 1, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isWindowResizable() {
|
boolean isDialog() {
|
||||||
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;
|
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
|
@Override
|
||||||
public void propertyChange( PropertyChangeEvent e ) {
|
public void propertyChange( PropertyChangeEvent e ) {
|
||||||
switch( e.getPropertyName() ) {
|
switch( e.getPropertyName() ) {
|
||||||
@@ -187,10 +205,7 @@ public class FlatWindowResizer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
//---- interface ComponentListener ----
|
||||||
public void windowStateChanged( WindowEvent e ) {
|
|
||||||
updateVisibility();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void componentResized( ComponentEvent e ) {
|
public void componentResized( ComponentEvent e ) {
|
||||||
@@ -201,6 +216,163 @@ public class FlatWindowResizer
|
|||||||
@Override public void componentShown( ComponentEvent e ) {}
|
@Override public void componentShown( ComponentEvent e ) {}
|
||||||
@Override public void componentHidden( 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 ------------------------------------------
|
//---- class DragBorderComponent ------------------------------------------
|
||||||
|
|
||||||
protected class DragBorderComponent
|
protected class DragBorderComponent
|
||||||
@@ -212,9 +384,15 @@ public class FlatWindowResizer
|
|||||||
private final int trailingResizeDir;
|
private final int trailingResizeDir;
|
||||||
|
|
||||||
private int resizeDir = -1;
|
private int resizeDir = -1;
|
||||||
private int dragStartMouseX;
|
|
||||||
private int dragStartMouseY;
|
private int leadingCornerDragWidth;
|
||||||
private Rectangle dragStartWindowBounds;
|
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 ) {
|
protected DragBorderComponent( int leadingResizeDir, int centerResizeDir, int trailingResizeDir ) {
|
||||||
this.leadingResizeDir = leadingResizeDir;
|
this.leadingResizeDir = leadingResizeDir;
|
||||||
@@ -228,6 +406,11 @@ public class FlatWindowResizer
|
|||||||
addMouseMotionListener( this );
|
addMouseMotionListener( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setCornerDragWidths( int leading, int trailing ) {
|
||||||
|
leadingCornerDragWidth = leading;
|
||||||
|
trailingCornerDragWidth = trailing;
|
||||||
|
}
|
||||||
|
|
||||||
protected void setResizeDir( int resizeDir ) {
|
protected void setResizeDir( int resizeDir ) {
|
||||||
if( this.resizeDir == resizeDir )
|
if( this.resizeDir == resizeDir )
|
||||||
return;
|
return;
|
||||||
@@ -247,12 +430,25 @@ public class FlatWindowResizer
|
|||||||
super.paintChildren( g );
|
super.paintChildren( g );
|
||||||
|
|
||||||
// this is necessary because Dialog.setResizable() does not fire events
|
// this is necessary because Dialog.setResizable() does not fire events
|
||||||
if( window instanceof Dialog )
|
if( isDialog() )
|
||||||
updateVisibility();
|
updateVisibility();
|
||||||
|
|
||||||
/*debug
|
/*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.setColor( java.awt.Color.red );
|
||||||
g.drawRect( 0, 0, getWidth() - 1, getHeight() - 1 );
|
g.drawRect( 0, 0, width - 1, height - 1 );
|
||||||
debug*/
|
debug*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,114 +458,116 @@ debug*/
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed( MouseEvent e ) {
|
public void mousePressed( MouseEvent e ) {
|
||||||
if( window == null )
|
if( !isWindowResizable() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dragStartMouseX = e.getXOnScreen();
|
int xOnScreen = e.getXOnScreen();
|
||||||
dragStartMouseY = e.getYOnScreen();
|
int yOnScreen = e.getYOnScreen();
|
||||||
dragStartWindowBounds = window.getBounds();
|
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
|
@Override
|
||||||
public void mouseReleased( MouseEvent e ) {
|
public void mouseReleased( MouseEvent e ) {
|
||||||
dragStartWindowBounds = null;
|
if( !isWindowResizable() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
dragLeftOffset = dragRightOffset = dragTopOffset = dragBottomOffset = 0;
|
||||||
|
|
||||||
|
endResizing();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override public void mouseEntered( MouseEvent e ) {}
|
||||||
public void mouseEntered( MouseEvent e ) {
|
@Override public void mouseExited( MouseEvent e ) {}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited( MouseEvent e ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved( MouseEvent e ) {
|
public void mouseMoved( MouseEvent e ) {
|
||||||
boolean topBottom = (centerResizeDir == N_RESIZE_CURSOR || centerResizeDir == S_RESIZE_CURSOR);
|
boolean topOrBottom = (centerResizeDir == N_RESIZE_CURSOR || centerResizeDir == S_RESIZE_CURSOR);
|
||||||
int xy = topBottom ? e.getX() : e.getY();
|
int xy = topOrBottom ? e.getX() : e.getY();
|
||||||
int wh = topBottom ? getWidth() : getHeight();
|
int wh = topOrBottom ? getWidth() : getHeight();
|
||||||
int cornerWH = UIScale.scale( cornerDragWidth - (topBottom ? 0 : borderDragThickness) );
|
|
||||||
|
|
||||||
setResizeDir( xy <= cornerWH
|
setResizeDir( xy <= leadingCornerDragWidth
|
||||||
? leadingResizeDir
|
? leadingResizeDir
|
||||||
: (xy >= wh - cornerWH
|
: (xy >= wh - trailingCornerDragWidth
|
||||||
? trailingResizeDir
|
? trailingResizeDir
|
||||||
: centerResizeDir) );
|
: centerResizeDir) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged( MouseEvent e ) {
|
public void mouseDragged( MouseEvent e ) {
|
||||||
if( dragStartWindowBounds == null )
|
|
||||||
return;
|
|
||||||
|
|
||||||
if( !isWindowResizable() )
|
if( !isWindowResizable() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int mouseDeltaX = e.getXOnScreen() - dragStartMouseX;
|
int xOnScreen = e.getXOnScreen();
|
||||||
int mouseDeltaY = e.getYOnScreen() - dragStartMouseY;
|
int yOnScreen = e.getYOnScreen();
|
||||||
|
|
||||||
int deltaX = 0;
|
// Get current window bounds and compute new bounds based them.
|
||||||
int deltaY = 0;
|
// This is necessary because window manager may alter window bounds while resizing.
|
||||||
int deltaWidth = 0;
|
// E.g. when having two monitors with different scale factors and resizing
|
||||||
int deltaHeight = 0;
|
// 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
|
||||||
// north
|
// and adjusts its bounds.
|
||||||
if( resizeDir == N_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR ) {
|
Rectangle oldBounds = getWindowBounds();
|
||||||
deltaY = mouseDeltaY;
|
Rectangle newBounds = new Rectangle( oldBounds );
|
||||||
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;
|
|
||||||
|
|
||||||
// compute new window bounds
|
// compute new window bounds
|
||||||
Rectangle newBounds = new Rectangle( dragStartWindowBounds );
|
|
||||||
newBounds.x += deltaX;
|
// top
|
||||||
newBounds.y += deltaY;
|
if( resizeDir == N_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR ) {
|
||||||
newBounds.width += deltaWidth;
|
newBounds.y = yOnScreen - dragTopOffset;
|
||||||
newBounds.height += deltaHeight;
|
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
|
// apply minimum window size
|
||||||
boolean honorMinimumSizeOnResize =
|
Dimension minimumSize = honorMinimumSizeOnResize() ? getWindowMinimumSize() : null;
|
||||||
(honorFrameMinimumSizeOnResize && window instanceof Frame) ||
|
|
||||||
(honorDialogMinimumSizeOnResize && window instanceof Dialog);
|
|
||||||
Dimension minimumSize = honorMinimumSizeOnResize ? window.getMinimumSize() : null;
|
|
||||||
if( minimumSize == null )
|
if( minimumSize == null )
|
||||||
minimumSize = UIScale.scale( new Dimension( 150, 50 ) );
|
minimumSize = UIScale.scale( new Dimension( 150, 50 ) );
|
||||||
if( newBounds.width < minimumSize.width ) {
|
if( newBounds.width < minimumSize.width ) {
|
||||||
if( deltaX != 0 )
|
if( newBounds.x != oldBounds.x )
|
||||||
newBounds.x -= (minimumSize.width - newBounds.width);
|
newBounds.x -= (minimumSize.width - newBounds.width);
|
||||||
newBounds.width = minimumSize.width;
|
newBounds.width = minimumSize.width;
|
||||||
}
|
}
|
||||||
if( newBounds.height < minimumSize.height ) {
|
if( newBounds.height < minimumSize.height ) {
|
||||||
if( deltaY != 0 )
|
if( newBounds.y != oldBounds.y )
|
||||||
newBounds.y -= (minimumSize.height - newBounds.height);
|
newBounds.y -= (minimumSize.height - newBounds.height);
|
||||||
newBounds.height = minimumSize.height;
|
newBounds.height = minimumSize.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set window bounds
|
// set window bounds
|
||||||
if( !newBounds.equals( dragStartWindowBounds ) ) {
|
if( !newBounds.equals( oldBounds ) )
|
||||||
window.setBounds( newBounds );
|
setWindowBounds( newBounds );
|
||||||
|
|
||||||
// immediately layout drag border components
|
|
||||||
FlatWindowResizer.this.doLayout();
|
|
||||||
|
|
||||||
if( Toolkit.getDefaultToolkit().isDynamicLayoutActive() ) {
|
|
||||||
window.validate();
|
|
||||||
rootPane.repaint();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 ----
|
#---- variables ----
|
||||||
|
|
||||||
@background=#3c3f41
|
@background=#3c3f41
|
||||||
@foreground=#bbbbbb
|
@foreground=#bbb
|
||||||
@selectionBackground=#4B6EAF
|
@selectionBackground=#4B6EAF
|
||||||
@selectionForeground=@foreground
|
@selectionForeground=@foreground
|
||||||
@selectionInactiveBackground=#0D293E
|
@selectionInactiveBackground=#0D293E
|
||||||
@selectionInactiveForeground=@foreground
|
@selectionInactiveForeground=@foreground
|
||||||
@disabledText=#777777
|
@disabledText=#888
|
||||||
@textComponentBackground=#45494A
|
@textComponentBackground=#45494A
|
||||||
@menuBackground=darken(@background,5%)
|
@menuBackground=darken(@background,5%)
|
||||||
@menuHoverBackground=lighten(@menuBackground,10%,derived)
|
@menuHoverBackground=lighten(@menuBackground,10%,derived)
|
||||||
@menuCheckBackground=lighten(@menuBackground,10%,derived)
|
@menuCheckBackground=lighten(@menuBackground,10%,derived)
|
||||||
@menuCheckHoverBackground=lighten(@menuBackground,20%,derived)
|
@menuCheckHoverBackground=lighten(@menuBackground,20%,derived)
|
||||||
@cellFocusColor=#000000
|
@menuAcceleratorForeground=darken(@foreground,15%)
|
||||||
|
@menuAcceleratorSelectionForeground=@selectionForeground
|
||||||
|
@cellFocusColor=#000
|
||||||
@icon=#adadad
|
@icon=#adadad
|
||||||
|
|
||||||
# Drop (use lazy colors for IntelliJ platform themes, which usually do not specify these colors)
|
# 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)
|
@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 ----
|
#---- system colors ----
|
||||||
|
|
||||||
activeCaption=#434E60
|
activeCaption=#434E60
|
||||||
@@ -74,6 +58,9 @@ controlDkShadow=lighten($controlShadow,10%)
|
|||||||
Button.background=#4c5052
|
Button.background=#4c5052
|
||||||
Button.hoverBackground=lighten($Button.background,3%,derived)
|
Button.hoverBackground=lighten($Button.background,3%,derived)
|
||||||
Button.pressedBackground=lighten($Button.background,6%,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.borderColor=#5e6060
|
||||||
Button.disabledBorderColor=#5e6060
|
Button.disabledBorderColor=#5e6060
|
||||||
@@ -81,7 +68,7 @@ Button.focusedBorderColor=#466d94
|
|||||||
Button.hoverBorderColor=$Button.focusedBorderColor
|
Button.hoverBorderColor=$Button.focusedBorderColor
|
||||||
|
|
||||||
Button.default.background=#365880
|
Button.default.background=#365880
|
||||||
Button.default.foreground=#bbbbbb
|
Button.default.foreground=#bbb
|
||||||
Button.default.hoverBackground=lighten($Button.default.background,3%,derived)
|
Button.default.hoverBackground=lighten($Button.default.background,3%,derived)
|
||||||
Button.default.pressedBackground=lighten($Button.default.background,6%,derived)
|
Button.default.pressedBackground=lighten($Button.default.background,6%,derived)
|
||||||
Button.default.borderColor=#4c708c
|
Button.default.borderColor=#4c708c
|
||||||
@@ -92,6 +79,7 @@ Button.default.boldText=true
|
|||||||
|
|
||||||
Button.toolbar.hoverBackground=lighten($Button.background,1%,derived)
|
Button.toolbar.hoverBackground=lighten($Button.background,1%,derived)
|
||||||
Button.toolbar.pressedBackground=lighten($Button.background,4%,derived)
|
Button.toolbar.pressedBackground=lighten($Button.background,4%,derived)
|
||||||
|
Button.toolbar.selectedBackground=lighten($Button.background,7%,derived)
|
||||||
|
|
||||||
|
|
||||||
#---- CheckBox ----
|
#---- CheckBox ----
|
||||||
@@ -132,12 +120,10 @@ CheckBox.icon[filled].selectedPressedBackground=darken($CheckBox.icon[filled].se
|
|||||||
|
|
||||||
#---- ComboBox ----
|
#---- ComboBox ----
|
||||||
|
|
||||||
ComboBox.background=@textComponentBackground
|
|
||||||
ComboBox.buttonBackground=@textComponentBackground
|
|
||||||
ComboBox.buttonEditableBackground=#404445
|
ComboBox.buttonEditableBackground=#404445
|
||||||
ComboBox.buttonArrowColor=#9A9DA1
|
ComboBox.buttonArrowColor=#9A9DA1
|
||||||
ComboBox.buttonDisabledArrowColor=#585858
|
ComboBox.buttonDisabledArrowColor=#585858
|
||||||
ComboBox.buttonHoverArrowColor=#bbbbbb
|
ComboBox.buttonHoverArrowColor=#bbb
|
||||||
|
|
||||||
|
|
||||||
#---- Component ----
|
#---- Component ----
|
||||||
@@ -187,11 +173,6 @@ InternalFrame.activeDropShadowOpacity=0.5
|
|||||||
InternalFrame.inactiveDropShadowOpacity=0.75
|
InternalFrame.inactiveDropShadowOpacity=0.75
|
||||||
|
|
||||||
|
|
||||||
#---- List ----
|
|
||||||
|
|
||||||
List.background=@textComponentBackground
|
|
||||||
|
|
||||||
|
|
||||||
#---- Menu ----
|
#---- Menu ----
|
||||||
|
|
||||||
Menu.icon.arrowColor=#A7A7A7
|
Menu.icon.arrowColor=#A7A7A7
|
||||||
@@ -201,7 +182,6 @@ Menu.icon.disabledArrowColor=#606060
|
|||||||
#---- MenuBar ----
|
#---- MenuBar ----
|
||||||
|
|
||||||
MenuBar.borderColor=#515151
|
MenuBar.borderColor=#515151
|
||||||
MenuBar.hoverBackground=@menuHoverBackground
|
|
||||||
|
|
||||||
|
|
||||||
#---- MenuItemCheckBox ----
|
#---- MenuItemCheckBox ----
|
||||||
@@ -228,17 +208,12 @@ PopupMenu.borderColor=#5e5e5e
|
|||||||
|
|
||||||
#---- ProgressBar ----
|
#---- ProgressBar ----
|
||||||
|
|
||||||
ProgressBar.background=#555555
|
ProgressBar.background=#555
|
||||||
ProgressBar.foreground=#4A88C7
|
ProgressBar.foreground=#4A88C7
|
||||||
ProgressBar.selectionForeground=@foreground
|
ProgressBar.selectionForeground=@foreground
|
||||||
ProgressBar.selectionBackground=@foreground
|
ProgressBar.selectionBackground=@foreground
|
||||||
|
|
||||||
|
|
||||||
#---- RadioButton ----
|
|
||||||
|
|
||||||
RadioButton.icon[filled].centerDiameter=5
|
|
||||||
|
|
||||||
|
|
||||||
#---- RootPane ----
|
#---- RootPane ----
|
||||||
|
|
||||||
RootPane.activeBorderColor=darken(@background,7%,derived)
|
RootPane.activeBorderColor=darken(@background,7%,derived)
|
||||||
@@ -265,7 +240,7 @@ Separator.foreground=#515151
|
|||||||
|
|
||||||
Slider.trackColor=#646464
|
Slider.trackColor=#646464
|
||||||
Slider.thumbColor=#A6A6A6
|
Slider.thumbColor=#A6A6A6
|
||||||
Slider.tickColor=#888888
|
Slider.tickColor=#888
|
||||||
Slider.hoverColor=darken($Slider.thumbColor,15%,derived)
|
Slider.hoverColor=darken($Slider.thumbColor,15%,derived)
|
||||||
Slider.disabledForeground=#4c5052
|
Slider.disabledForeground=#4c5052
|
||||||
|
|
||||||
@@ -278,7 +253,6 @@ SplitPaneDivider.oneTouchHoverArrowColor=#7A7D81
|
|||||||
|
|
||||||
#---- TabbedPane ----
|
#---- TabbedPane ----
|
||||||
|
|
||||||
TabbedPane.disabledForeground=@disabledText
|
|
||||||
TabbedPane.underlineColor=#4A88C7
|
TabbedPane.underlineColor=#4A88C7
|
||||||
TabbedPane.disabledUnderlineColor=#7a7a7a
|
TabbedPane.disabledUnderlineColor=#7a7a7a
|
||||||
TabbedPane.hoverColor=#2e3133
|
TabbedPane.hoverColor=#2e3133
|
||||||
@@ -288,13 +262,11 @@ TabbedPane.contentAreaColor=#323232
|
|||||||
|
|
||||||
#---- Table ----
|
#---- Table ----
|
||||||
|
|
||||||
Table.background=@textComponentBackground
|
|
||||||
Table.gridColor=lighten($Table.background,3%)
|
Table.gridColor=lighten($Table.background,3%)
|
||||||
|
|
||||||
|
|
||||||
#---- TableHeader ----
|
#---- TableHeader ----
|
||||||
|
|
||||||
TableHeader.background=@textComponentBackground
|
|
||||||
TableHeader.separatorColor=lighten($TableHeader.background,10%)
|
TableHeader.separatorColor=lighten($TableHeader.background,10%)
|
||||||
TableHeader.bottomSeparatorColor=$TableHeader.separatorColor
|
TableHeader.bottomSeparatorColor=$TableHeader.separatorColor
|
||||||
|
|
||||||
@@ -309,7 +281,6 @@ TitlePane.buttonPressedBackground=lighten($TitlePane.background,20%,derived)
|
|||||||
#---- ToggleButton ----
|
#---- ToggleButton ----
|
||||||
|
|
||||||
ToggleButton.selectedBackground=lighten($ToggleButton.background,10%,derived)
|
ToggleButton.selectedBackground=lighten($ToggleButton.background,10%,derived)
|
||||||
ToggleButton.selectedForeground=@foreground
|
|
||||||
ToggleButton.disabledSelectedBackground=lighten($ToggleButton.background,3%,derived)
|
ToggleButton.disabledSelectedBackground=lighten($ToggleButton.background,3%,derived)
|
||||||
|
|
||||||
ToggleButton.toolbar.selectedBackground=lighten($ToggleButton.background,7%,derived)
|
ToggleButton.toolbar.selectedBackground=lighten($ToggleButton.background,7%,derived)
|
||||||
@@ -323,5 +294,4 @@ ToolTip.background=#1e2123
|
|||||||
|
|
||||||
#---- Tree ----
|
#---- Tree ----
|
||||||
|
|
||||||
Tree.background=@textComponentBackground
|
|
||||||
Tree.hash=#505355
|
Tree.hash=#505355
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
Button.focusedBackground=null
|
Button.focusedBackground=null
|
||||||
|
|
||||||
Button.default.background=#4D8AC9
|
Button.default.background=#4D8AC9
|
||||||
Button.default.foreground=#FFFFFF
|
Button.default.foreground=#fff
|
||||||
Button.default.focusedBackground=null
|
Button.default.focusedBackground=null
|
||||||
Button.default.borderColor=#3D75B2
|
Button.default.borderColor=#3D75B2
|
||||||
Button.default.hoverBorderColor=#A9C9F5
|
Button.default.hoverBorderColor=#A9C9F5
|
||||||
|
|||||||
@@ -67,6 +67,22 @@ ViewportUI=com.formdev.flatlaf.ui.FlatViewportUI
|
|||||||
@menuItemMargin=3,6,3,6
|
@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 ----
|
#---- system colors ----
|
||||||
|
|
||||||
desktop=@textComponentBackground
|
desktop=@textComponentBackground
|
||||||
@@ -184,6 +200,8 @@ ComboBox.editorColumns=0
|
|||||||
ComboBox.maximumRowCount=15
|
ComboBox.maximumRowCount=15
|
||||||
[mac]ComboBox.showPopupOnNavigation=true
|
[mac]ComboBox.showPopupOnNavigation=true
|
||||||
ComboBox.buttonStyle=auto
|
ComboBox.buttonStyle=auto
|
||||||
|
ComboBox.background=@textComponentBackground
|
||||||
|
ComboBox.buttonBackground=@textComponentBackground
|
||||||
|
|
||||||
|
|
||||||
#---- Component ----
|
#---- Component ----
|
||||||
@@ -288,6 +306,7 @@ List.cellFocusColor=@cellFocusColor
|
|||||||
List.cellNoFocusBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Default
|
List.cellNoFocusBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Default
|
||||||
List.focusCellHighlightBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Focused
|
List.focusCellHighlightBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Focused
|
||||||
List.focusSelectedCellHighlightBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Selected
|
List.focusSelectedCellHighlightBorder=com.formdev.flatlaf.ui.FlatListCellBorder$Selected
|
||||||
|
List.background=@textComponentBackground
|
||||||
List.selectionInactiveBackground=@selectionInactiveBackground
|
List.selectionInactiveBackground=@selectionInactiveBackground
|
||||||
List.selectionInactiveForeground=@selectionInactiveForeground
|
List.selectionInactiveForeground=@selectionInactiveForeground
|
||||||
List.dropCellBackground=@dropCellBackground
|
List.dropCellBackground=@dropCellBackground
|
||||||
@@ -313,6 +332,7 @@ Menu.background=@menuBackground
|
|||||||
|
|
||||||
MenuBar.border=com.formdev.flatlaf.ui.FlatMenuBarBorder
|
MenuBar.border=com.formdev.flatlaf.ui.FlatMenuBarBorder
|
||||||
MenuBar.background=@menuBackground
|
MenuBar.background=@menuBackground
|
||||||
|
MenuBar.hoverBackground=@menuHoverBackground
|
||||||
MenuBar.itemMargins=3,8,3,8
|
MenuBar.itemMargins=3,8,3,8
|
||||||
|
|
||||||
|
|
||||||
@@ -373,6 +393,7 @@ PasswordField.margin=@textComponentMargin
|
|||||||
PasswordField.background=@textComponentBackground
|
PasswordField.background=@textComponentBackground
|
||||||
PasswordField.placeholderForeground=@disabledText
|
PasswordField.placeholderForeground=@disabledText
|
||||||
PasswordField.echoChar=\u2022
|
PasswordField.echoChar=\u2022
|
||||||
|
PasswordField.showCapsLock=true
|
||||||
PasswordField.capsLockIcon=com.formdev.flatlaf.icons.FlatCapsLockIcon
|
PasswordField.capsLockIcon=com.formdev.flatlaf.icons.FlatCapsLockIcon
|
||||||
|
|
||||||
|
|
||||||
@@ -411,6 +432,7 @@ ProgressBar.repaintInterval=15
|
|||||||
RadioButton.border=com.formdev.flatlaf.ui.FlatMarginBorder
|
RadioButton.border=com.formdev.flatlaf.ui.FlatMarginBorder
|
||||||
RadioButton.icon=com.formdev.flatlaf.icons.FlatRadioButtonIcon
|
RadioButton.icon=com.formdev.flatlaf.icons.FlatRadioButtonIcon
|
||||||
RadioButton.icon.centerDiameter=8
|
RadioButton.icon.centerDiameter=8
|
||||||
|
RadioButton.icon[filled].centerDiameter=5
|
||||||
RadioButton.margin=2,2,2,2
|
RadioButton.margin=2,2,2,2
|
||||||
RadioButton.iconTextGap=4
|
RadioButton.iconTextGap=4
|
||||||
RadioButton.rollover=true
|
RadioButton.rollover=true
|
||||||
@@ -522,6 +544,7 @@ TabbedPane.tabAreaInsets=0,0,0,0
|
|||||||
TabbedPane.selectedTabPadInsets=0,0,0,0
|
TabbedPane.selectedTabPadInsets=0,0,0,0
|
||||||
TabbedPane.tabRunOverlay=0
|
TabbedPane.tabRunOverlay=0
|
||||||
TabbedPane.tabsOverlapBorder=true
|
TabbedPane.tabsOverlapBorder=true
|
||||||
|
TabbedPane.disabledForeground=@disabledText
|
||||||
TabbedPane.shadow=@background
|
TabbedPane.shadow=@background
|
||||||
TabbedPane.contentBorderInsets=null
|
TabbedPane.contentBorderInsets=null
|
||||||
|
|
||||||
@@ -544,6 +567,7 @@ Table.focusCellHighlightBorder=com.formdev.flatlaf.ui.FlatTableCellBorder$Focuse
|
|||||||
Table.focusSelectedCellHighlightBorder=com.formdev.flatlaf.ui.FlatTableCellBorder$Selected
|
Table.focusSelectedCellHighlightBorder=com.formdev.flatlaf.ui.FlatTableCellBorder$Selected
|
||||||
Table.focusCellBackground=@textComponentBackground
|
Table.focusCellBackground=@textComponentBackground
|
||||||
Table.focusCellForeground=@foreground
|
Table.focusCellForeground=@foreground
|
||||||
|
Table.background=@textComponentBackground
|
||||||
Table.selectionInactiveBackground=@selectionInactiveBackground
|
Table.selectionInactiveBackground=@selectionInactiveBackground
|
||||||
Table.selectionInactiveForeground=@selectionInactiveForeground
|
Table.selectionInactiveForeground=@selectionInactiveForeground
|
||||||
Table.dropCellBackground=@dropCellBackground
|
Table.dropCellBackground=@dropCellBackground
|
||||||
@@ -557,6 +581,7 @@ Table.dropLineShortColor=@dropLineShortColor
|
|||||||
TableHeader.height=25
|
TableHeader.height=25
|
||||||
TableHeader.cellBorder=2,3,2,3
|
TableHeader.cellBorder=2,3,2,3
|
||||||
TableHeader.focusCellBackground=$TableHeader.background
|
TableHeader.focusCellBackground=$TableHeader.background
|
||||||
|
TableHeader.background=@textComponentBackground
|
||||||
|
|
||||||
|
|
||||||
#---- TextArea ----
|
#---- TextArea ----
|
||||||
@@ -628,6 +653,7 @@ ToggleButton.rollover=true
|
|||||||
|
|
||||||
ToggleButton.background=$Button.background
|
ToggleButton.background=$Button.background
|
||||||
ToggleButton.pressedBackground=$Button.pressedBackground
|
ToggleButton.pressedBackground=$Button.pressedBackground
|
||||||
|
ToggleButton.selectedForeground=@foreground
|
||||||
|
|
||||||
ToggleButton.toolbar.hoverBackground=$Button.toolbar.hoverBackground
|
ToggleButton.toolbar.hoverBackground=$Button.toolbar.hoverBackground
|
||||||
ToggleButton.toolbar.pressedBackground=$Button.toolbar.pressedBackground
|
ToggleButton.toolbar.pressedBackground=$Button.toolbar.pressedBackground
|
||||||
@@ -668,9 +694,11 @@ ToolTipManager.enableToolTipMode=activeApplication
|
|||||||
|
|
||||||
Tree.border=1,1,1,1
|
Tree.border=1,1,1,1
|
||||||
Tree.editorBorder=1,1,1,1,@cellFocusColor
|
Tree.editorBorder=1,1,1,1,@cellFocusColor
|
||||||
|
Tree.background=@textComponentBackground
|
||||||
Tree.selectionInactiveBackground=@selectionInactiveBackground
|
Tree.selectionInactiveBackground=@selectionInactiveBackground
|
||||||
Tree.selectionInactiveForeground=@selectionInactiveForeground
|
Tree.selectionInactiveForeground=@selectionInactiveForeground
|
||||||
Tree.textBackground=$Tree.background
|
Tree.textBackground=$Tree.background
|
||||||
|
Tree.textForeground=$Tree.foreground
|
||||||
Tree.selectionBorderColor=@cellFocusColor
|
Tree.selectionBorderColor=@cellFocusColor
|
||||||
Tree.dropCellBackground=@dropCellBackground
|
Tree.dropCellBackground=@dropCellBackground
|
||||||
Tree.dropCellForeground=@dropCellForeground
|
Tree.dropCellForeground=@dropCellForeground
|
||||||
|
|||||||
@@ -21,18 +21,20 @@
|
|||||||
#---- variables ----
|
#---- variables ----
|
||||||
|
|
||||||
@background=#f2f2f2
|
@background=#f2f2f2
|
||||||
@foreground=#000000
|
@foreground=#000
|
||||||
@selectionBackground=#2675BF
|
@selectionBackground=#2675BF
|
||||||
@selectionForeground=#ffffff
|
@selectionForeground=#fff
|
||||||
@selectionInactiveBackground=#d4d4d4
|
@selectionInactiveBackground=#d4d4d4
|
||||||
@selectionInactiveForeground=@foreground
|
@selectionInactiveForeground=@foreground
|
||||||
@disabledText=#8C8C8C
|
@disabledText=#8C8C8C
|
||||||
@textComponentBackground=#ffffff
|
@textComponentBackground=#fff
|
||||||
@menuBackground=#fff
|
@menuBackground=#fff
|
||||||
@menuHoverBackground=darken(@menuBackground,10%,derived)
|
@menuHoverBackground=darken(@menuBackground,10%,derived)
|
||||||
@menuCheckBackground=darken(@menuBackground,10%,derived)
|
@menuCheckBackground=darken(@menuBackground,10%,derived)
|
||||||
@menuCheckHoverBackground=darken(@menuBackground,20%,derived)
|
@menuCheckHoverBackground=darken(@menuBackground,20%,derived)
|
||||||
@cellFocusColor=#000000
|
@menuAcceleratorForeground=lighten(@foreground,30%)
|
||||||
|
@menuAcceleratorSelectionForeground=@selectionForeground
|
||||||
|
@cellFocusColor=#000
|
||||||
@icon=#afafaf
|
@icon=#afafaf
|
||||||
|
|
||||||
# Drop (use lazy colors for IntelliJ platform themes, which usually do not specify these colors)
|
# 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)
|
@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 ----
|
#---- system colors ----
|
||||||
|
|
||||||
activeCaption=#99b4d1
|
activeCaption=#99b4d1
|
||||||
@@ -71,10 +55,13 @@ controlDkShadow=darken($controlShadow,15%)
|
|||||||
|
|
||||||
#---- Button ----
|
#---- Button ----
|
||||||
|
|
||||||
Button.background=#ffffff
|
Button.background=#fff
|
||||||
Button.focusedBackground=#e3f1fa
|
Button.focusedBackground=#e3f1fa
|
||||||
Button.hoverBackground=darken($Button.background,3%,derived)
|
Button.hoverBackground=darken($Button.background,3%,derived)
|
||||||
Button.pressedBackground=darken($Button.background,10%,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.borderColor=$Component.borderColor
|
||||||
Button.disabledBorderColor=$Component.disabledBorderColor
|
Button.disabledBorderColor=$Component.disabledBorderColor
|
||||||
@@ -94,13 +81,14 @@ Button.default.borderWidth=2
|
|||||||
|
|
||||||
Button.toolbar.hoverBackground=darken($Button.background,12%,derived)
|
Button.toolbar.hoverBackground=darken($Button.background,12%,derived)
|
||||||
Button.toolbar.pressedBackground=darken($Button.background,15%,derived)
|
Button.toolbar.pressedBackground=darken($Button.background,15%,derived)
|
||||||
|
Button.toolbar.selectedBackground=$Button.selectedBackground
|
||||||
|
|
||||||
|
|
||||||
#---- CheckBox ----
|
#---- CheckBox ----
|
||||||
|
|
||||||
# enabled
|
# enabled
|
||||||
CheckBox.icon.borderColor=#b0b0b0
|
CheckBox.icon.borderColor=#b0b0b0
|
||||||
CheckBox.icon.background=#FFFFFF
|
CheckBox.icon.background=#fff
|
||||||
CheckBox.icon.selectedBorderColor=$CheckBox.icon.borderColor
|
CheckBox.icon.selectedBorderColor=$CheckBox.icon.borderColor
|
||||||
CheckBox.icon.selectedBackground=$CheckBox.icon.background
|
CheckBox.icon.selectedBackground=$CheckBox.icon.background
|
||||||
CheckBox.icon.checkmarkColor=#4F9EE3
|
CheckBox.icon.checkmarkColor=#4F9EE3
|
||||||
@@ -126,7 +114,7 @@ CheckBox.icon.pressedBackground=$Button.pressedBackground
|
|||||||
# enabled
|
# enabled
|
||||||
CheckBox.icon[filled].selectedBorderColor=#4B97D9
|
CheckBox.icon[filled].selectedBorderColor=#4B97D9
|
||||||
CheckBox.icon[filled].selectedBackground=#4F9EE3
|
CheckBox.icon[filled].selectedBackground=#4F9EE3
|
||||||
CheckBox.icon[filled].checkmarkColor=#FFFFFF
|
CheckBox.icon[filled].checkmarkColor=#fff
|
||||||
# focused
|
# focused
|
||||||
CheckBox.icon[filled].selectedFocusedBorderColor=#ACCFF7
|
CheckBox.icon[filled].selectedFocusedBorderColor=#ACCFF7
|
||||||
CheckBox.icon[filled].selectedFocusedBackground=$CheckBox.icon[filled].selectedBackground
|
CheckBox.icon[filled].selectedFocusedBackground=$CheckBox.icon[filled].selectedBackground
|
||||||
@@ -139,12 +127,10 @@ CheckBox.icon[filled].selectedPressedBackground=darken($CheckBox.icon[filled].se
|
|||||||
|
|
||||||
#---- ComboBox ----
|
#---- ComboBox ----
|
||||||
|
|
||||||
ComboBox.background=@textComponentBackground
|
|
||||||
ComboBox.buttonBackground=@textComponentBackground
|
|
||||||
ComboBox.buttonEditableBackground=#fafafa
|
ComboBox.buttonEditableBackground=#fafafa
|
||||||
ComboBox.buttonArrowColor=#666666
|
ComboBox.buttonArrowColor=#666
|
||||||
ComboBox.buttonDisabledArrowColor=#ABABAB
|
ComboBox.buttonDisabledArrowColor=#ABABAB
|
||||||
ComboBox.buttonHoverArrowColor=#999999
|
ComboBox.buttonHoverArrowColor=#999
|
||||||
|
|
||||||
|
|
||||||
#---- Component ----
|
#---- Component ----
|
||||||
@@ -199,21 +185,15 @@ InternalFrame.activeDropShadowOpacity=0.25
|
|||||||
InternalFrame.inactiveDropShadowOpacity=0.5
|
InternalFrame.inactiveDropShadowOpacity=0.5
|
||||||
|
|
||||||
|
|
||||||
#---- List ----
|
|
||||||
|
|
||||||
List.background=@textComponentBackground
|
|
||||||
|
|
||||||
|
|
||||||
#---- Menu ----
|
#---- Menu ----
|
||||||
|
|
||||||
Menu.icon.arrowColor=#666666
|
Menu.icon.arrowColor=#666
|
||||||
Menu.icon.disabledArrowColor=#ABABAB
|
Menu.icon.disabledArrowColor=#ABABAB
|
||||||
|
|
||||||
|
|
||||||
#---- MenuBar ----
|
#---- MenuBar ----
|
||||||
|
|
||||||
MenuBar.borderColor=#cdcdcd
|
MenuBar.borderColor=#cdcdcd
|
||||||
MenuBar.hoverBackground=@menuHoverBackground
|
|
||||||
|
|
||||||
|
|
||||||
#---- MenuItemCheckBox ----
|
#---- MenuItemCheckBox ----
|
||||||
@@ -246,11 +226,6 @@ ProgressBar.selectionForeground=@textComponentBackground
|
|||||||
ProgressBar.selectionBackground=@foreground
|
ProgressBar.selectionBackground=@foreground
|
||||||
|
|
||||||
|
|
||||||
#---- RadioButton ----
|
|
||||||
|
|
||||||
RadioButton.icon[filled].centerDiameter=5
|
|
||||||
|
|
||||||
|
|
||||||
#---- RootPane ----
|
#---- RootPane ----
|
||||||
|
|
||||||
RootPane.activeBorderColor=#707070
|
RootPane.activeBorderColor=#707070
|
||||||
@@ -277,7 +252,7 @@ Separator.foreground=#d1d1d1
|
|||||||
|
|
||||||
Slider.trackColor=#c4c4c4
|
Slider.trackColor=#c4c4c4
|
||||||
Slider.thumbColor=#6e6e6e
|
Slider.thumbColor=#6e6e6e
|
||||||
Slider.tickColor=#888888
|
Slider.tickColor=#888
|
||||||
Slider.hoverColor=lighten($Slider.thumbColor,15%,derived)
|
Slider.hoverColor=lighten($Slider.thumbColor,15%,derived)
|
||||||
Slider.disabledForeground=#c0c0c0
|
Slider.disabledForeground=#c0c0c0
|
||||||
|
|
||||||
@@ -285,12 +260,11 @@ Slider.disabledForeground=#c0c0c0
|
|||||||
#---- SplitPane ----
|
#---- SplitPane ----
|
||||||
|
|
||||||
SplitPaneDivider.draggingColor=#c4c4c4
|
SplitPaneDivider.draggingColor=#c4c4c4
|
||||||
SplitPaneDivider.oneTouchHoverArrowColor=#333333
|
SplitPaneDivider.oneTouchHoverArrowColor=#333
|
||||||
|
|
||||||
|
|
||||||
#---- TabbedPane ----
|
#---- TabbedPane ----
|
||||||
|
|
||||||
TabbedPane.disabledForeground=@disabledText
|
|
||||||
TabbedPane.underlineColor=#4083C9
|
TabbedPane.underlineColor=#4083C9
|
||||||
TabbedPane.disabledUnderlineColor=#ababab
|
TabbedPane.disabledUnderlineColor=#ababab
|
||||||
TabbedPane.hoverColor=#d9d9d9
|
TabbedPane.hoverColor=#d9d9d9
|
||||||
@@ -300,13 +274,11 @@ TabbedPane.contentAreaColor=#bfbfbf
|
|||||||
|
|
||||||
#---- Table ----
|
#---- Table ----
|
||||||
|
|
||||||
Table.background=@textComponentBackground
|
|
||||||
Table.gridColor=darken($Table.background,3%)
|
Table.gridColor=darken($Table.background,3%)
|
||||||
|
|
||||||
|
|
||||||
#---- TableHeader ----
|
#---- TableHeader ----
|
||||||
|
|
||||||
TableHeader.background=@textComponentBackground
|
|
||||||
TableHeader.separatorColor=darken($TableHeader.background,10%)
|
TableHeader.separatorColor=darken($TableHeader.background,10%)
|
||||||
TableHeader.bottomSeparatorColor=$TableHeader.separatorColor
|
TableHeader.bottomSeparatorColor=$TableHeader.separatorColor
|
||||||
|
|
||||||
@@ -321,7 +293,6 @@ TitlePane.buttonPressedBackground=darken($TitlePane.background,20%,derived)
|
|||||||
#---- ToggleButton ----
|
#---- ToggleButton ----
|
||||||
|
|
||||||
ToggleButton.selectedBackground=darken($ToggleButton.background,20%,derived)
|
ToggleButton.selectedBackground=darken($ToggleButton.background,20%,derived)
|
||||||
ToggleButton.selectedForeground=@foreground
|
|
||||||
ToggleButton.disabledSelectedBackground=darken($ToggleButton.background,13%,derived)
|
ToggleButton.disabledSelectedBackground=darken($ToggleButton.background,13%,derived)
|
||||||
|
|
||||||
ToggleButton.toolbar.selectedBackground=$ToggleButton.selectedBackground
|
ToggleButton.toolbar.selectedBackground=$ToggleButton.selectedBackground
|
||||||
@@ -335,5 +306,4 @@ ToolTip.background=#fafafa
|
|||||||
|
|
||||||
#---- Tree ----
|
#---- Tree ----
|
||||||
|
|
||||||
Tree.background=@textComponentBackground
|
|
||||||
Tree.hash=#E6E6E6
|
Tree.hash=#E6E6E6
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.formdev.flatlaf.demo;
|
package com.formdev.flatlaf.demo;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.text.DefaultEditorKit;
|
import javax.swing.text.DefaultEditorKit;
|
||||||
import net.miginfocom.swing.*;
|
import net.miginfocom.swing.*;
|
||||||
@@ -114,14 +115,14 @@ class BasicComponentsPanel
|
|||||||
JScrollPane scrollPane12 = new JScrollPane();
|
JScrollPane scrollPane12 = new JScrollPane();
|
||||||
JTextPane textPane4 = new JTextPane();
|
JTextPane textPane4 = new JTextPane();
|
||||||
JTextPane textPane5 = new JTextPane();
|
JTextPane textPane5 = new JTextPane();
|
||||||
JLabel label3 = new JLabel();
|
JLabel errorHintsLabel = new JLabel();
|
||||||
JTextField textField5 = new JTextField();
|
JTextField errorHintsTextField = new JTextField();
|
||||||
JComboBox<String> comboBox7 = new JComboBox<>();
|
JComboBox<String> errorHintsComboBox = new JComboBox<>();
|
||||||
JSpinner spinner3 = new JSpinner();
|
JSpinner errorHintsSpinner = new JSpinner();
|
||||||
JLabel label4 = new JLabel();
|
JLabel warningHintsLabel = new JLabel();
|
||||||
JTextField textField7 = new JTextField();
|
JTextField warningHintsTextField = new JTextField();
|
||||||
JComboBox<String> comboBox8 = new JComboBox<>();
|
JComboBox<String> warningHintsComboBox = new JComboBox<>();
|
||||||
JSpinner spinner4 = new JSpinner();
|
JSpinner warningHintsSpinner = new JSpinner();
|
||||||
JPopupMenu popupMenu1 = new JPopupMenu();
|
JPopupMenu popupMenu1 = new JPopupMenu();
|
||||||
JMenuItem cutMenuItem = new JMenuItem();
|
JMenuItem cutMenuItem = new JMenuItem();
|
||||||
JMenuItem copyMenuItem = new JMenuItem();
|
JMenuItem copyMenuItem = new JMenuItem();
|
||||||
@@ -129,12 +130,12 @@ class BasicComponentsPanel
|
|||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setLayout(new MigLayout(
|
setLayout(new MigLayout(
|
||||||
"hidemode 3",
|
"insets dialog,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[]" +
|
"[sizegroup 1]" +
|
||||||
"[]" +
|
"[sizegroup 1]" +
|
||||||
"[]" +
|
"[sizegroup 1]" +
|
||||||
"[]" +
|
"[sizegroup 1]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]",
|
"[]",
|
||||||
// rows
|
// rows
|
||||||
@@ -606,44 +607,44 @@ class BasicComponentsPanel
|
|||||||
textPane5.setText("No scroll pane");
|
textPane5.setText("No scroll pane");
|
||||||
add(textPane5, "cell 5 11,growx");
|
add(textPane5, "cell 5 11,growx");
|
||||||
|
|
||||||
//---- label3 ----
|
//---- errorHintsLabel ----
|
||||||
label3.setText("Error hints:");
|
errorHintsLabel.setText("Error hints:");
|
||||||
add(label3, "cell 0 12");
|
add(errorHintsLabel, "cell 0 12");
|
||||||
|
|
||||||
//---- textField5 ----
|
//---- errorHintsTextField ----
|
||||||
textField5.putClientProperty("JComponent.outline", "error");
|
errorHintsTextField.putClientProperty("JComponent.outline", "error");
|
||||||
add(textField5, "cell 1 12,growx");
|
add(errorHintsTextField, "cell 1 12,growx");
|
||||||
|
|
||||||
//---- comboBox7 ----
|
//---- errorHintsComboBox ----
|
||||||
comboBox7.putClientProperty("JComponent.outline", "error");
|
errorHintsComboBox.putClientProperty("JComponent.outline", "error");
|
||||||
comboBox7.setModel(new DefaultComboBoxModel<>(new String[] {
|
errorHintsComboBox.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||||
"Editable"
|
"Editable"
|
||||||
}));
|
}));
|
||||||
comboBox7.setEditable(true);
|
errorHintsComboBox.setEditable(true);
|
||||||
add(comboBox7, "cell 2 12,growx");
|
add(errorHintsComboBox, "cell 2 12,growx");
|
||||||
|
|
||||||
//---- spinner3 ----
|
//---- errorHintsSpinner ----
|
||||||
spinner3.putClientProperty("JComponent.outline", "error");
|
errorHintsSpinner.putClientProperty("JComponent.outline", "error");
|
||||||
add(spinner3, "cell 3 12,growx");
|
add(errorHintsSpinner, "cell 3 12,growx");
|
||||||
|
|
||||||
//---- label4 ----
|
//---- warningHintsLabel ----
|
||||||
label4.setText("Warning hints:");
|
warningHintsLabel.setText("Warning hints:");
|
||||||
add(label4, "cell 0 13");
|
add(warningHintsLabel, "cell 0 13");
|
||||||
|
|
||||||
//---- textField7 ----
|
//---- warningHintsTextField ----
|
||||||
textField7.putClientProperty("JComponent.outline", "warning");
|
warningHintsTextField.putClientProperty("JComponent.outline", "warning");
|
||||||
add(textField7, "cell 1 13,growx");
|
add(warningHintsTextField, "cell 1 13,growx");
|
||||||
|
|
||||||
//---- comboBox8 ----
|
//---- warningHintsComboBox ----
|
||||||
comboBox8.putClientProperty("JComponent.outline", "warning");
|
warningHintsComboBox.putClientProperty("JComponent.outline", "warning");
|
||||||
comboBox8.setModel(new DefaultComboBoxModel<>(new String[] {
|
warningHintsComboBox.setModel(new DefaultComboBoxModel<>(new String[] {
|
||||||
"Not editable"
|
"Not editable"
|
||||||
}));
|
}));
|
||||||
add(comboBox8, "cell 2 13,growx");
|
add(warningHintsComboBox, "cell 2 13,growx");
|
||||||
|
|
||||||
//---- spinner4 ----
|
//---- warningHintsSpinner ----
|
||||||
spinner4.putClientProperty("JComponent.outline", "warning");
|
warningHintsSpinner.putClientProperty("JComponent.outline", "warning");
|
||||||
add(spinner4, "cell 3 13,growx");
|
add(warningHintsSpinner, "cell 3 13,growx");
|
||||||
|
|
||||||
//======== popupMenu1 ========
|
//======== popupMenu1 ========
|
||||||
{
|
{
|
||||||
@@ -668,6 +669,33 @@ class BasicComponentsPanel
|
|||||||
cutMenuItem.addActionListener( new DefaultEditorKit.CutAction() );
|
cutMenuItem.addActionListener( new DefaultEditorKit.CutAction() );
|
||||||
copyMenuItem.addActionListener( new DefaultEditorKit.CopyAction() );
|
copyMenuItem.addActionListener( new DefaultEditorKit.CopyAction() );
|
||||||
pasteMenuItem.addActionListener( new DefaultEditorKit.PasteAction() );
|
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
|
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ new FormModel {
|
|||||||
"JavaCodeGenerator.defaultVariableLocal": true
|
"JavaCodeGenerator.defaultVariableLocal": true
|
||||||
}
|
}
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "hidemode 3"
|
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||||
"$columnConstraints": "[][][][][][]"
|
"$columnConstraints": "[sizegroup 1][sizegroup 1][sizegroup 1][sizegroup 1][][]"
|
||||||
"$rowConstraints": "[][][][][][][][][][][][]para[][]"
|
"$rowConstraints": "[][][][][][][][][][][][]para[][]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "this"
|
name: "this"
|
||||||
@@ -592,19 +592,19 @@ new FormModel {
|
|||||||
"value": "cell 5 11,growx"
|
"value": "cell 5 11,growx"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label3"
|
name: "errorHintsLabel"
|
||||||
"text": "Error hints:"
|
"text": "Error hints:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 12"
|
"value": "cell 0 12"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||||
name: "textField5"
|
name: "errorHintsTextField"
|
||||||
"$client.JComponent.outline": "error"
|
"$client.JComponent.outline": "error"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 12,growx"
|
"value": "cell 1 12,growx"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||||
name: "comboBox7"
|
name: "errorHintsComboBox"
|
||||||
"$client.JComponent.outline": "error"
|
"$client.JComponent.outline": "error"
|
||||||
"model": new javax.swing.DefaultComboBoxModel {
|
"model": new javax.swing.DefaultComboBoxModel {
|
||||||
selectedItem: "Editable"
|
selectedItem: "Editable"
|
||||||
@@ -615,25 +615,25 @@ new FormModel {
|
|||||||
"value": "cell 2 12,growx"
|
"value": "cell 2 12,growx"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||||
name: "spinner3"
|
name: "errorHintsSpinner"
|
||||||
"$client.JComponent.outline": "error"
|
"$client.JComponent.outline": "error"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 3 12,growx"
|
"value": "cell 3 12,growx"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label4"
|
name: "warningHintsLabel"
|
||||||
"text": "Warning hints:"
|
"text": "Warning hints:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 13"
|
"value": "cell 0 13"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
add( new FormComponent( "javax.swing.JTextField" ) {
|
||||||
name: "textField7"
|
name: "warningHintsTextField"
|
||||||
"$client.JComponent.outline": "warning"
|
"$client.JComponent.outline": "warning"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 13,growx"
|
"value": "cell 1 13,growx"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JComboBox" ) {
|
add( new FormComponent( "javax.swing.JComboBox" ) {
|
||||||
name: "comboBox8"
|
name: "warningHintsComboBox"
|
||||||
"$client.JComponent.outline": "warning"
|
"$client.JComponent.outline": "warning"
|
||||||
"model": new javax.swing.DefaultComboBoxModel {
|
"model": new javax.swing.DefaultComboBoxModel {
|
||||||
selectedItem: "Not editable"
|
selectedItem: "Not editable"
|
||||||
@@ -643,7 +643,7 @@ new FormModel {
|
|||||||
"value": "cell 2 13,growx"
|
"value": "cell 2 13,growx"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||||
name: "spinner4"
|
name: "warningHintsSpinner"
|
||||||
"$client.JComponent.outline": "warning"
|
"$client.JComponent.outline": "warning"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 3 13,growx"
|
"value": "cell 3 13,growx"
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ import com.formdev.flatlaf.*;
|
|||||||
import com.formdev.flatlaf.extras.FlatAnimatedLafChange;
|
import com.formdev.flatlaf.extras.FlatAnimatedLafChange;
|
||||||
import com.formdev.flatlaf.util.SystemInfo;
|
import com.formdev.flatlaf.util.SystemInfo;
|
||||||
import com.formdev.flatlaf.util.UIScale;
|
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.*;
|
import net.miginfocom.swing.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,6 +47,18 @@ class ControlBar
|
|||||||
ControlBar() {
|
ControlBar() {
|
||||||
initComponents();
|
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
|
// initialize look and feels combo box
|
||||||
DefaultComboBoxModel<LookAndFeelInfo> lafModel = new DefaultComboBoxModel<>();
|
DefaultComboBoxModel<LookAndFeelInfo> lafModel = new DefaultComboBoxModel<>();
|
||||||
lafModel.addElement( new LookAndFeelInfo( "Flat Light (F1)", FlatLightLaf.class.getName() ) );
|
lafModel.addElement( new LookAndFeelInfo( "Flat Light (F1)", FlatLightLaf.class.getName() ) );
|
||||||
|
|||||||
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.formdev.flatlaf.demo;
|
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.DataFlavor;
|
||||||
import java.awt.datatransfer.StringSelection;
|
import java.awt.datatransfer.StringSelection;
|
||||||
import java.awt.datatransfer.Transferable;
|
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" } )
|
@SuppressWarnings( { "unchecked", "rawtypes" } )
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||||
@@ -80,6 +118,13 @@ class DataComponentsPanel
|
|||||||
JLabel tableLabel = new JLabel();
|
JLabel tableLabel = new JLabel();
|
||||||
JScrollPane scrollPane5 = new JScrollPane();
|
JScrollPane scrollPane5 = new JScrollPane();
|
||||||
table1 = new JTable();
|
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();
|
dndCheckBox = new JCheckBox();
|
||||||
JPopupMenu popupMenu2 = new JPopupMenu();
|
JPopupMenu popupMenu2 = new JPopupMenu();
|
||||||
JMenuItem menuItem3 = new JMenuItem();
|
JMenuItem menuItem3 = new JMenuItem();
|
||||||
@@ -89,20 +134,20 @@ class DataComponentsPanel
|
|||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setLayout(new MigLayout(
|
setLayout(new MigLayout(
|
||||||
"hidemode 3",
|
"insets dialog,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[]" +
|
"[]" +
|
||||||
"[200]" +
|
"[200,fill]" +
|
||||||
"[200]",
|
"[200,fill]" +
|
||||||
|
"[fill]",
|
||||||
// rows
|
// rows
|
||||||
"[]" +
|
"[150,grow,sizegroup 1,fill]" +
|
||||||
"[::200]" +
|
"[150,grow,sizegroup 1,fill]" +
|
||||||
"[::150]" +
|
"[150,grow,sizegroup 1,fill]"));
|
||||||
"[]"));
|
|
||||||
|
|
||||||
//---- listLabel ----
|
//---- listLabel ----
|
||||||
listLabel.setText("JList:");
|
listLabel.setText("JList:");
|
||||||
add(listLabel, "cell 0 0");
|
add(listLabel, "cell 0 0,aligny top,growy 0");
|
||||||
|
|
||||||
//======== scrollPane1 ========
|
//======== scrollPane1 ========
|
||||||
{
|
{
|
||||||
@@ -134,7 +179,7 @@ class DataComponentsPanel
|
|||||||
list1.setComponentPopupMenu(popupMenu2);
|
list1.setComponentPopupMenu(popupMenu2);
|
||||||
scrollPane1.setViewportView(list1);
|
scrollPane1.setViewportView(list1);
|
||||||
}
|
}
|
||||||
add(scrollPane1, "cell 1 0,growx");
|
add(scrollPane1, "cell 1 0");
|
||||||
|
|
||||||
//======== scrollPane2 ========
|
//======== scrollPane2 ========
|
||||||
{
|
{
|
||||||
@@ -166,11 +211,11 @@ class DataComponentsPanel
|
|||||||
list2.setEnabled(false);
|
list2.setEnabled(false);
|
||||||
scrollPane2.setViewportView(list2);
|
scrollPane2.setViewportView(list2);
|
||||||
}
|
}
|
||||||
add(scrollPane2, "cell 2 0,growx");
|
add(scrollPane2, "cell 2 0");
|
||||||
|
|
||||||
//---- treeLabel ----
|
//---- treeLabel ----
|
||||||
treeLabel.setText("JTree:");
|
treeLabel.setText("JTree:");
|
||||||
add(treeLabel, "cell 0 1");
|
add(treeLabel, "cell 0 1,aligny top,growy 0");
|
||||||
|
|
||||||
//======== scrollPane3 ========
|
//======== scrollPane3 ========
|
||||||
{
|
{
|
||||||
@@ -207,7 +252,7 @@ class DataComponentsPanel
|
|||||||
tree1.setComponentPopupMenu(popupMenu2);
|
tree1.setComponentPopupMenu(popupMenu2);
|
||||||
scrollPane3.setViewportView(tree1);
|
scrollPane3.setViewportView(tree1);
|
||||||
}
|
}
|
||||||
add(scrollPane3, "cell 1 1,growx");
|
add(scrollPane3, "cell 1 1");
|
||||||
|
|
||||||
//======== scrollPane4 ========
|
//======== scrollPane4 ========
|
||||||
{
|
{
|
||||||
@@ -216,11 +261,11 @@ class DataComponentsPanel
|
|||||||
tree2.setEnabled(false);
|
tree2.setEnabled(false);
|
||||||
scrollPane4.setViewportView(tree2);
|
scrollPane4.setViewportView(tree2);
|
||||||
}
|
}
|
||||||
add(scrollPane4, "cell 2 1,growx");
|
add(scrollPane4, "cell 2 1");
|
||||||
|
|
||||||
//---- tableLabel ----
|
//---- tableLabel ----
|
||||||
tableLabel.setText("JTable:");
|
tableLabel.setText("JTable:");
|
||||||
add(tableLabel, "cell 0 2");
|
add(tableLabel, "cell 0 2,aligny top,growy 0");
|
||||||
|
|
||||||
//======== scrollPane5 ========
|
//======== scrollPane5 ========
|
||||||
{
|
{
|
||||||
@@ -297,13 +342,61 @@ class DataComponentsPanel
|
|||||||
table1.setComponentPopupMenu(popupMenu2);
|
table1.setComponentPopupMenu(popupMenu2);
|
||||||
scrollPane5.setViewportView(table1);
|
scrollPane5.setViewportView(table1);
|
||||||
}
|
}
|
||||||
add(scrollPane5, "cell 1 2 2 1,growx,width 300");
|
add(scrollPane5, "cell 1 2 2 1,width 300");
|
||||||
|
|
||||||
//---- dndCheckBox ----
|
//======== tableOptionsPanel ========
|
||||||
dndCheckBox.setText("enable drag and drop");
|
{
|
||||||
dndCheckBox.setMnemonic('D');
|
tableOptionsPanel.setLayout(new MigLayout(
|
||||||
dndCheckBox.addActionListener(e -> dndChanged());
|
"insets 0,hidemode 3",
|
||||||
add(dndCheckBox, "cell 0 3 3 1");
|
// 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 ========
|
//======== popupMenu2 ========
|
||||||
{
|
{
|
||||||
@@ -336,6 +429,12 @@ class DataComponentsPanel
|
|||||||
private JTree tree1;
|
private JTree tree1;
|
||||||
private JTree tree2;
|
private JTree tree2;
|
||||||
private JTable table1;
|
private JTable table1;
|
||||||
|
private JCheckBox showHorizontalLinesCheckBox;
|
||||||
|
private JCheckBox showVerticalLinesCheckBox;
|
||||||
|
private JCheckBox intercellSpacingCheckBox;
|
||||||
|
private JCheckBox redGridColorCheckBox;
|
||||||
|
private JCheckBox rowSelectionCheckBox;
|
||||||
|
private JCheckBox columnSelectionCheckBox;
|
||||||
private JCheckBox dndCheckBox;
|
private JCheckBox dndCheckBox;
|
||||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
// 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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -7,16 +7,16 @@ new FormModel {
|
|||||||
"JavaCodeGenerator.defaultVariableLocal": true
|
"JavaCodeGenerator.defaultVariableLocal": true
|
||||||
}
|
}
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "hidemode 3"
|
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||||
"$columnConstraints": "[][200][200]"
|
"$columnConstraints": "[][200,fill][200,fill][fill]"
|
||||||
"$rowConstraints": "[][::200][::150][]"
|
"$rowConstraints": "[150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "this"
|
name: "this"
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "listLabel"
|
name: "listLabel"
|
||||||
"text": "JList:"
|
"text": "JList:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane1"
|
name: "scrollPane1"
|
||||||
@@ -46,7 +46,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane2"
|
name: "scrollPane2"
|
||||||
@@ -76,13 +76,13 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 0,growx"
|
"value": "cell 2 0"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "treeLabel"
|
name: "treeLabel"
|
||||||
"text": "JTree:"
|
"text": "JTree:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane3"
|
name: "scrollPane3"
|
||||||
@@ -150,7 +150,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane4"
|
name: "scrollPane4"
|
||||||
@@ -162,13 +162,13 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 1,growx"
|
"value": "cell 2 1"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "tableLabel"
|
name: "tableLabel"
|
||||||
"text": "JTable:"
|
"text": "JTable:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane5"
|
name: "scrollPane5"
|
||||||
@@ -307,22 +307,92 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
name: "dndCheckBox"
|
"$layoutConstraints": "insets 0,hidemode 3"
|
||||||
"text": "enable drag and drop"
|
"$columnConstraints": "[]"
|
||||||
"mnemonic": 68
|
"$rowConstraints": "[]0[]0[]0[]0[]0[]0[]0"
|
||||||
auxiliary() {
|
} ) {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
name: "tableOptionsPanel"
|
||||||
}
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "dndChanged", false ) )
|
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 ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 3 3 1"
|
"value": "cell 3 2"
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( null ) {
|
}, new FormLayoutConstraints( null ) {
|
||||||
"location": new java.awt.Point( 0, 0 )
|
"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 ) ) {
|
add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) {
|
||||||
name: "popupMenu2"
|
name: "popupMenu2"
|
||||||
@@ -346,7 +416,7 @@ new FormModel {
|
|||||||
"text": "Noop Action"
|
"text": "Noop Action"
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( null ) {
|
}, 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.awt.event.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.text.DefaultEditorKit;
|
import javax.swing.text.DefaultEditorKit;
|
||||||
import javax.swing.text.StyleContext;
|
import javax.swing.text.StyleContext;
|
||||||
import com.formdev.flatlaf.FlatClientProperties;
|
import com.formdev.flatlaf.FlatClientProperties;
|
||||||
import com.formdev.flatlaf.FlatLaf;
|
import com.formdev.flatlaf.FlatLaf;
|
||||||
|
import com.formdev.flatlaf.demo.HintManager.Hint;
|
||||||
import com.formdev.flatlaf.demo.extras.*;
|
import com.formdev.flatlaf.demo.extras.*;
|
||||||
import com.formdev.flatlaf.demo.intellijthemes.*;
|
import com.formdev.flatlaf.demo.intellijthemes.*;
|
||||||
import com.formdev.flatlaf.extras.FlatAnimatedLafChange;
|
import com.formdev.flatlaf.extras.FlatAnimatedLafChange;
|
||||||
import com.formdev.flatlaf.extras.FlatSVGIcon;
|
import com.formdev.flatlaf.extras.FlatSVGIcon;
|
||||||
|
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
|
||||||
import com.formdev.flatlaf.extras.SVGUtils;
|
import com.formdev.flatlaf.extras.SVGUtils;
|
||||||
import com.formdev.flatlaf.ui.JBRCustomDecorations;
|
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.*;
|
import net.miginfocom.swing.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,6 +63,61 @@ class DemoFrame
|
|||||||
|
|
||||||
if( tabIndex >= 0 && tabIndex < tabbedPane.getTabCount() && tabIndex != tabbedPane.getSelectedIndex() )
|
if( tabIndex >= 0 && tabIndex < tabbedPane.getTabCount() && tabIndex != tabbedPane.getSelectedIndex() )
|
||||||
tabbedPane.setSelectedIndex( tabIndex );
|
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() {
|
private void exitActionPerformed() {
|
||||||
@@ -110,6 +171,11 @@ class DemoFrame
|
|||||||
System.setProperty( "flatlaf.animatedLafChange", String.valueOf( animatedLafChangeMenuItem.isSelected() ) );
|
System.setProperty( "flatlaf.animatedLafChange", String.valueOf( animatedLafChangeMenuItem.isSelected() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showHintsChanged() {
|
||||||
|
clearHints();
|
||||||
|
showHints();
|
||||||
|
}
|
||||||
|
|
||||||
private void fontFamilyChanged( ActionEvent e ) {
|
private void fontFamilyChanged( ActionEvent e ) {
|
||||||
String fontFamily = e.getActionCommand();
|
String fontFamily = e.getActionCommand();
|
||||||
|
|
||||||
@@ -224,6 +290,7 @@ class DemoFrame
|
|||||||
JMenu fileMenu = new JMenu();
|
JMenu fileMenu = new JMenu();
|
||||||
JMenuItem newMenuItem = new JMenuItem();
|
JMenuItem newMenuItem = new JMenuItem();
|
||||||
JMenuItem openMenuItem = new JMenuItem();
|
JMenuItem openMenuItem = new JMenuItem();
|
||||||
|
JMenuItem saveAsMenuItem = new JMenuItem();
|
||||||
JMenuItem closeMenuItem = new JMenuItem();
|
JMenuItem closeMenuItem = new JMenuItem();
|
||||||
JMenuItem exitMenuItem = new JMenuItem();
|
JMenuItem exitMenuItem = new JMenuItem();
|
||||||
JMenu editMenu = new JMenu();
|
JMenu editMenu = new JMenu();
|
||||||
@@ -243,6 +310,7 @@ class DemoFrame
|
|||||||
JMenuItem projectViewMenuItem = new JMenuItem();
|
JMenuItem projectViewMenuItem = new JMenuItem();
|
||||||
JMenuItem structureViewMenuItem = new JMenuItem();
|
JMenuItem structureViewMenuItem = new JMenuItem();
|
||||||
JMenuItem propertiesViewMenuItem = new JMenuItem();
|
JMenuItem propertiesViewMenuItem = new JMenuItem();
|
||||||
|
JMenuItem menuItem2 = new JMenuItem();
|
||||||
JMenuItem menuItem1 = new JMenuItem();
|
JMenuItem menuItem1 = new JMenuItem();
|
||||||
JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem();
|
JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem();
|
||||||
JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem();
|
JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem();
|
||||||
@@ -251,12 +319,14 @@ class DemoFrame
|
|||||||
JMenuItem restoreFontMenuItem = new JMenuItem();
|
JMenuItem restoreFontMenuItem = new JMenuItem();
|
||||||
JMenuItem incrFontMenuItem = new JMenuItem();
|
JMenuItem incrFontMenuItem = new JMenuItem();
|
||||||
JMenuItem decrFontMenuItem = new JMenuItem();
|
JMenuItem decrFontMenuItem = new JMenuItem();
|
||||||
JMenu optionsMenu = new JMenu();
|
optionsMenu = new JMenu();
|
||||||
windowDecorationsCheckBoxMenuItem = new JCheckBoxMenuItem();
|
windowDecorationsCheckBoxMenuItem = new JCheckBoxMenuItem();
|
||||||
menuBarEmbeddedCheckBoxMenuItem = new JCheckBoxMenuItem();
|
menuBarEmbeddedCheckBoxMenuItem = new JCheckBoxMenuItem();
|
||||||
underlineMenuSelectionMenuItem = new JCheckBoxMenuItem();
|
underlineMenuSelectionMenuItem = new JCheckBoxMenuItem();
|
||||||
alwaysShowMnemonicsMenuItem = new JCheckBoxMenuItem();
|
alwaysShowMnemonicsMenuItem = new JCheckBoxMenuItem();
|
||||||
animatedLafChangeMenuItem = new JCheckBoxMenuItem();
|
animatedLafChangeMenuItem = new JCheckBoxMenuItem();
|
||||||
|
JMenuItem showHintsMenuItem = new JMenuItem();
|
||||||
|
JMenuItem showUIDefaultsInspectorMenuItem = new JMenuItem();
|
||||||
JMenu helpMenu = new JMenu();
|
JMenu helpMenu = new JMenu();
|
||||||
JMenuItem aboutMenuItem = new JMenuItem();
|
JMenuItem aboutMenuItem = new JMenuItem();
|
||||||
JToolBar toolBar1 = new JToolBar();
|
JToolBar toolBar1 = new JToolBar();
|
||||||
@@ -276,7 +346,7 @@ class DemoFrame
|
|||||||
OptionPanePanel optionPanePanel = new OptionPanePanel();
|
OptionPanePanel optionPanePanel = new OptionPanePanel();
|
||||||
ExtrasPanel extrasPanel1 = new ExtrasPanel();
|
ExtrasPanel extrasPanel1 = new ExtrasPanel();
|
||||||
controlBar = new ControlBar();
|
controlBar = new ControlBar();
|
||||||
IJThemesPanel themesPanel = new IJThemesPanel();
|
themesPanel = new IJThemesPanel();
|
||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setTitle("FlatLaf Demo");
|
setTitle("FlatLaf Demo");
|
||||||
@@ -296,15 +366,22 @@ class DemoFrame
|
|||||||
newMenuItem.setText("New");
|
newMenuItem.setText("New");
|
||||||
newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
|
newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
|
||||||
newMenuItem.setMnemonic('N');
|
newMenuItem.setMnemonic('N');
|
||||||
newMenuItem.addActionListener(e -> menuItemActionPerformed(e));
|
newMenuItem.addActionListener(e -> newActionPerformed());
|
||||||
fileMenu.add(newMenuItem);
|
fileMenu.add(newMenuItem);
|
||||||
|
|
||||||
//---- openMenuItem ----
|
//---- openMenuItem ----
|
||||||
openMenuItem.setText("Open");
|
openMenuItem.setText("Open...");
|
||||||
openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
|
openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
|
||||||
openMenuItem.setMnemonic('O');
|
openMenuItem.setMnemonic('O');
|
||||||
openMenuItem.addActionListener(e -> menuItemActionPerformed(e));
|
openMenuItem.addActionListener(e -> openActionPerformed());
|
||||||
fileMenu.add(openMenuItem);
|
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();
|
fileMenu.addSeparator();
|
||||||
|
|
||||||
//---- closeMenuItem ----
|
//---- closeMenuItem ----
|
||||||
@@ -435,6 +512,11 @@ class DemoFrame
|
|||||||
}
|
}
|
||||||
viewMenu.add(menu1);
|
viewMenu.add(menu1);
|
||||||
|
|
||||||
|
//---- menuItem2 ----
|
||||||
|
menuItem2.setText("Disabled Item");
|
||||||
|
menuItem2.setEnabled(false);
|
||||||
|
viewMenu.add(menuItem2);
|
||||||
|
|
||||||
//---- menuItem1 ----
|
//---- menuItem1 ----
|
||||||
menuItem1.setText("<html>some <b color=\"red\">HTML</b> <i color=\"blue\">text</i></html>");
|
menuItem1.setText("<html>some <b color=\"red\">HTML</b> <i color=\"blue\">text</i></html>");
|
||||||
viewMenu.add(menuItem1);
|
viewMenu.add(menuItem1);
|
||||||
@@ -516,6 +598,16 @@ class DemoFrame
|
|||||||
animatedLafChangeMenuItem.setSelected(true);
|
animatedLafChangeMenuItem.setSelected(true);
|
||||||
animatedLafChangeMenuItem.addActionListener(e -> animatedLafChangeChanged());
|
animatedLafChangeMenuItem.addActionListener(e -> animatedLafChangeChanged());
|
||||||
optionsMenu.add(animatedLafChangeMenuItem);
|
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);
|
menuBar1.add(optionsMenu);
|
||||||
|
|
||||||
@@ -627,10 +719,23 @@ class DemoFrame
|
|||||||
.getSupportsWindowDecorations() || JBRCustomDecorations.isSupported();
|
.getSupportsWindowDecorations() || JBRCustomDecorations.isSupported();
|
||||||
windowDecorationsCheckBoxMenuItem.setEnabled( supportsWindowDecorations && !JBRCustomDecorations.isSupported() );
|
windowDecorationsCheckBoxMenuItem.setEnabled( supportsWindowDecorations && !JBRCustomDecorations.isSupported() );
|
||||||
menuBarEmbeddedCheckBoxMenuItem.setEnabled( supportsWindowDecorations );
|
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
|
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||||
private JMenu fontMenu;
|
private JMenu fontMenu;
|
||||||
|
private JMenu optionsMenu;
|
||||||
private JCheckBoxMenuItem windowDecorationsCheckBoxMenuItem;
|
private JCheckBoxMenuItem windowDecorationsCheckBoxMenuItem;
|
||||||
private JCheckBoxMenuItem menuBarEmbeddedCheckBoxMenuItem;
|
private JCheckBoxMenuItem menuBarEmbeddedCheckBoxMenuItem;
|
||||||
private JCheckBoxMenuItem underlineMenuSelectionMenuItem;
|
private JCheckBoxMenuItem underlineMenuSelectionMenuItem;
|
||||||
@@ -638,5 +743,6 @@ class DemoFrame
|
|||||||
private JCheckBoxMenuItem animatedLafChangeMenuItem;
|
private JCheckBoxMenuItem animatedLafChangeMenuItem;
|
||||||
private JTabbedPane tabbedPane;
|
private JTabbedPane tabbedPane;
|
||||||
private ControlBar controlBar;
|
private ControlBar controlBar;
|
||||||
|
private IJThemesPanel themesPanel;
|
||||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
// 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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -114,6 +114,9 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "com.formdev.flatlaf.demo.intellijthemes.IJThemesPanel" ) {
|
add( new FormComponent( "com.formdev.flatlaf.demo.intellijthemes.IJThemesPanel" ) {
|
||||||
name: "themesPanel"
|
name: "themesPanel"
|
||||||
|
auxiliary() {
|
||||||
|
"JavaCodeGenerator.variableLocal": false
|
||||||
|
}
|
||||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "East"
|
"value": "East"
|
||||||
} )
|
} )
|
||||||
@@ -128,14 +131,21 @@ new FormModel {
|
|||||||
"text": "New"
|
"text": "New"
|
||||||
"accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 4226, false )
|
"accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 4226, false )
|
||||||
"mnemonic": 78
|
"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" ) {
|
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||||
name: "openMenuItem"
|
name: "openMenuItem"
|
||||||
"text": "Open"
|
"text": "Open..."
|
||||||
"accelerator": static javax.swing.KeyStroke getKeyStroke( 79, 4226, false )
|
"accelerator": static javax.swing.KeyStroke getKeyStroke( 79, 4226, false )
|
||||||
"mnemonic": 79
|
"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" ) {
|
add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {
|
||||||
name: "separator2"
|
name: "separator2"
|
||||||
@@ -264,6 +274,11 @@ new FormModel {
|
|||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
|
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" ) {
|
add( new FormComponent( "javax.swing.JMenuItem" ) {
|
||||||
name: "menuItem1"
|
name: "menuItem1"
|
||||||
"text": "<html>some <b color=\"red\">HTML</b> <i color=\"blue\">text</i></html>"
|
"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 ) ) {
|
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||||
name: "optionsMenu"
|
name: "optionsMenu"
|
||||||
"text": "Options"
|
"text": "Options"
|
||||||
|
auxiliary() {
|
||||||
|
"JavaCodeGenerator.variableLocal": false
|
||||||
|
}
|
||||||
add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) {
|
add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) {
|
||||||
name: "windowDecorationsCheckBoxMenuItem"
|
name: "windowDecorationsCheckBoxMenuItem"
|
||||||
"text": "Window decorations"
|
"text": "Window decorations"
|
||||||
@@ -365,6 +383,16 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "animatedLafChangeChanged", false ) )
|
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 ) ) {
|
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
|
||||||
name: "helpMenu"
|
name: "helpMenu"
|
||||||
|
|||||||
@@ -16,10 +16,13 @@
|
|||||||
|
|
||||||
package com.formdev.flatlaf.demo;
|
package com.formdev.flatlaf.demo;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
import com.formdev.flatlaf.FlatLaf;
|
||||||
import com.formdev.flatlaf.extras.FlatInspector;
|
import com.formdev.flatlaf.extras.FlatInspector;
|
||||||
|
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
|
||||||
import com.formdev.flatlaf.util.SystemInfo;
|
import com.formdev.flatlaf.util.SystemInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30,6 +33,8 @@ public class FlatLafDemo
|
|||||||
static final String PREFS_ROOT_PATH = "/flatlaf-demo";
|
static final String PREFS_ROOT_PATH = "/flatlaf-demo";
|
||||||
static final String KEY_TAB = "tab";
|
static final String KEY_TAB = "tab";
|
||||||
|
|
||||||
|
static boolean screenshotsMode = Boolean.parseBoolean( System.getProperty( "flatlaf.demo.screenshotsMode" ) );
|
||||||
|
|
||||||
public static void main( String[] args ) {
|
public static void main( String[] args ) {
|
||||||
// on macOS enable screen menu bar
|
// on macOS enable screen menu bar
|
||||||
if( SystemInfo.isMacOS && System.getProperty( "apple.laf.useScreenMenuBar" ) == null )
|
if( SystemInfo.isMacOS && System.getProperty( "apple.laf.useScreenMenuBar" ) == null )
|
||||||
@@ -42,15 +47,22 @@ public class FlatLafDemo
|
|||||||
JFrame.setDefaultLookAndFeelDecorated( true );
|
JFrame.setDefaultLookAndFeelDecorated( true );
|
||||||
JDialog.setDefaultLookAndFeelDecorated( true );
|
JDialog.setDefaultLookAndFeelDecorated( true );
|
||||||
|
|
||||||
|
// application specific UI defaults
|
||||||
|
FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.demo" );
|
||||||
|
|
||||||
// set look and feel
|
// set look and feel
|
||||||
DemoPrefs.initLaf( args );
|
DemoPrefs.initLaf( args );
|
||||||
|
|
||||||
// install inspector
|
// install inspectors
|
||||||
FlatInspector.install( "ctrl shift alt X" );
|
FlatInspector.install( "ctrl shift alt X" );
|
||||||
|
FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||||
|
|
||||||
// create frame
|
// create frame
|
||||||
DemoFrame frame = new DemoFrame();
|
DemoFrame frame = new DemoFrame();
|
||||||
|
|
||||||
|
if( FlatLafDemo.screenshotsMode )
|
||||||
|
frame.setPreferredSize( new Dimension( 1280, 620 ) );
|
||||||
|
|
||||||
// show frame
|
// show frame
|
||||||
frame.pack();
|
frame.pack();
|
||||||
frame.setLocationRelativeTo( null );
|
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();
|
JSeparator separator2 = new JSeparator();
|
||||||
JSlider slider2 = new JSlider();
|
JSlider slider2 = new JSlider();
|
||||||
JSlider slider4 = new JSlider();
|
JSlider slider4 = new JSlider();
|
||||||
JScrollPane scrollPane14 = new JScrollPane();
|
|
||||||
progressBar3 = new JProgressBar();
|
progressBar3 = new JProgressBar();
|
||||||
progressBar4 = new JProgressBar();
|
progressBar4 = new JProgressBar();
|
||||||
JToolBar toolBar2 = new JToolBar();
|
JToolBar toolBar2 = new JToolBar();
|
||||||
@@ -67,11 +66,12 @@ class MoreComponentsPanel
|
|||||||
JButton button10 = new JButton();
|
JButton button10 = new JButton();
|
||||||
JButton button11 = new JButton();
|
JButton button11 = new JButton();
|
||||||
JToggleButton toggleButton7 = new JToggleButton();
|
JToggleButton toggleButton7 = new JToggleButton();
|
||||||
|
JPanel panel2 = new JPanel();
|
||||||
JLabel scrollBarLabel = new JLabel();
|
JLabel scrollBarLabel = new JLabel();
|
||||||
JScrollBar scrollBar1 = new JScrollBar();
|
JScrollBar scrollBar1 = new JScrollBar();
|
||||||
JLabel label4 = new JLabel();
|
|
||||||
JScrollBar scrollBar4 = new JScrollBar();
|
JScrollBar scrollBar4 = new JScrollBar();
|
||||||
JPanel panel3 = new JPanel();
|
JPanel panel3 = new JPanel();
|
||||||
|
JLabel label4 = new JLabel();
|
||||||
JLabel label3 = new JLabel();
|
JLabel label3 = new JLabel();
|
||||||
JScrollPane scrollPane15 = new JScrollPane();
|
JScrollPane scrollPane15 = new JScrollPane();
|
||||||
JEditorPane editorPane6 = new JEditorPane();
|
JEditorPane editorPane6 = new JEditorPane();
|
||||||
@@ -81,7 +81,6 @@ class MoreComponentsPanel
|
|||||||
JScrollBar scrollBar6 = new JScrollBar();
|
JScrollBar scrollBar6 = new JScrollBar();
|
||||||
JLabel separatorLabel = new JLabel();
|
JLabel separatorLabel = new JLabel();
|
||||||
JSeparator separator1 = new JSeparator();
|
JSeparator separator1 = new JSeparator();
|
||||||
JPanel panel2 = new JPanel();
|
|
||||||
JLabel sliderLabel = new JLabel();
|
JLabel sliderLabel = new JLabel();
|
||||||
JSlider slider1 = new JSlider();
|
JSlider slider1 = new JSlider();
|
||||||
JSlider slider6 = new JSlider();
|
JSlider slider6 = new JSlider();
|
||||||
@@ -105,13 +104,12 @@ class MoreComponentsPanel
|
|||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setLayout(new MigLayout(
|
setLayout(new MigLayout(
|
||||||
"hidemode 3",
|
"insets dialog,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
|
||||||
"[]",
|
"[]",
|
||||||
// rows
|
// rows
|
||||||
"[]" +
|
"[]" +
|
||||||
@@ -142,7 +140,7 @@ class MoreComponentsPanel
|
|||||||
}
|
}
|
||||||
scrollPane13.setViewportView(panel1);
|
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");
|
add(scrollBar2, "cell 2 0 1 6,growy");
|
||||||
|
|
||||||
//---- scrollBar3 ----
|
//---- scrollBar3 ----
|
||||||
@@ -165,7 +163,7 @@ class MoreComponentsPanel
|
|||||||
//---- slider2 ----
|
//---- slider2 ----
|
||||||
slider2.setOrientation(SwingConstants.VERTICAL);
|
slider2.setOrientation(SwingConstants.VERTICAL);
|
||||||
slider2.setValue(30);
|
slider2.setValue(30);
|
||||||
add(slider2, "cell 2 0 1 6,growy");
|
add(slider2, "cell 2 0 1 6,growy,height 100");
|
||||||
|
|
||||||
//---- slider4 ----
|
//---- slider4 ----
|
||||||
slider4.setMinorTickSpacing(10);
|
slider4.setMinorTickSpacing(10);
|
||||||
@@ -174,19 +172,18 @@ class MoreComponentsPanel
|
|||||||
slider4.setPaintLabels(true);
|
slider4.setPaintLabels(true);
|
||||||
slider4.setOrientation(SwingConstants.VERTICAL);
|
slider4.setOrientation(SwingConstants.VERTICAL);
|
||||||
slider4.setValue(30);
|
slider4.setValue(30);
|
||||||
add(slider4, "cell 2 0 1 6,growy");
|
add(slider4, "cell 2 0 1 6,growy,height 100");
|
||||||
add(scrollPane14, "cell 3 0,grow");
|
|
||||||
|
|
||||||
//---- progressBar3 ----
|
//---- progressBar3 ----
|
||||||
progressBar3.setOrientation(SwingConstants.VERTICAL);
|
progressBar3.setOrientation(SwingConstants.VERTICAL);
|
||||||
progressBar3.setValue(60);
|
progressBar3.setValue(60);
|
||||||
add(progressBar3, "cell 4 0 1 6,growy");
|
add(progressBar3, "cell 2 0 1 6,growy");
|
||||||
|
|
||||||
//---- progressBar4 ----
|
//---- progressBar4 ----
|
||||||
progressBar4.setOrientation(SwingConstants.VERTICAL);
|
progressBar4.setOrientation(SwingConstants.VERTICAL);
|
||||||
progressBar4.setValue(60);
|
progressBar4.setValue(60);
|
||||||
progressBar4.setStringPainted(true);
|
progressBar4.setStringPainted(true);
|
||||||
add(progressBar4, "cell 4 0 1 6,growy");
|
add(progressBar4, "cell 2 0 1 6,growy");
|
||||||
|
|
||||||
//======== toolBar2 ========
|
//======== toolBar2 ========
|
||||||
{
|
{
|
||||||
@@ -209,7 +206,14 @@ class MoreComponentsPanel
|
|||||||
toggleButton7.setIcon(UIManager.getIcon("Tree.closedIcon"));
|
toggleButton7.setIcon(UIManager.getIcon("Tree.closedIcon"));
|
||||||
toolBar2.add(toggleButton7);
|
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 ----
|
||||||
scrollBarLabel.setText("JScrollBar:");
|
scrollBarLabel.setText("JScrollBar:");
|
||||||
@@ -219,10 +223,6 @@ class MoreComponentsPanel
|
|||||||
scrollBar1.setOrientation(Adjustable.HORIZONTAL);
|
scrollBar1.setOrientation(Adjustable.HORIZONTAL);
|
||||||
add(scrollBar1, "cell 1 1,growx");
|
add(scrollBar1, "cell 1 1,growx");
|
||||||
|
|
||||||
//---- label4 ----
|
|
||||||
label4.setText("HTML:");
|
|
||||||
add(label4, "cell 5 1");
|
|
||||||
|
|
||||||
//---- scrollBar4 ----
|
//---- scrollBar4 ----
|
||||||
scrollBar4.setOrientation(Adjustable.HORIZONTAL);
|
scrollBar4.setOrientation(Adjustable.HORIZONTAL);
|
||||||
scrollBar4.setEnabled(false);
|
scrollBar4.setEnabled(false);
|
||||||
@@ -238,11 +238,16 @@ class MoreComponentsPanel
|
|||||||
// rows
|
// rows
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
|
"[]" +
|
||||||
"[]"));
|
"[]"));
|
||||||
|
|
||||||
|
//---- label4 ----
|
||||||
|
label4.setText("HTML:");
|
||||||
|
panel3.add(label4, "cell 0 0");
|
||||||
|
|
||||||
//---- label3 ----
|
//---- label3 ----
|
||||||
label3.setText("<html>JLabel HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a></html>");
|
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 ========
|
//======== 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>");
|
editorPane6.setText("JEditorPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>");
|
||||||
scrollPane15.setViewportView(editorPane6);
|
scrollPane15.setViewportView(editorPane6);
|
||||||
}
|
}
|
||||||
panel3.add(scrollPane15, "cell 0 1,grow");
|
panel3.add(scrollPane15, "cell 0 2,grow");
|
||||||
|
|
||||||
//======== scrollPane16 ========
|
//======== 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>");
|
textPane6.setText("JTextPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>");
|
||||||
scrollPane16.setViewportView(textPane6);
|
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 ----
|
||||||
scrollBar5.setOrientation(Adjustable.HORIZONTAL);
|
scrollBar5.setOrientation(Adjustable.HORIZONTAL);
|
||||||
@@ -282,13 +287,6 @@ class MoreComponentsPanel
|
|||||||
add(separatorLabel, "cell 0 5");
|
add(separatorLabel, "cell 0 5");
|
||||||
add(separator1, "cell 1 5,growx");
|
add(separator1, "cell 1 5,growx");
|
||||||
|
|
||||||
//======== panel2 ========
|
|
||||||
{
|
|
||||||
panel2.setBorder(new TitledBorder("TitledBorder"));
|
|
||||||
panel2.setLayout(new FlowLayout());
|
|
||||||
}
|
|
||||||
add(panel2, "cell 3 5,grow");
|
|
||||||
|
|
||||||
//---- sliderLabel ----
|
//---- sliderLabel ----
|
||||||
sliderLabel.setText("JSlider:");
|
sliderLabel.setText("JSlider:");
|
||||||
add(sliderLabel, "cell 0 6");
|
add(sliderLabel, "cell 0 6");
|
||||||
@@ -389,6 +387,17 @@ class MoreComponentsPanel
|
|||||||
}
|
}
|
||||||
add(toolBar1, "cell 1 10 3 1,growx");
|
add(toolBar1, "cell 1 10 3 1,growx");
|
||||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
// 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
|
// 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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -7,8 +7,8 @@ new FormModel {
|
|||||||
"JavaCodeGenerator.defaultVariableLocal": true
|
"JavaCodeGenerator.defaultVariableLocal": true
|
||||||
}
|
}
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "hidemode 3"
|
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||||
"$columnConstraints": "[][][][][][]"
|
"$columnConstraints": "[][][][][]"
|
||||||
"$rowConstraints": "[][][][][][][][][][][]"
|
"$rowConstraints": "[][][][][][][][][][][]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "this"
|
name: "this"
|
||||||
@@ -27,7 +27,7 @@ new FormModel {
|
|||||||
"preferredSize": new java.awt.Dimension( 200, 200 )
|
"preferredSize": new java.awt.Dimension( 200, 200 )
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "javax.swing.JScrollBar" ) {
|
||||||
name: "scrollBar2"
|
name: "scrollBar2"
|
||||||
@@ -64,7 +64,7 @@ new FormModel {
|
|||||||
"orientation": 1
|
"orientation": 1
|
||||||
"value": 30
|
"value": 30
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "javax.swing.JSlider" ) {
|
||||||
name: "slider4"
|
name: "slider4"
|
||||||
@@ -75,12 +75,7 @@ new FormModel {
|
|||||||
"orientation": 1
|
"orientation": 1
|
||||||
"value": 30
|
"value": 30
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
|
||||||
name: "scrollPane14"
|
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
|
||||||
"value": "cell 3 0,grow"
|
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JProgressBar" ) {
|
add( new FormComponent( "javax.swing.JProgressBar" ) {
|
||||||
name: "progressBar3"
|
name: "progressBar3"
|
||||||
@@ -90,7 +85,7 @@ new FormModel {
|
|||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "javax.swing.JProgressBar" ) {
|
||||||
name: "progressBar4"
|
name: "progressBar4"
|
||||||
@@ -101,7 +96,7 @@ new FormModel {
|
|||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) {
|
||||||
name: "toolBar2"
|
name: "toolBar2"
|
||||||
@@ -126,7 +121,13 @@ new FormModel {
|
|||||||
"icon": new com.jformdesigner.model.SwingIcon( 2, "Tree.closedIcon" )
|
"icon": new com.jformdesigner.model.SwingIcon( 2, "Tree.closedIcon" )
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "scrollBarLabel"
|
name: "scrollBarLabel"
|
||||||
@@ -140,12 +141,6 @@ new FormModel {
|
|||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 1,growx"
|
"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" ) {
|
add( new FormComponent( "javax.swing.JScrollBar" ) {
|
||||||
name: "scrollBar4"
|
name: "scrollBar4"
|
||||||
"orientation": 0
|
"orientation": 0
|
||||||
@@ -155,16 +150,22 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$columnConstraints": "[]"
|
"$columnConstraints": "[]"
|
||||||
"$rowConstraints": "[][][]"
|
"$rowConstraints": "[][][][]"
|
||||||
"$layoutConstraints": "ltr,insets 0,hidemode 3"
|
"$layoutConstraints": "ltr,insets 0,hidemode 3"
|
||||||
} ) {
|
} ) {
|
||||||
name: "panel3"
|
name: "panel3"
|
||||||
"opaque": false
|
"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" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label3"
|
name: "label3"
|
||||||
"text": "<html>JLabel HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a></html>"
|
"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 ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane15"
|
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>"
|
"text": "JEditorPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>"
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane16"
|
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>"
|
"text": "JTextPane HTML<br>Sample <b>content</b><br> <u>text</u> with <a href=\"#\">link</a>"
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 2,grow"
|
"value": "cell 0 3,grow"
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "javax.swing.JScrollBar" ) {
|
||||||
name: "scrollBar5"
|
name: "scrollBar5"
|
||||||
@@ -215,12 +216,6 @@ new FormModel {
|
|||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 5,growx"
|
"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" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "sliderLabel"
|
name: "sliderLabel"
|
||||||
"text": "JSlider:"
|
"text": "JSlider:"
|
||||||
@@ -365,7 +360,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( null ) {
|
}, new FormLayoutConstraints( null ) {
|
||||||
"location": new java.awt.Point( 0, 0 )
|
"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 ========
|
||||||
{
|
{
|
||||||
panel9.setLayout(new MigLayout(
|
panel9.setLayout(new MigLayout(
|
||||||
"flowy,hidemode 3",
|
"flowy,insets dialog,hidemode 3",
|
||||||
// columns
|
// 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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -12,7 +12,7 @@ new FormModel {
|
|||||||
name: "scrollPane1"
|
name: "scrollPane1"
|
||||||
"border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 )
|
"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 ) {
|
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]"
|
"$columnConstraints": "[][][fill]"
|
||||||
"$rowConstraints": "[top][top][top][top][top][top][top][top]"
|
"$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;
|
package com.formdev.flatlaf.demo;
|
||||||
@@ -20,6 +32,8 @@ class TabsPanel
|
|||||||
{
|
{
|
||||||
TabsPanel() {
|
TabsPanel() {
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
||||||
|
addInitialTabs( tabbedPane1, tabbedPane2, tabbedPane3, tabbedPane4 );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tabScrollChanged() {
|
private void tabScrollChanged() {
|
||||||
@@ -28,8 +42,20 @@ class TabsPanel
|
|||||||
tabbedPane2.setTabLayoutPolicy( tabLayoutPolicy );
|
tabbedPane2.setTabLayoutPolicy( tabLayoutPolicy );
|
||||||
tabbedPane3.setTabLayoutPolicy( tabLayoutPolicy );
|
tabbedPane3.setTabLayoutPolicy( tabLayoutPolicy );
|
||||||
tabbedPane4.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() {
|
private void showTabSeparatorsChanged() {
|
||||||
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
||||||
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
||||||
@@ -52,15 +78,17 @@ class TabsPanel
|
|||||||
addRemoveMoreTabs( tabbedPane2, moreTabs );
|
addRemoveMoreTabs( tabbedPane2, moreTabs );
|
||||||
addRemoveMoreTabs( tabbedPane3, moreTabs );
|
addRemoveMoreTabs( tabbedPane3, moreTabs );
|
||||||
addRemoveMoreTabs( tabbedPane4, moreTabs );
|
addRemoveMoreTabs( tabbedPane4, moreTabs );
|
||||||
|
|
||||||
|
autoMoreTabs = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addRemoveMoreTabs( JTabbedPane tabbedPane, boolean add ) {
|
private void addRemoveMoreTabs( JTabbedPane tabbedPane, boolean add ) {
|
||||||
if( add ) {
|
if( add ) {
|
||||||
tabbedPane.addTab( "Tab 4", new JLabel( "tab 4" ) );
|
addTab( tabbedPane, "Tab 4", "tab content 4" );
|
||||||
tabbedPane.addTab( "Tab 5", new JLabel( "tab 5" ) );
|
addTab( tabbedPane, "Tab 5", "tab content 5" );
|
||||||
tabbedPane.addTab( "Tab 6", new JLabel( "tab 6" ) );
|
addTab( tabbedPane, "Tab 6", "tab content 6" );
|
||||||
tabbedPane.addTab( "Tab 7", new JLabel( "tab 7" ) );
|
addTab( tabbedPane, "Tab 7", "tab content 7" );
|
||||||
tabbedPane.addTab( "Tab 8", new JLabel( "tab 8" ) );
|
addTab( tabbedPane, "Tab 8", "tab content 8" );
|
||||||
} else {
|
} else {
|
||||||
int tabCount = tabbedPane.getTabCount();
|
int tabCount = tabbedPane.getTabCount();
|
||||||
if( tabCount > 3 ) {
|
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() {
|
private void initComponents() {
|
||||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||||
JPanel panel9 = new JPanel();
|
JPanel panel9 = new JPanel();
|
||||||
@@ -77,31 +138,19 @@ class TabsPanel
|
|||||||
JSplitPane splitPane3 = new JSplitPane();
|
JSplitPane splitPane3 = new JSplitPane();
|
||||||
JSplitPane splitPane1 = new JSplitPane();
|
JSplitPane splitPane1 = new JSplitPane();
|
||||||
JPanel panel10 = new JPanel();
|
JPanel panel10 = new JPanel();
|
||||||
|
JLabel label1 = new JLabel();
|
||||||
JPanel panel11 = new JPanel();
|
JPanel panel11 = new JPanel();
|
||||||
|
JLabel label2 = new JLabel();
|
||||||
JSplitPane splitPane2 = new JSplitPane();
|
JSplitPane splitPane2 = new JSplitPane();
|
||||||
JPanel panel12 = new JPanel();
|
JPanel panel12 = new JPanel();
|
||||||
|
JLabel label3 = new JLabel();
|
||||||
JPanel panel13 = new JPanel();
|
JPanel panel13 = new JPanel();
|
||||||
|
JLabel label4 = new JLabel();
|
||||||
JLabel tabbedPaneLabel = new JLabel();
|
JLabel tabbedPaneLabel = new JLabel();
|
||||||
tabbedPane1 = new JTabbedPane();
|
tabbedPane1 = new JTabbedPane();
|
||||||
JPanel panel1 = new JPanel();
|
|
||||||
JLabel label1 = new JLabel();
|
|
||||||
JPanel panel2 = new JPanel();
|
|
||||||
JLabel label2 = new JLabel();
|
|
||||||
tabbedPane3 = new JTabbedPane();
|
tabbedPane3 = new JTabbedPane();
|
||||||
JPanel panel5 = new JPanel();
|
|
||||||
JLabel label5 = new JLabel();
|
|
||||||
JPanel panel6 = new JPanel();
|
|
||||||
JLabel label6 = new JLabel();
|
|
||||||
tabbedPane2 = new JTabbedPane();
|
tabbedPane2 = new JTabbedPane();
|
||||||
JPanel panel3 = new JPanel();
|
|
||||||
JLabel label3 = new JLabel();
|
|
||||||
JPanel panel4 = new JPanel();
|
|
||||||
JLabel label4 = new JLabel();
|
|
||||||
tabbedPane4 = new JTabbedPane();
|
tabbedPane4 = new JTabbedPane();
|
||||||
JPanel panel7 = new JPanel();
|
|
||||||
JLabel label7 = new JLabel();
|
|
||||||
JPanel panel8 = new JPanel();
|
|
||||||
JLabel label8 = new JLabel();
|
|
||||||
JPanel panel14 = new JPanel();
|
JPanel panel14 = new JPanel();
|
||||||
moreTabsCheckBox = new JCheckBox();
|
moreTabsCheckBox = new JCheckBox();
|
||||||
tabScrollCheckBox = new JCheckBox();
|
tabScrollCheckBox = new JCheckBox();
|
||||||
@@ -111,7 +160,7 @@ class TabsPanel
|
|||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setLayout(new MigLayout(
|
setLayout(new MigLayout(
|
||||||
"hidemode 3",
|
"insets dialog,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[grow,fill]",
|
"[grow,fill]",
|
||||||
// rows
|
// rows
|
||||||
@@ -120,8 +169,8 @@ class TabsPanel
|
|||||||
//======== panel9 ========
|
//======== panel9 ========
|
||||||
{
|
{
|
||||||
panel9.setLayout(new FormLayout(
|
panel9.setLayout(new FormLayout(
|
||||||
"70dlu:grow, $lcgap, 70dlu:grow",
|
"70dlu:grow, $ugap, 70dlu:grow",
|
||||||
"default, $lgap, fill:70dlu, $lgap, pref, 2*($lgap, fill:70dlu:grow), $lgap, pref"));
|
"default, $lgap, fill:70dlu, $pgap, pref, $lgap, 2*(fill:80dlu:grow, $ugap), pref"));
|
||||||
|
|
||||||
//---- splitPaneLabel ----
|
//---- splitPaneLabel ----
|
||||||
splitPaneLabel.setText("JSplitPane:");
|
splitPaneLabel.setText("JSplitPane:");
|
||||||
@@ -134,19 +183,30 @@ class TabsPanel
|
|||||||
//======== splitPane1 ========
|
//======== splitPane1 ========
|
||||||
{
|
{
|
||||||
splitPane1.setResizeWeight(0.5);
|
splitPane1.setResizeWeight(0.5);
|
||||||
splitPane1.setOneTouchExpandable(true);
|
|
||||||
|
|
||||||
//======== panel10 ========
|
//======== panel10 ========
|
||||||
{
|
{
|
||||||
panel10.setBackground(Color.orange);
|
panel10.setBackground(new Color(217, 163, 67));
|
||||||
panel10.setLayout(new FlowLayout());
|
panel10.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
//---- label1 ----
|
||||||
|
label1.setText("LEFT");
|
||||||
|
label1.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
label1.setForeground(Color.white);
|
||||||
|
panel10.add(label1, BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
splitPane1.setLeftComponent(panel10);
|
splitPane1.setLeftComponent(panel10);
|
||||||
|
|
||||||
//======== panel11 ========
|
//======== panel11 ========
|
||||||
{
|
{
|
||||||
panel11.setBackground(Color.magenta);
|
panel11.setBackground(new Color(98, 181, 67));
|
||||||
panel11.setLayout(new FlowLayout());
|
panel11.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
//---- label2 ----
|
||||||
|
label2.setText("RIGHT");
|
||||||
|
label2.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
label2.setForeground(Color.white);
|
||||||
|
panel11.add(label2, BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
splitPane1.setRightComponent(panel11);
|
splitPane1.setRightComponent(panel11);
|
||||||
}
|
}
|
||||||
@@ -156,19 +216,30 @@ class TabsPanel
|
|||||||
{
|
{
|
||||||
splitPane2.setOrientation(JSplitPane.VERTICAL_SPLIT);
|
splitPane2.setOrientation(JSplitPane.VERTICAL_SPLIT);
|
||||||
splitPane2.setResizeWeight(0.5);
|
splitPane2.setResizeWeight(0.5);
|
||||||
splitPane2.setOneTouchExpandable(true);
|
|
||||||
|
|
||||||
//======== panel12 ========
|
//======== panel12 ========
|
||||||
{
|
{
|
||||||
panel12.setBackground(Color.orange);
|
panel12.setBackground(new Color(242, 101, 34));
|
||||||
panel12.setLayout(new FlowLayout());
|
panel12.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
//---- label3 ----
|
||||||
|
label3.setText("TOP");
|
||||||
|
label3.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
label3.setForeground(Color.white);
|
||||||
|
panel12.add(label3, BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
splitPane2.setTopComponent(panel12);
|
splitPane2.setTopComponent(panel12);
|
||||||
|
|
||||||
//======== panel13 ========
|
//======== panel13 ========
|
||||||
{
|
{
|
||||||
panel13.setBackground(Color.magenta);
|
panel13.setBackground(new Color(64, 182, 224));
|
||||||
panel13.setLayout(new FlowLayout());
|
panel13.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
//---- label4 ----
|
||||||
|
label4.setText("BOTTOM");
|
||||||
|
label4.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
label4.setForeground(Color.white);
|
||||||
|
panel13.add(label4, BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
splitPane2.setBottomComponent(panel13);
|
splitPane2.setBottomComponent(panel13);
|
||||||
}
|
}
|
||||||
@@ -179,112 +250,23 @@ class TabsPanel
|
|||||||
//---- tabbedPaneLabel ----
|
//---- tabbedPaneLabel ----
|
||||||
tabbedPaneLabel.setText("JTabbedPane:");
|
tabbedPaneLabel.setText("JTabbedPane:");
|
||||||
panel9.add(tabbedPaneLabel, cc.xy(1, 5));
|
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));
|
panel9.add(tabbedPane1, cc.xy(1, 7));
|
||||||
|
|
||||||
//======== tabbedPane3 ========
|
//======== tabbedPane3 ========
|
||||||
{
|
{
|
||||||
tabbedPane3.setTabPlacement(SwingConstants.LEFT);
|
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));
|
panel9.add(tabbedPane3, cc.xy(3, 7));
|
||||||
|
|
||||||
//======== tabbedPane2 ========
|
//======== tabbedPane2 ========
|
||||||
{
|
{
|
||||||
tabbedPane2.setTabPlacement(SwingConstants.BOTTOM);
|
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));
|
panel9.add(tabbedPane2, cc.xy(1, 9));
|
||||||
|
|
||||||
//======== tabbedPane4 ========
|
//======== tabbedPane4 ========
|
||||||
{
|
{
|
||||||
tabbedPane4.setTabPlacement(SwingConstants.RIGHT);
|
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));
|
panel9.add(tabbedPane4, cc.xy(3, 9));
|
||||||
|
|
||||||
@@ -301,25 +283,24 @@ class TabsPanel
|
|||||||
"[center]"));
|
"[center]"));
|
||||||
|
|
||||||
//---- moreTabsCheckBox ----
|
//---- moreTabsCheckBox ----
|
||||||
moreTabsCheckBox.setText("more tabs");
|
moreTabsCheckBox.setText("More tabs");
|
||||||
moreTabsCheckBox.setMnemonic('M');
|
moreTabsCheckBox.setMnemonic('M');
|
||||||
moreTabsCheckBox.addActionListener(e -> moreTabsChanged());
|
moreTabsCheckBox.addActionListener(e -> moreTabsChanged());
|
||||||
panel14.add(moreTabsCheckBox, "cell 0 0");
|
panel14.add(moreTabsCheckBox, "cell 0 0");
|
||||||
|
|
||||||
//---- tabScrollCheckBox ----
|
//---- tabScrollCheckBox ----
|
||||||
tabScrollCheckBox.setText("tabLayoutPolicy = SCROLL");
|
tabScrollCheckBox.setText("Use scroll layout");
|
||||||
tabScrollCheckBox.setMnemonic('S');
|
tabScrollCheckBox.setMnemonic('S');
|
||||||
tabScrollCheckBox.addActionListener(e -> tabScrollChanged());
|
tabScrollCheckBox.addActionListener(e -> tabScrollChanged());
|
||||||
panel14.add(tabScrollCheckBox, "cell 1 0,alignx left,growx 0");
|
panel14.add(tabScrollCheckBox, "cell 1 0,alignx left,growx 0");
|
||||||
|
|
||||||
//---- showTabSeparatorsCheckBox ----
|
//---- showTabSeparatorsCheckBox ----
|
||||||
showTabSeparatorsCheckBox.setText("JTabbedPane.showTabSeparators");
|
showTabSeparatorsCheckBox.setText("Show tab separators");
|
||||||
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
||||||
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
||||||
|
|
||||||
//---- hasFullBorderCheckBox ----
|
//---- hasFullBorderCheckBox ----
|
||||||
hasFullBorderCheckBox.setText("JTabbedPane.hasFullBorder");
|
hasFullBorderCheckBox.setText("Show content border");
|
||||||
hasFullBorderCheckBox.setMnemonic('F');
|
|
||||||
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
||||||
panel14.add(hasFullBorderCheckBox, "cell 3 0,alignx left,growx 0");
|
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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -7,14 +7,14 @@ new FormModel {
|
|||||||
"JavaCodeGenerator.defaultVariableLocal": true
|
"JavaCodeGenerator.defaultVariableLocal": true
|
||||||
}
|
}
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "hidemode 3"
|
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||||
"$columnConstraints": "[grow,fill]"
|
"$columnConstraints": "[grow,fill]"
|
||||||
"$rowConstraints": "[grow,fill]"
|
"$rowConstraints": "[grow,fill]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "this"
|
name: "this"
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
|
||||||
"$columnSpecs": "70dlu:grow, labelcompgap, 70dlu:grow"
|
"$columnSpecs": "70dlu:grow, unrelgap, 70dlu:grow"
|
||||||
"$rowSpecs": "default, linegap, fill:70dlu, linegap, pref, linegap, fill:70dlu:grow, linegap, fill:70dlu:grow, linegap, pref"
|
"$rowSpecs": "default, linegap, fill:70dlu, pargap, pref, linegap, fill:80dlu:grow, unrelgap, fill:80dlu:grow, unrelgap, pref"
|
||||||
} ) {
|
} ) {
|
||||||
name: "panel9"
|
name: "panel9"
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
@@ -27,16 +27,31 @@ new FormModel {
|
|||||||
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
|
||||||
name: "splitPane1"
|
name: "splitPane1"
|
||||||
"resizeWeight": 0.5
|
"resizeWeight": 0.5
|
||||||
"oneTouchExpandable": true
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
|
||||||
name: "panel10"
|
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 ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "left"
|
"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"
|
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 ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "right"
|
"value": "right"
|
||||||
} )
|
} )
|
||||||
@@ -47,16 +62,31 @@ new FormModel {
|
|||||||
name: "splitPane2"
|
name: "splitPane2"
|
||||||
"orientation": 0
|
"orientation": 0
|
||||||
"resizeWeight": 0.5
|
"resizeWeight": 0.5
|
||||||
"oneTouchExpandable": true
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
|
||||||
name: "panel12"
|
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 ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "left"
|
"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"
|
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 ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "right"
|
"value": "right"
|
||||||
} )
|
} )
|
||||||
@@ -79,27 +109,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridX": 1
|
"gridX": 1
|
||||||
"gridY": 7
|
"gridY": 7
|
||||||
@@ -110,27 +119,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridX": 3
|
"gridX": 3
|
||||||
"gridY": 7
|
"gridY": 7
|
||||||
@@ -141,28 +129,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridY": 9
|
"gridY": 9
|
||||||
} )
|
} )
|
||||||
@@ -172,27 +138,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridX": 3
|
"gridX": 3
|
||||||
"gridY": 9
|
"gridY": 9
|
||||||
@@ -205,7 +150,7 @@ new FormModel {
|
|||||||
name: "panel14"
|
name: "panel14"
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "moreTabsCheckBox"
|
name: "moreTabsCheckBox"
|
||||||
"text": "more tabs"
|
"text": "More tabs"
|
||||||
"mnemonic": 77
|
"mnemonic": 77
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
@@ -216,7 +161,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "tabScrollCheckBox"
|
name: "tabScrollCheckBox"
|
||||||
"text": "tabLayoutPolicy = SCROLL"
|
"text": "Use scroll layout"
|
||||||
"mnemonic": 83
|
"mnemonic": 83
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
@@ -227,7 +172,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "showTabSeparatorsCheckBox"
|
name: "showTabSeparatorsCheckBox"
|
||||||
"text": "JTabbedPane.showTabSeparators"
|
"text": "Show tab separators"
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
@@ -237,8 +182,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "hasFullBorderCheckBox"
|
name: "hasFullBorderCheckBox"
|
||||||
"text": "JTabbedPane.hasFullBorder"
|
"text": "Show content border"
|
||||||
"mnemonic": 70
|
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
@@ -255,7 +199,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( null ) {
|
}, new FormLayoutConstraints( null ) {
|
||||||
"location": new java.awt.Point( 0, 0 )
|
"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 ========
|
//======== this ========
|
||||||
setLayout(new MigLayout(
|
setLayout(new MigLayout(
|
||||||
"hidemode 3",
|
"insets dialog,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
@@ -98,7 +98,7 @@ public class ExtrasPanel
|
|||||||
//---- triStateLabel1 ----
|
//---- triStateLabel1 ----
|
||||||
triStateLabel1.setText("text");
|
triStateLabel1.setText("text");
|
||||||
triStateLabel1.setEnabled(false);
|
triStateLabel1.setEnabled(false);
|
||||||
add(triStateLabel1, "cell 2 1");
|
add(triStateLabel1, "cell 2 1,gapx 30");
|
||||||
|
|
||||||
//---- label2 ----
|
//---- label2 ----
|
||||||
label2.setText("SVG Icons:");
|
label2.setText("SVG Icons:");
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ new FormModel {
|
|||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
root: new FormRoot {
|
root: new FormRoot {
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "hidemode 3"
|
"$layoutConstraints": "insets dialog,hidemode 3"
|
||||||
"$columnConstraints": "[][][left]"
|
"$columnConstraints": "[][][left]"
|
||||||
"$rowConstraints": "[]para[][][]"
|
"$rowConstraints": "[]para[][][]"
|
||||||
} ) {
|
} ) {
|
||||||
@@ -33,7 +33,7 @@ new FormModel {
|
|||||||
"text": "text"
|
"text": "text"
|
||||||
"enabled": false
|
"enabled": false
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 1"
|
"value": "cell 2 1,gapx 30"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label2"
|
name: "label2"
|
||||||
|
|||||||
@@ -205,11 +205,11 @@ public class IJThemesPanel
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// select first theme if none selected
|
// select first theme if none selected
|
||||||
if( themesList.getSelectedIndex() < 0 )
|
if( themesList.getSelectedIndex() < 0 )
|
||||||
themesList.setSelectedIndex( 0 );
|
themesList.setSelectedIndex( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
// scroll selection into visible area
|
// scroll selection into visible area
|
||||||
int sel = themesList.getSelectedIndex();
|
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:
|
This sub-project provides some additional components and classes:
|
||||||
|
|
||||||
- [FlatAnimatedLafChange](src/main/java/com/formdev/flatlaf/extras/FlatAnimatedLafChange.java):
|
- [FlatSVGIcon](https://www.javadoc.io/doc/com.formdev/flatlaf-extras/latest/com/formdev/flatlaf/extras/FlatSVGIcon.html):
|
||||||
Animated Laf changing.
|
An icon that displays SVG using
|
||||||
- [FlatInspector](src/main/java/com/formdev/flatlaf/extras/FlatInspector.java):
|
[svgSalamander](https://github.com/JFormDesigner/svgSalamander).\
|
||||||
A simple UI inspector that shows information about UI component at mouse
|

|
||||||
location in a tooltip.
|
- [TriStateCheckBox](https://www.javadoc.io/doc/com.formdev/flatlaf-extras/latest/com/formdev/flatlaf/extras/TriStateCheckBox.html):
|
||||||
- [FlatSVGIcon](src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java): An
|
A tri-state check box.\
|
||||||
icon that displays SVG using
|

|
||||||
[svgSalamander](https://github.com/JFormDesigner/svgSalamander).
|
- [FlatAnimatedLafChange](https://www.javadoc.io/doc/com.formdev/flatlaf-extras/latest/com/formdev/flatlaf/extras/FlatAnimatedLafChange.html):
|
||||||
- [TriStateCheckBox](src/main/java/com/formdev/flatlaf/extras/TriStateCheckBox.java):
|
Animated Laf (theme) changing.
|
||||||
A tri-state check box.
|
- [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
|
Download
|
||||||
@@ -36,3 +40,45 @@ you can download here:
|
|||||||
|
|
||||||
[](https://bintray.com/jformdesigner/flatlaf/flatlaf/_latestVersion)
|
[](https://bintray.com/jformdesigner/flatlaf/flatlaf/_latestVersion)
|
||||||
[](https://bintray.com/jformdesigner/svgSalamander/svgSalamander/_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 {
|
dependencies {
|
||||||
implementation( project( ":flatlaf-core" ) )
|
implementation( project( ":flatlaf-core" ) )
|
||||||
implementation( "com.formdev:svgSalamander:1.1.2.1" )
|
implementation( "com.formdev:svgSalamander:1.1.2.3" )
|
||||||
}
|
}
|
||||||
|
|
||||||
flatlafModuleInfo {
|
flatlafModuleInfo {
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ package com.formdev.flatlaf.extras;
|
|||||||
import java.awt.AlphaComposite;
|
import java.awt.AlphaComposite;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Image;
|
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
import java.util.HashMap;
|
import java.awt.image.VolatileImage;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.WeakHashMap;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JLayeredPane;
|
import javax.swing.JLayeredPane;
|
||||||
import javax.swing.RootPaneContainer;
|
import javax.swing.RootPaneContainer;
|
||||||
@@ -56,8 +56,10 @@ public class FlatAnimatedLafChange
|
|||||||
public static int resolution = 40;
|
public static int resolution = 40;
|
||||||
|
|
||||||
private static Animator animator;
|
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 float alpha;
|
||||||
|
private static boolean inShowSnapshot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a snapshot of the old UI and shows it on top of the UI.
|
* Create a snapshot of the old UI and shows it on top of the UI.
|
||||||
@@ -73,16 +75,27 @@ public class FlatAnimatedLafChange
|
|||||||
|
|
||||||
alpha = 1;
|
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
|
// create snapshots for all shown windows
|
||||||
Window[] windows = Window.getWindows();
|
Window[] windows = Window.getWindows();
|
||||||
for( Window window : windows ) {
|
for( Window window : windows ) {
|
||||||
if( !(window instanceof RootPaneContainer) || !window.isShowing() )
|
if( !(window instanceof RootPaneContainer) || !window.isShowing() )
|
||||||
continue;
|
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
|
// paint window to snapshot image
|
||||||
Image snapshot = window.createImage( window.getWidth(), window.getHeight() );
|
JLayeredPane layeredPane = ((RootPaneContainer)window).getLayeredPane();
|
||||||
layeredPane.paint( snapshot.getGraphics() );
|
layeredPane.paint( snapshot.getGraphics() );
|
||||||
|
|
||||||
// create snapshot layer, which is added to layered pane and paints
|
// create snapshot layer, which is added to layered pane and paints
|
||||||
@@ -90,16 +103,32 @@ public class FlatAnimatedLafChange
|
|||||||
JComponent snapshotLayer = new JComponent() {
|
JComponent snapshotLayer = new JComponent() {
|
||||||
@Override
|
@Override
|
||||||
public void paint( Graphics g ) {
|
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 );
|
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() );
|
snapshotLayer.setSize( layeredPane.getSize() );
|
||||||
|
|
||||||
// add image layer to layered pane
|
// 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 );
|
map.put( layeredPane, snapshotLayer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inShowSnapshot = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -111,9 +140,12 @@ public class FlatAnimatedLafChange
|
|||||||
if( !FlatSystemProperties.getBoolean( "flatlaf.animatedLafChange", true ) )
|
if( !FlatSystemProperties.getBoolean( "flatlaf.animatedLafChange", true ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( map.isEmpty() )
|
if( oldUIsnapshots.isEmpty() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// show snapshot of new UI
|
||||||
|
showSnapshot( false, newUIsnapshots );
|
||||||
|
|
||||||
// create animator
|
// create animator
|
||||||
animator = new Animator( duration, fraction -> {
|
animator = new Animator( duration, fraction -> {
|
||||||
if( fraction < 0.1 || fraction > 0.9 )
|
if( fraction < 0.1 || fraction > 0.9 )
|
||||||
@@ -122,7 +154,7 @@ public class FlatAnimatedLafChange
|
|||||||
alpha = 1f - fraction;
|
alpha = 1f - fraction;
|
||||||
|
|
||||||
// repaint snapshots
|
// repaint snapshots
|
||||||
for( Map.Entry<JLayeredPane, JComponent> e : map.entrySet() ) {
|
for( Map.Entry<JLayeredPane, JComponent> e : oldUIsnapshots.entrySet() ) {
|
||||||
if( e.getKey().isShowing() )
|
if( e.getKey().isShowing() )
|
||||||
e.getValue().repaint();
|
e.getValue().repaint();
|
||||||
}
|
}
|
||||||
@@ -136,6 +168,11 @@ public class FlatAnimatedLafChange
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void hideSnapshot() {
|
private static void hideSnapshot() {
|
||||||
|
hideSnapshot( oldUIsnapshots );
|
||||||
|
hideSnapshot( newUIsnapshots );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void hideSnapshot( Map<JLayeredPane, JComponent> map ) {
|
||||||
// remove snapshots
|
// remove snapshots
|
||||||
for( Map.Entry<JLayeredPane, JComponent> e : map.entrySet() ) {
|
for( Map.Entry<JLayeredPane, JComponent> e : map.entrySet() ) {
|
||||||
e.getKey().remove( e.getValue() );
|
e.getKey().remove( e.getValue() );
|
||||||
|
|||||||
@@ -158,10 +158,20 @@ public class FlatInspector
|
|||||||
} else if( id == KeyEvent.KEY_RELEASED && wasCtrlOrShiftKeyPressed ) {
|
} else if( id == KeyEvent.KEY_RELEASED && wasCtrlOrShiftKeyPressed ) {
|
||||||
if( keyCode == KeyEvent.VK_CONTROL ) {
|
if( keyCode == KeyEvent.VK_CONTROL ) {
|
||||||
inspectParentLevel++;
|
inspectParentLevel++;
|
||||||
inspect( lastX, lastY );
|
int parentLevel = inspect( lastX, lastY );
|
||||||
|
|
||||||
|
// limit level
|
||||||
|
if( inspectParentLevel > parentLevel )
|
||||||
|
inspectParentLevel = parentLevel;
|
||||||
} else if( keyCode == KeyEvent.VK_SHIFT && inspectParentLevel > 0 ) {
|
} else if( keyCode == KeyEvent.VK_SHIFT && inspectParentLevel > 0 ) {
|
||||||
inspectParentLevel--;
|
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 );
|
Point pt = SwingUtilities.convertPoint( rootPane.getGlassPane(), x, y, rootPane );
|
||||||
Component c = getDeepestComponentAt( rootPane, pt.x, pt.y );
|
Component c = getDeepestComponentAt( rootPane, pt.x, pt.y );
|
||||||
|
int parentLevel = 0;
|
||||||
for( int i = 0; i < inspectParentLevel && c != null; i++ ) {
|
for( int i = 0; i < inspectParentLevel && c != null; i++ ) {
|
||||||
Container parent = c.getParent();
|
Container parent = c.getParent();
|
||||||
if( parent == null )
|
if( parent == null )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
c = parent;
|
c = parent;
|
||||||
|
parentLevel++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( c == lastComponent )
|
if( c == lastComponent )
|
||||||
return;
|
return parentLevel;
|
||||||
|
|
||||||
lastComponent = c;
|
lastComponent = c;
|
||||||
|
|
||||||
highlight( c );
|
highlight( c );
|
||||||
showToolTip( c, x, y );
|
showToolTip( c, x, y, parentLevel );
|
||||||
|
|
||||||
|
return parentLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Component getDeepestComponentAt( Component parent, int x, int y ) {
|
private Component getDeepestComponentAt( Component parent, int x, int y ) {
|
||||||
@@ -338,7 +352,7 @@ public class FlatInspector
|
|||||||
return c;
|
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( c == null ) {
|
||||||
if( tip != null )
|
if( tip != null )
|
||||||
tip.setVisible( false );
|
tip.setVisible( false );
|
||||||
@@ -356,7 +370,7 @@ public class FlatInspector
|
|||||||
} else
|
} else
|
||||||
tip.setVisible( true );
|
tip.setVisible( true );
|
||||||
|
|
||||||
tip.setTipText( buildToolTipText( c ) );
|
tip.setTipText( buildToolTipText( c, parentLevel ) );
|
||||||
|
|
||||||
int tx = x + UIScale.scale( 8 );
|
int tx = x + UIScale.scale( 8 );
|
||||||
int ty = y + UIScale.scale( 16 );
|
int ty = y + UIScale.scale( 16 );
|
||||||
@@ -377,7 +391,7 @@ public class FlatInspector
|
|||||||
tip.repaint();
|
tip.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildToolTipText( Component c ) {
|
private static String buildToolTipText( Component c, int parentLevel ) {
|
||||||
String name = c.getClass().getName();
|
String name = c.getClass().getName();
|
||||||
name = name.substring( name.lastIndexOf( '.' ) + 1 );
|
name = name.substring( name.lastIndexOf( '.' ) + 1 );
|
||||||
|
|
||||||
@@ -441,10 +455,10 @@ public class FlatInspector
|
|||||||
text += "Left-to-right: " + c.getComponentOrientation().isLeftToRight() + '\n';
|
text += "Left-to-right: " + c.getComponentOrientation().isLeftToRight() + '\n';
|
||||||
text += "Parent: " + (c.getParent() != null ? c.getParent().getClass().getName() : "null");
|
text += "Parent: " + (c.getParent() != null ? c.getParent().getClass().getName() : "null");
|
||||||
|
|
||||||
if( inspectParentLevel > 0 )
|
if( parentLevel > 0 )
|
||||||
text += "\n\nParent level: " + inspectParentLevel;
|
text += "\n\nParent level: " + parentLevel;
|
||||||
|
|
||||||
if( inspectParentLevel > 0 )
|
if( parentLevel > 0 )
|
||||||
text += "\n(press Ctrl/Shift to increase/decrease level)";
|
text += "\n(press Ctrl/Shift to increase/decrease level)";
|
||||||
else
|
else
|
||||||
text += "\n\n(press Ctrl key to inspect parent)";
|
text += "\n\n(press Ctrl key to inspect parent)";
|
||||||
|
|||||||
@@ -50,11 +50,18 @@ public class FlatSVGIcon
|
|||||||
private static final SVGUniverse svgUniverse = new SVGUniverse();
|
private static final SVGUniverse svgUniverse = new SVGUniverse();
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
private final ClassLoader classLoader;
|
||||||
|
|
||||||
private SVGDiagram diagram;
|
private SVGDiagram diagram;
|
||||||
private boolean dark;
|
private boolean dark;
|
||||||
|
|
||||||
public FlatSVGIcon( String name ) {
|
public FlatSVGIcon( String name ) {
|
||||||
|
this( name, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
public FlatSVGIcon( String name, ClassLoader classLoader ) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.classLoader = classLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void update() {
|
private void update() {
|
||||||
@@ -79,7 +86,14 @@ public class FlatSVGIcon
|
|||||||
int dotIndex = name.lastIndexOf( '.' );
|
int dotIndex = name.lastIndexOf( '.' );
|
||||||
name = name.substring( 0, dotIndex ) + "_dark" + name.substring( dotIndex );
|
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
|
@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 {
|
module com.formdev.flatlaf.extras {
|
||||||
requires java.desktop;
|
requires java.desktop;
|
||||||
|
requires java.prefs;
|
||||||
requires static com.kitfox.svg; // optional at runtime
|
requires static com.kitfox.svg; // optional at runtime
|
||||||
requires com.formdev.flatlaf;
|
requires com.formdev.flatlaf;
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
},
|
},
|
||||||
"ui": {
|
"ui": {
|
||||||
"*": {
|
"*": {
|
||||||
|
"acceleratorForeground": "colorAcceleratorForeground",
|
||||||
|
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
||||||
"background": "colorBackground",
|
"background": "colorBackground",
|
||||||
"caretForeground": "colorForeground",
|
"caretForeground": "colorForeground",
|
||||||
"disabledForeground": "colorDisabledForeground",
|
"disabledForeground": "colorDisabledForeground",
|
||||||
@@ -68,10 +70,7 @@
|
|||||||
"startBorderColor": "#476069"
|
"startBorderColor": "#476069"
|
||||||
},
|
},
|
||||||
"CheckBox": {},
|
"CheckBox": {},
|
||||||
"CheckBoxMenuItem": {
|
"CheckBoxMenuItem": {},
|
||||||
"acceleratorForeground": "colorAcceleratorForeground",
|
|
||||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
|
||||||
},
|
|
||||||
"ColorChooser": {
|
"ColorChooser": {
|
||||||
"swatchesDefaultRecentColor": "colorBackground"
|
"swatchesDefaultRecentColor": "colorBackground"
|
||||||
},
|
},
|
||||||
@@ -257,8 +256,6 @@
|
|||||||
"usedBackground": "#566C73"
|
"usedBackground": "#566C73"
|
||||||
},
|
},
|
||||||
"Menu": {
|
"Menu": {
|
||||||
"acceleratorForeground": "colorAcceleratorForeground",
|
|
||||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
|
||||||
"borderColor": "colorSeparator",
|
"borderColor": "colorSeparator",
|
||||||
"separatorColor": "colorSeparator"
|
"separatorColor": "colorSeparator"
|
||||||
},
|
},
|
||||||
@@ -372,10 +369,7 @@
|
|||||||
"trackColor": "#36525B"
|
"trackColor": "#36525B"
|
||||||
},
|
},
|
||||||
"RadioButton": {},
|
"RadioButton": {},
|
||||||
"RadioButtonMenuItem": {
|
"RadioButtonMenuItem": {},
|
||||||
"acceleratorForeground": "colorAcceleratorForeground",
|
|
||||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
|
||||||
},
|
|
||||||
"ScrollBar": {
|
"ScrollBar": {
|
||||||
"background": "#14414F",
|
"background": "#14414F",
|
||||||
"hoverThumbBorderColor": "#0A384459",
|
"hoverThumbBorderColor": "#0A384459",
|
||||||
@@ -441,6 +435,11 @@
|
|||||||
"Separator": {
|
"Separator": {
|
||||||
"separatorColor": "colorSeparator"
|
"separatorColor": "colorSeparator"
|
||||||
},
|
},
|
||||||
|
"Settings": {
|
||||||
|
"Spotlight": {
|
||||||
|
"borderColor": "#9A670064"
|
||||||
|
}
|
||||||
|
},
|
||||||
"SidePanel": {
|
"SidePanel": {
|
||||||
"background": "#0E4155"
|
"background": "#0E4155"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
},
|
},
|
||||||
"ui": {
|
"ui": {
|
||||||
"*": {
|
"*": {
|
||||||
|
"acceleratorForeground": "colorAcceleratorForeground",
|
||||||
|
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
||||||
"background": "colorBackground",
|
"background": "colorBackground",
|
||||||
"caretForeground": "colorForeground",
|
"caretForeground": "colorForeground",
|
||||||
"disabledForeground": "colorDisabledForeground",
|
"disabledForeground": "colorDisabledForeground",
|
||||||
@@ -68,10 +70,7 @@
|
|||||||
"startBorderColor": "#B4BAB5"
|
"startBorderColor": "#B4BAB5"
|
||||||
},
|
},
|
||||||
"CheckBox": {},
|
"CheckBox": {},
|
||||||
"CheckBoxMenuItem": {
|
"CheckBoxMenuItem": {},
|
||||||
"acceleratorForeground": "colorAcceleratorForeground",
|
|
||||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
|
||||||
},
|
|
||||||
"ColorChooser": {
|
"ColorChooser": {
|
||||||
"swatchesDefaultRecentColor": "#CFD0C3"
|
"swatchesDefaultRecentColor": "#CFD0C3"
|
||||||
},
|
},
|
||||||
@@ -263,8 +262,6 @@
|
|||||||
"usedBackground": "#ADB5AF"
|
"usedBackground": "#ADB5AF"
|
||||||
},
|
},
|
||||||
"Menu": {
|
"Menu": {
|
||||||
"acceleratorForeground": "colorAcceleratorForeground",
|
|
||||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground",
|
|
||||||
"borderColor": "#D3D2C6",
|
"borderColor": "#D3D2C6",
|
||||||
"disabledBackground": "colorBackground",
|
"disabledBackground": "colorBackground",
|
||||||
"separatorColor": "colorSeparator"
|
"separatorColor": "colorSeparator"
|
||||||
@@ -378,10 +375,7 @@
|
|||||||
"trackColor": "#BAC0B8"
|
"trackColor": "#BAC0B8"
|
||||||
},
|
},
|
||||||
"RadioButton": {},
|
"RadioButton": {},
|
||||||
"RadioButtonMenuItem": {
|
"RadioButtonMenuItem": {},
|
||||||
"acceleratorForeground": "colorAcceleratorForeground",
|
|
||||||
"acceleratorSelectionForeground": "colorAcceleratorSelectionForeground"
|
|
||||||
},
|
|
||||||
"ScrollBar": {
|
"ScrollBar": {
|
||||||
"background": "#F5F0E3",
|
"background": "#F5F0E3",
|
||||||
"hoverThumbBorderColor": "#4B5A5F47",
|
"hoverThumbBorderColor": "#4B5A5F47",
|
||||||
@@ -445,6 +439,11 @@
|
|||||||
"Separator": {
|
"Separator": {
|
||||||
"separatorColor": "colorSeparator"
|
"separatorColor": "colorSeparator"
|
||||||
},
|
},
|
||||||
|
"Settings": {
|
||||||
|
"Spotlight": {
|
||||||
|
"borderColor": "#F6C00064"
|
||||||
|
}
|
||||||
|
},
|
||||||
"SidePanel": {
|
"SidePanel": {
|
||||||
"background": "#E2E2D4"
|
"background": "#E2E2D4"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#---- BusyLabel ----
|
#---- BusyLabel ----
|
||||||
|
|
||||||
JXBusyLabel.baseColor=#777777
|
JXBusyLabel.baseColor=#777
|
||||||
JXBusyLabel.highlightColor=#e0e0e0
|
JXBusyLabel.highlightColor=#e0e0e0
|
||||||
|
|
||||||
|
|
||||||
@@ -38,8 +38,8 @@ Hyperlink.disabledText=@disabledText
|
|||||||
JXMonthView.background=@textComponentBackground
|
JXMonthView.background=@textComponentBackground
|
||||||
JXMonthView.monthStringBackground=#4c5052
|
JXMonthView.monthStringBackground=#4c5052
|
||||||
JXMonthView.monthStringForeground=@foreground
|
JXMonthView.monthStringForeground=@foreground
|
||||||
JXMonthView.daysOfTheWeekForeground=#aaaaaa
|
JXMonthView.daysOfTheWeekForeground=#aaa
|
||||||
JXMonthView.weekOfTheYearForeground=#888888
|
JXMonthView.weekOfTheYearForeground=#888
|
||||||
JXMonthView.unselectableDayForeground=#E05555
|
JXMonthView.unselectableDayForeground=#E05555
|
||||||
JXMonthView.selectedBackground=@selectionBackground
|
JXMonthView.selectedBackground=@selectionBackground
|
||||||
JXMonthView.flaggedDayForeground=#E05555
|
JXMonthView.flaggedDayForeground=#E05555
|
||||||
@@ -63,7 +63,7 @@ TaskPane.contentInsets=10,10,10,10
|
|||||||
|
|
||||||
TaskPane.titleBackgroundGradientStart=#4c5052
|
TaskPane.titleBackgroundGradientStart=#4c5052
|
||||||
TaskPane.titleForeground=@foreground
|
TaskPane.titleForeground=@foreground
|
||||||
TaskPane.titleOver=#888888
|
TaskPane.titleOver=#888
|
||||||
TaskPane.specialTitleBackground=#afafaf
|
TaskPane.specialTitleBackground=#afafaf
|
||||||
TaskPane.specialTitleForeground=#222222
|
TaskPane.specialTitleForeground=#222
|
||||||
TaskPane.specialTitleOver=#666666
|
TaskPane.specialTitleOver=#666
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ JXBusyLabel.highlightColor=#808080
|
|||||||
#---- Header ----
|
#---- Header ----
|
||||||
|
|
||||||
JXHeader.background=@background
|
JXHeader.background=@background
|
||||||
JXHeader.startBackground=#ffffff
|
JXHeader.startBackground=#fff
|
||||||
|
|
||||||
|
|
||||||
#---- Hyperlink ----
|
#---- Hyperlink ----
|
||||||
@@ -38,8 +38,8 @@ Hyperlink.disabledText=@disabledText
|
|||||||
JXMonthView.background=@textComponentBackground
|
JXMonthView.background=@textComponentBackground
|
||||||
JXMonthView.monthStringBackground=#dfdfdf
|
JXMonthView.monthStringBackground=#dfdfdf
|
||||||
JXMonthView.monthStringForeground=@foreground
|
JXMonthView.monthStringForeground=@foreground
|
||||||
JXMonthView.daysOfTheWeekForeground=#444444
|
JXMonthView.daysOfTheWeekForeground=#444
|
||||||
JXMonthView.weekOfTheYearForeground=#666666
|
JXMonthView.weekOfTheYearForeground=#666
|
||||||
JXMonthView.unselectableDayForeground=#E02222
|
JXMonthView.unselectableDayForeground=#E02222
|
||||||
JXMonthView.selectedBackground=#B9CEF8
|
JXMonthView.selectedBackground=#B9CEF8
|
||||||
JXMonthView.flaggedDayForeground=#E02222
|
JXMonthView.flaggedDayForeground=#E02222
|
||||||
@@ -62,8 +62,8 @@ TaskPane.borderColor=$Button.borderColor
|
|||||||
TaskPane.contentInsets=10,10,10,10
|
TaskPane.contentInsets=10,10,10,10
|
||||||
|
|
||||||
TaskPane.titleBackgroundGradientStart=#dfdfdf
|
TaskPane.titleBackgroundGradientStart=#dfdfdf
|
||||||
TaskPane.titleForeground=#222222
|
TaskPane.titleForeground=#222
|
||||||
TaskPane.titleOver=#666666
|
TaskPane.titleOver=#666
|
||||||
TaskPane.specialTitleBackground=#afafaf
|
TaskPane.specialTitleBackground=#afafaf
|
||||||
TaskPane.specialTitleForeground=#222222
|
TaskPane.specialTitleForeground=#222
|
||||||
TaskPane.specialTitleOver=#666666
|
TaskPane.specialTitleOver=#666
|
||||||
|
|||||||
@@ -16,11 +16,21 @@
|
|||||||
|
|
||||||
package com.formdev.flatlaf.testing;
|
package com.formdev.flatlaf.testing;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.EventQueue;
|
||||||
import java.awt.datatransfer.DataFlavor;
|
import java.awt.datatransfer.DataFlavor;
|
||||||
import java.awt.datatransfer.StringSelection;
|
import java.awt.datatransfer.StringSelection;
|
||||||
import java.awt.datatransfer.Transferable;
|
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.*;
|
||||||
import javax.swing.table.*;
|
import javax.swing.table.*;
|
||||||
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
import javax.swing.tree.DefaultTreeModel;
|
||||||
import com.formdev.flatlaf.icons.FlatMenuArrowIcon;
|
import com.formdev.flatlaf.icons.FlatMenuArrowIcon;
|
||||||
import net.miginfocom.swing.*;
|
import net.miginfocom.swing.*;
|
||||||
|
|
||||||
@@ -37,8 +47,78 @@ public class FlatComponents2Test
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final TestListModel listModel;
|
||||||
|
private final TestTreeModel treeModel;
|
||||||
|
private final TestTableModel tableModel;
|
||||||
|
|
||||||
FlatComponents2Test() {
|
FlatComponents2Test() {
|
||||||
initComponents();
|
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() {
|
private void dndChanged() {
|
||||||
@@ -91,7 +171,33 @@ public class FlatComponents2Test
|
|||||||
table1.setColumnSelectionAllowed( columnSelectionCheckBox.isSelected() );
|
table1.setColumnSelectionAllowed( columnSelectionCheckBox.isSelected() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( { "unchecked", "rawtypes" } )
|
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();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||||
JLabel textFieldLabel = new JLabel();
|
JLabel textFieldLabel = new JLabel();
|
||||||
@@ -102,32 +208,45 @@ public class FlatComponents2Test
|
|||||||
list1 = new JList<>();
|
list1 = new JList<>();
|
||||||
JScrollPane scrollPane2 = new JScrollPane();
|
JScrollPane scrollPane2 = new JScrollPane();
|
||||||
list2 = new JList<>();
|
list2 = new JList<>();
|
||||||
|
JPanel listOptionsPanel = new JPanel();
|
||||||
|
JLabel listRowCountLabel = new JLabel();
|
||||||
|
listRowCountSpinner = new JSpinner();
|
||||||
JLabel treeLabel = new JLabel();
|
JLabel treeLabel = new JLabel();
|
||||||
JScrollPane scrollPane3 = new JScrollPane();
|
JScrollPane scrollPane3 = new JScrollPane();
|
||||||
tree1 = new JTree();
|
tree1 = new JTree();
|
||||||
JScrollPane scrollPane4 = new JScrollPane();
|
JScrollPane scrollPane4 = new JScrollPane();
|
||||||
tree2 = new JTree();
|
tree2 = new JTree();
|
||||||
|
JPanel treeOptionsPanel = new JPanel();
|
||||||
|
JLabel treeRowCountLabel = new JLabel();
|
||||||
|
treeRowCountSpinner = new JSpinner();
|
||||||
JLabel tableLabel = new JLabel();
|
JLabel tableLabel = new JLabel();
|
||||||
scrollPane5 = new JScrollPane();
|
scrollPane5 = new JScrollPane();
|
||||||
table1 = new JTable();
|
table1 = new JTable();
|
||||||
dndCheckBox = new JCheckBox();
|
JPanel tableOptionsPanel = new JPanel();
|
||||||
tableHeaderButtonCheckBox = new JCheckBox();
|
JLabel tableRowCountLabel = new JLabel();
|
||||||
|
tableRowCountSpinner = new JSpinner();
|
||||||
|
showHorizontalLinesCheckBox = new JCheckBox();
|
||||||
|
showVerticalLinesCheckBox = new JCheckBox();
|
||||||
|
intercellSpacingCheckBox = new JCheckBox();
|
||||||
|
redGridColorCheckBox = new JCheckBox();
|
||||||
rowSelectionCheckBox = new JCheckBox();
|
rowSelectionCheckBox = new JCheckBox();
|
||||||
columnSelectionCheckBox = new JCheckBox();
|
columnSelectionCheckBox = new JCheckBox();
|
||||||
|
dndCheckBox = new JCheckBox();
|
||||||
|
tableHeaderButtonCheckBox = new JCheckBox();
|
||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setLayout(new MigLayout(
|
setLayout(new MigLayout(
|
||||||
"ltr,insets dialog,hidemode 3",
|
"ltr,insets dialog,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[]" +
|
"[]" +
|
||||||
"[200]" +
|
"[200,fill]" +
|
||||||
"[200]",
|
"[200,fill]" +
|
||||||
|
"[fill]",
|
||||||
// rows
|
// rows
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[150,grow,sizegroup 1,fill]" +
|
||||||
"[::200]" +
|
"[150,grow,sizegroup 1,fill]" +
|
||||||
"[150,grow]" +
|
"[150,grow,sizegroup 1,fill]"));
|
||||||
"[]"));
|
|
||||||
|
|
||||||
//---- textFieldLabel ----
|
//---- textFieldLabel ----
|
||||||
textFieldLabel.setText("JTextField:");
|
textFieldLabel.setText("JTextField:");
|
||||||
@@ -144,74 +263,47 @@ public class FlatComponents2Test
|
|||||||
|
|
||||||
//---- listLabel ----
|
//---- listLabel ----
|
||||||
listLabel.setText("JList:");
|
listLabel.setText("JList:");
|
||||||
add(listLabel, "cell 0 1");
|
add(listLabel, "cell 0 1,aligny top,growy 0");
|
||||||
|
|
||||||
//======== scrollPane1 ========
|
//======== 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);
|
scrollPane1.setViewportView(list1);
|
||||||
}
|
}
|
||||||
add(scrollPane1, "cell 1 1,growx");
|
add(scrollPane1, "cell 1 1");
|
||||||
|
|
||||||
//======== scrollPane2 ========
|
//======== scrollPane2 ========
|
||||||
{
|
{
|
||||||
|
|
||||||
//---- list2 ----
|
//---- 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);
|
list2.setEnabled(false);
|
||||||
scrollPane2.setViewportView(list2);
|
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 ----
|
||||||
treeLabel.setText("JTree:");
|
treeLabel.setText("JTree:");
|
||||||
add(treeLabel, "cell 0 2");
|
add(treeLabel, "cell 0 2,aligny top,growy 0");
|
||||||
|
|
||||||
//======== scrollPane3 ========
|
//======== scrollPane3 ========
|
||||||
{
|
{
|
||||||
@@ -221,7 +313,7 @@ public class FlatComponents2Test
|
|||||||
tree1.setEditable(true);
|
tree1.setEditable(true);
|
||||||
scrollPane3.setViewportView(tree1);
|
scrollPane3.setViewportView(tree1);
|
||||||
}
|
}
|
||||||
add(scrollPane3, "cell 1 2,growx");
|
add(scrollPane3, "cell 1 2");
|
||||||
|
|
||||||
//======== scrollPane4 ========
|
//======== scrollPane4 ========
|
||||||
{
|
{
|
||||||
@@ -230,127 +322,156 @@ public class FlatComponents2Test
|
|||||||
tree2.setEnabled(false);
|
tree2.setEnabled(false);
|
||||||
scrollPane4.setViewportView(tree2);
|
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 ----
|
||||||
tableLabel.setText("JTable:");
|
tableLabel.setText("JTable:");
|
||||||
add(tableLabel, "cell 0 3");
|
add(tableLabel, "cell 0 3,aligny top,growy 0");
|
||||||
|
|
||||||
//======== scrollPane5 ========
|
//======== scrollPane5 ========
|
||||||
{
|
{
|
||||||
|
|
||||||
//---- table1 ----
|
//---- 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);
|
table1.setAutoCreateRowSorter(true);
|
||||||
scrollPane5.setViewportView(table1);
|
scrollPane5.setViewportView(table1);
|
||||||
}
|
}
|
||||||
add(scrollPane5, "cell 1 3 2 1,growx,width 300");
|
add(scrollPane5, "cell 1 3 2 1,width 300");
|
||||||
|
|
||||||
//---- dndCheckBox ----
|
//======== tableOptionsPanel ========
|
||||||
dndCheckBox.setText("enable drag and drop");
|
{
|
||||||
dndCheckBox.setMnemonic('D');
|
tableOptionsPanel.setLayout(new MigLayout(
|
||||||
dndCheckBox.addActionListener(e -> dndChanged());
|
"hidemode 3",
|
||||||
add(dndCheckBox, "cell 0 4 3 1");
|
// columns
|
||||||
|
"[]" +
|
||||||
|
"[90,fill]",
|
||||||
|
// rows
|
||||||
|
"[]" +
|
||||||
|
"[]0" +
|
||||||
|
"[]0" +
|
||||||
|
"[]0" +
|
||||||
|
"[]0" +
|
||||||
|
"[]0" +
|
||||||
|
"[]0" +
|
||||||
|
"[]0" +
|
||||||
|
"[]"));
|
||||||
|
|
||||||
//---- tableHeaderButtonCheckBox ----
|
//---- tableRowCountLabel ----
|
||||||
tableHeaderButtonCheckBox.setText("show button in table header");
|
tableRowCountLabel.setText("Row count:");
|
||||||
tableHeaderButtonCheckBox.addActionListener(e -> tableHeaderButtonChanged());
|
tableOptionsPanel.add(tableRowCountLabel, "cell 0 0");
|
||||||
add(tableHeaderButtonCheckBox, "cell 0 4 3 1");
|
|
||||||
|
|
||||||
//---- rowSelectionCheckBox ----
|
//---- tableRowCountSpinner ----
|
||||||
rowSelectionCheckBox.setText("row selection");
|
tableRowCountSpinner.setModel(new SpinnerNumberModel(20, 0, null, 10));
|
||||||
rowSelectionCheckBox.setSelected(true);
|
tableRowCountSpinner.addChangeListener(e -> tableRowCountChanged());
|
||||||
rowSelectionCheckBox.addActionListener(e -> rowSelectionChanged());
|
tableOptionsPanel.add(tableRowCountSpinner, "cell 1 0");
|
||||||
add(rowSelectionCheckBox, "cell 0 4 3 1");
|
|
||||||
|
|
||||||
//---- columnSelectionCheckBox ----
|
//---- showHorizontalLinesCheckBox ----
|
||||||
columnSelectionCheckBox.setText("column selection");
|
showHorizontalLinesCheckBox.setText("show horizontal lines");
|
||||||
columnSelectionCheckBox.addActionListener(e -> columnSelectionChanged());
|
showHorizontalLinesCheckBox.addActionListener(e -> showHorizontalLinesChanged());
|
||||||
add(columnSelectionCheckBox, "cell 0 4 3 1");
|
tableOptionsPanel.add(showHorizontalLinesCheckBox, "cell 0 1 2 1");
|
||||||
|
|
||||||
|
//---- showVerticalLinesCheckBox ----
|
||||||
|
showVerticalLinesCheckBox.setText("show vertical lines");
|
||||||
|
showVerticalLinesCheckBox.addActionListener(e -> showVerticalLinesChanged());
|
||||||
|
tableOptionsPanel.add(showVerticalLinesCheckBox, "cell 0 2 2 1");
|
||||||
|
|
||||||
|
//---- intercellSpacingCheckBox ----
|
||||||
|
intercellSpacingCheckBox.setText("intercell spacing");
|
||||||
|
intercellSpacingCheckBox.addActionListener(e -> intercellSpacingChanged());
|
||||||
|
tableOptionsPanel.add(intercellSpacingCheckBox, "cell 0 3 2 1");
|
||||||
|
|
||||||
|
//---- redGridColorCheckBox ----
|
||||||
|
redGridColorCheckBox.setText("red grid color");
|
||||||
|
redGridColorCheckBox.addActionListener(e -> redGridColorChanged());
|
||||||
|
tableOptionsPanel.add(redGridColorCheckBox, "cell 0 4 2 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
|
// 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
|
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||||
private JList<String> list1;
|
private JList<String> list1;
|
||||||
private JList<String> list2;
|
private JList<String> list2;
|
||||||
|
private JSpinner listRowCountSpinner;
|
||||||
private JTree tree1;
|
private JTree tree1;
|
||||||
private JTree tree2;
|
private JTree tree2;
|
||||||
|
private JSpinner treeRowCountSpinner;
|
||||||
private JScrollPane scrollPane5;
|
private JScrollPane scrollPane5;
|
||||||
private JTable table1;
|
private JTable table1;
|
||||||
private JCheckBox dndCheckBox;
|
private JSpinner tableRowCountSpinner;
|
||||||
private JCheckBox tableHeaderButtonCheckBox;
|
private JCheckBox showHorizontalLinesCheckBox;
|
||||||
|
private JCheckBox showVerticalLinesCheckBox;
|
||||||
|
private JCheckBox intercellSpacingCheckBox;
|
||||||
|
private JCheckBox redGridColorCheckBox;
|
||||||
private JCheckBox rowSelectionCheckBox;
|
private JCheckBox rowSelectionCheckBox;
|
||||||
private JCheckBox columnSelectionCheckBox;
|
private JCheckBox columnSelectionCheckBox;
|
||||||
|
private JCheckBox dndCheckBox;
|
||||||
|
private JCheckBox tableHeaderButtonCheckBox;
|
||||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
// 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 -----------------------------------------
|
//---- class DummyTransferHandler -----------------------------------------
|
||||||
|
|
||||||
private static class DummyTransferHandler
|
private static class DummyTransferHandler
|
||||||
@@ -384,4 +505,234 @@ public class FlatComponents2Test
|
|||||||
return false;
|
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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -8,8 +8,8 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "ltr,insets dialog,hidemode 3"
|
"$layoutConstraints": "ltr,insets dialog,hidemode 3"
|
||||||
"$columnConstraints": "[][200][200]"
|
"$columnConstraints": "[][200,fill][200,fill][fill]"
|
||||||
"$rowConstraints": "[][][::200][150,grow][]"
|
"$rowConstraints": "[][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "this"
|
name: "this"
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
@@ -35,58 +35,24 @@ new FormModel {
|
|||||||
name: "listLabel"
|
name: "listLabel"
|
||||||
"text": "JList:"
|
"text": "JList:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane1"
|
name: "scrollPane1"
|
||||||
add( new FormComponent( "javax.swing.JList" ) {
|
add( new FormComponent( "javax.swing.JList" ) {
|
||||||
name: "list1"
|
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() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.typeParameters": "String"
|
"JavaCodeGenerator.typeParameters": "String"
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane2"
|
name: "scrollPane2"
|
||||||
add( new FormComponent( "javax.swing.JList" ) {
|
add( new FormComponent( "javax.swing.JList" ) {
|
||||||
name: "list2"
|
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
|
"enabled": false
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.typeParameters": "String"
|
"JavaCodeGenerator.typeParameters": "String"
|
||||||
@@ -94,13 +60,42 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "treeLabel"
|
name: "treeLabel"
|
||||||
"text": "JTree:"
|
"text": "JTree:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane3"
|
name: "scrollPane3"
|
||||||
@@ -113,7 +108,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane4"
|
name: "scrollPane4"
|
||||||
@@ -125,13 +120,42 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "tableLabel"
|
name: "tableLabel"
|
||||||
"text": "JTable:"
|
"text": "JTable:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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 ) ) {
|
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
|
||||||
name: "scrollPane5"
|
name: "scrollPane5"
|
||||||
@@ -140,185 +164,124 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
add( new FormComponent( "javax.swing.JTable" ) {
|
add( new FormComponent( "javax.swing.JTable" ) {
|
||||||
name: "table1"
|
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
|
"autoCreateRowSorter": true
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
name: "dndCheckBox"
|
"$layoutConstraints": "hidemode 3"
|
||||||
"text": "enable drag and drop"
|
"$columnConstraints": "[][90,fill]"
|
||||||
"mnemonic": 68
|
"$rowConstraints": "[][]0[]0[]0[]0[]0[]0[]0[]"
|
||||||
auxiliary() {
|
} ) {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
name: "tableOptionsPanel"
|
||||||
}
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "dndChanged", false ) )
|
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 ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 4 3 1"
|
"value": "cell 3 3"
|
||||||
} )
|
|
||||||
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"
|
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( null ) {
|
}, new FormLayoutConstraints( null ) {
|
||||||
"location": new java.awt.Point( 0, 0 )
|
"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 labelLabel = new JLabel();
|
||||||
JLabel label1 = new JLabel();
|
JLabel label1 = new JLabel();
|
||||||
JLabel label2 = new JLabel();
|
JLabel label2 = new JLabel();
|
||||||
|
FlatComponentsTest.TestMultiLineLabel testMultiLineLabel1 = new FlatComponentsTest.TestMultiLineLabel();
|
||||||
JLabel buttonLabel = new JLabel();
|
JLabel buttonLabel = new JLabel();
|
||||||
JButton button1 = new JButton();
|
JButton button1 = new JButton();
|
||||||
JButton button17 = new JButton();
|
JButton button17 = new JButton();
|
||||||
@@ -367,6 +368,10 @@ public class FlatComponentsTest
|
|||||||
label2.setEnabled(false);
|
label2.setEnabled(false);
|
||||||
add(label2, "cell 2 0");
|
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 ----
|
||||||
buttonLabel.setText("JButton:");
|
buttonLabel.setText("JButton:");
|
||||||
add(buttonLabel, "cell 0 1");
|
add(buttonLabel, "cell 0 1");
|
||||||
@@ -1402,4 +1407,24 @@ public class FlatComponentsTest
|
|||||||
return true;
|
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 ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 0"
|
"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" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "buttonLabel"
|
name: "buttonLabel"
|
||||||
"text": "JButton:"
|
"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;
|
package com.formdev.flatlaf.testing;
|
||||||
@@ -27,6 +39,8 @@ public class FlatContainerTest
|
|||||||
|
|
||||||
public FlatContainerTest() {
|
public FlatContainerTest() {
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
||||||
|
addInitialTabs( tabbedPane1, tabbedPane2, tabbedPane3, tabbedPane4 );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tabScrollChanged() {
|
private void tabScrollChanged() {
|
||||||
@@ -35,8 +49,20 @@ public class FlatContainerTest
|
|||||||
tabbedPane2.setTabLayoutPolicy( tabLayoutPolicy );
|
tabbedPane2.setTabLayoutPolicy( tabLayoutPolicy );
|
||||||
tabbedPane3.setTabLayoutPolicy( tabLayoutPolicy );
|
tabbedPane3.setTabLayoutPolicy( tabLayoutPolicy );
|
||||||
tabbedPane4.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() {
|
private void showTabSeparatorsChanged() {
|
||||||
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
||||||
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
||||||
@@ -59,61 +85,70 @@ public class FlatContainerTest
|
|||||||
addRemoveMoreTabs( tabbedPane2, moreTabs );
|
addRemoveMoreTabs( tabbedPane2, moreTabs );
|
||||||
addRemoveMoreTabs( tabbedPane3, moreTabs );
|
addRemoveMoreTabs( tabbedPane3, moreTabs );
|
||||||
addRemoveMoreTabs( tabbedPane4, moreTabs );
|
addRemoveMoreTabs( tabbedPane4, moreTabs );
|
||||||
|
|
||||||
|
autoMoreTabs = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addRemoveMoreTabs( JTabbedPane tabbedPane, boolean add ) {
|
private void addRemoveMoreTabs( JTabbedPane tabbedPane, boolean add ) {
|
||||||
if( add ) {
|
if( add ) {
|
||||||
tabbedPane.addTab( "Tab 4", new JLabel( "tab 4" ) );
|
addTab( tabbedPane, "Tab 4", "tab content 4" );
|
||||||
tabbedPane.addTab( "Tab 5", new JLabel( "tab 5" ) );
|
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 {
|
} else {
|
||||||
int tabCount = tabbedPane.getTabCount();
|
int tabCount = tabbedPane.getTabCount();
|
||||||
if( tabCount > 3 ) {
|
if( tabCount > 3 ) {
|
||||||
for( int i = 0; i < 2; i++ )
|
for( int i = 0; i < 5; i++ )
|
||||||
tabbedPane.removeTabAt( tabbedPane.getTabCount() - 1 );
|
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() {
|
private void initComponents() {
|
||||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||||
JPanel panel9 = new JPanel();
|
JPanel panel9 = new JPanel();
|
||||||
JLabel splitPaneLabel = new JLabel();
|
JLabel splitPaneLabel = new JLabel();
|
||||||
JSplitPane splitPane3 = new JSplitPane();
|
JSplitPane splitPane3 = new JSplitPane();
|
||||||
JSplitPane splitPane1 = new JSplitPane();
|
JSplitPane splitPane1 = new JSplitPane();
|
||||||
JPanel panel10 = new JPanel();
|
FlatContainerTest.Panel1 panel15 = new FlatContainerTest.Panel1();
|
||||||
JTextField textField2 = new JTextField();
|
FlatContainerTest.Panel2 panel21 = new FlatContainerTest.Panel2();
|
||||||
JButton button1 = new JButton();
|
|
||||||
JPanel panel11 = new JPanel();
|
|
||||||
JTextField textField3 = new JTextField();
|
|
||||||
JButton button2 = new JButton();
|
|
||||||
JSplitPane splitPane2 = new JSplitPane();
|
JSplitPane splitPane2 = new JSplitPane();
|
||||||
JPanel panel12 = new JPanel();
|
JPanel panel12 = new JPanel();
|
||||||
|
JLabel label3 = new JLabel();
|
||||||
JPanel panel13 = new JPanel();
|
JPanel panel13 = new JPanel();
|
||||||
|
JLabel label4 = new JLabel();
|
||||||
JLabel tabbedPaneLabel = new JLabel();
|
JLabel tabbedPaneLabel = new JLabel();
|
||||||
tabbedPane1 = new JTabbedPane();
|
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();
|
tabbedPane3 = new JTabbedPane();
|
||||||
JPanel panel5 = new JPanel();
|
|
||||||
JLabel label5 = new JLabel();
|
|
||||||
JPanel panel6 = new JPanel();
|
|
||||||
JLabel label6 = new JLabel();
|
|
||||||
tabbedPane2 = new JTabbedPane();
|
tabbedPane2 = new JTabbedPane();
|
||||||
JPanel panel3 = new JPanel();
|
|
||||||
JLabel label3 = new JLabel();
|
|
||||||
JPanel panel4 = new JPanel();
|
|
||||||
JLabel label4 = new JLabel();
|
|
||||||
tabbedPane4 = new JTabbedPane();
|
tabbedPane4 = new JTabbedPane();
|
||||||
JPanel panel7 = new JPanel();
|
|
||||||
JLabel label7 = new JLabel();
|
|
||||||
JPanel panel8 = new JPanel();
|
|
||||||
JLabel label8 = new JLabel();
|
|
||||||
JPanel panel14 = new JPanel();
|
JPanel panel14 = new JPanel();
|
||||||
moreTabsCheckBox = new JCheckBox();
|
moreTabsCheckBox = new JCheckBox();
|
||||||
tabScrollCheckBox = new JCheckBox();
|
tabScrollCheckBox = new JCheckBox();
|
||||||
@@ -133,8 +168,8 @@ public class FlatContainerTest
|
|||||||
{
|
{
|
||||||
panel9.setOpaque(false);
|
panel9.setOpaque(false);
|
||||||
panel9.setLayout(new FormLayout(
|
panel9.setLayout(new FormLayout(
|
||||||
"70dlu:grow, $lcgap, 70dlu:grow",
|
"70dlu:grow, $ugap, 70dlu:grow",
|
||||||
"default, $lgap, fill:70dlu, $lgap, pref, 2*($lgap, fill:70dlu:grow), $lgap, pref"));
|
"default, $lgap, fill:70dlu, $pgap, pref, $lgap, 2*(fill:80dlu:grow, $ugap), pref"));
|
||||||
|
|
||||||
//---- splitPaneLabel ----
|
//---- splitPaneLabel ----
|
||||||
splitPaneLabel.setText("JSplitPane:");
|
splitPaneLabel.setText("JSplitPane:");
|
||||||
@@ -149,35 +184,13 @@ public class FlatContainerTest
|
|||||||
splitPane1.setResizeWeight(0.5);
|
splitPane1.setResizeWeight(0.5);
|
||||||
splitPane1.setOneTouchExpandable(true);
|
splitPane1.setOneTouchExpandable(true);
|
||||||
|
|
||||||
//======== panel10 ========
|
//---- panel15 ----
|
||||||
{
|
panel15.setBackground(new Color(217, 163, 67));
|
||||||
panel10.setBackground(Color.orange);
|
splitPane1.setLeftComponent(panel15);
|
||||||
panel10.setLayout(new FlowLayout());
|
|
||||||
|
|
||||||
//---- textField2 ----
|
//---- panel21 ----
|
||||||
textField2.setText("some text");
|
panel21.setBackground(new Color(98, 181, 67));
|
||||||
panel10.add(textField2);
|
splitPane1.setRightComponent(panel21);
|
||||||
|
|
||||||
//---- 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);
|
|
||||||
}
|
}
|
||||||
splitPane3.setLeftComponent(splitPane1);
|
splitPane3.setLeftComponent(splitPane1);
|
||||||
|
|
||||||
@@ -189,15 +202,27 @@ public class FlatContainerTest
|
|||||||
|
|
||||||
//======== panel12 ========
|
//======== panel12 ========
|
||||||
{
|
{
|
||||||
panel12.setBackground(Color.orange);
|
panel12.setBackground(new Color(242, 101, 34));
|
||||||
panel12.setLayout(new FlowLayout());
|
panel12.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
//---- label3 ----
|
||||||
|
label3.setText("TOP");
|
||||||
|
label3.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
label3.setForeground(Color.white);
|
||||||
|
panel12.add(label3, BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
splitPane2.setTopComponent(panel12);
|
splitPane2.setTopComponent(panel12);
|
||||||
|
|
||||||
//======== panel13 ========
|
//======== panel13 ========
|
||||||
{
|
{
|
||||||
panel13.setBackground(Color.magenta);
|
panel13.setBackground(new Color(64, 182, 224));
|
||||||
panel13.setLayout(new FlowLayout());
|
panel13.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
//---- label4 ----
|
||||||
|
label4.setText("BOTTOM");
|
||||||
|
label4.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
label4.setForeground(Color.white);
|
||||||
|
panel13.add(label4, BorderLayout.CENTER);
|
||||||
}
|
}
|
||||||
splitPane2.setBottomComponent(panel13);
|
splitPane2.setBottomComponent(panel13);
|
||||||
}
|
}
|
||||||
@@ -208,128 +233,23 @@ public class FlatContainerTest
|
|||||||
//---- tabbedPaneLabel ----
|
//---- tabbedPaneLabel ----
|
||||||
tabbedPaneLabel.setText("JTabbedPane:");
|
tabbedPaneLabel.setText("JTabbedPane:");
|
||||||
panel9.add(tabbedPaneLabel, cc.xy(1, 5));
|
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));
|
panel9.add(tabbedPane1, cc.xy(1, 7));
|
||||||
|
|
||||||
//======== tabbedPane3 ========
|
//======== tabbedPane3 ========
|
||||||
{
|
{
|
||||||
tabbedPane3.setTabPlacement(SwingConstants.LEFT);
|
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));
|
panel9.add(tabbedPane3, cc.xy(3, 7));
|
||||||
|
|
||||||
//======== tabbedPane2 ========
|
//======== tabbedPane2 ========
|
||||||
{
|
{
|
||||||
tabbedPane2.setTabPlacement(SwingConstants.BOTTOM);
|
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));
|
panel9.add(tabbedPane2, cc.xy(1, 9));
|
||||||
|
|
||||||
//======== tabbedPane4 ========
|
//======== tabbedPane4 ========
|
||||||
{
|
{
|
||||||
tabbedPane4.setTabPlacement(SwingConstants.RIGHT);
|
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));
|
panel9.add(tabbedPane4, cc.xy(3, 9));
|
||||||
|
|
||||||
@@ -347,25 +267,24 @@ public class FlatContainerTest
|
|||||||
"[center]"));
|
"[center]"));
|
||||||
|
|
||||||
//---- moreTabsCheckBox ----
|
//---- moreTabsCheckBox ----
|
||||||
moreTabsCheckBox.setText("more tabs");
|
moreTabsCheckBox.setText("More tabs");
|
||||||
moreTabsCheckBox.setMnemonic('M');
|
moreTabsCheckBox.setMnemonic('M');
|
||||||
moreTabsCheckBox.addActionListener(e -> moreTabsChanged());
|
moreTabsCheckBox.addActionListener(e -> moreTabsChanged());
|
||||||
panel14.add(moreTabsCheckBox, "cell 0 0");
|
panel14.add(moreTabsCheckBox, "cell 0 0");
|
||||||
|
|
||||||
//---- tabScrollCheckBox ----
|
//---- tabScrollCheckBox ----
|
||||||
tabScrollCheckBox.setText("tabLayoutPolicy = SCROLL");
|
tabScrollCheckBox.setText("Use scroll layout");
|
||||||
tabScrollCheckBox.setMnemonic('S');
|
tabScrollCheckBox.setMnemonic('S');
|
||||||
tabScrollCheckBox.addActionListener(e -> tabScrollChanged());
|
tabScrollCheckBox.addActionListener(e -> tabScrollChanged());
|
||||||
panel14.add(tabScrollCheckBox, "cell 1 0,alignx left,growx 0");
|
panel14.add(tabScrollCheckBox, "cell 1 0,alignx left,growx 0");
|
||||||
|
|
||||||
//---- showTabSeparatorsCheckBox ----
|
//---- showTabSeparatorsCheckBox ----
|
||||||
showTabSeparatorsCheckBox.setText("JTabbedPane.showTabSeparators");
|
showTabSeparatorsCheckBox.setText("Show tab separators");
|
||||||
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
||||||
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
||||||
|
|
||||||
//---- hasFullBorderCheckBox ----
|
//---- hasFullBorderCheckBox ----
|
||||||
hasFullBorderCheckBox.setText("JTabbedPane.hasFullBorder");
|
hasFullBorderCheckBox.setText("Show content border");
|
||||||
hasFullBorderCheckBox.setMnemonic('F');
|
|
||||||
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
||||||
panel14.add(hasFullBorderCheckBox, "cell 3 0,alignx left,growx 0");
|
panel14.add(hasFullBorderCheckBox, "cell 3 0,alignx left,growx 0");
|
||||||
}
|
}
|
||||||
@@ -385,4 +304,84 @@ public class FlatContainerTest
|
|||||||
private JCheckBox showTabSeparatorsCheckBox;
|
private JCheckBox showTabSeparatorsCheckBox;
|
||||||
private JCheckBox hasFullBorderCheckBox;
|
private JCheckBox hasFullBorderCheckBox;
|
||||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
// 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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -13,8 +13,8 @@ new FormModel {
|
|||||||
} ) {
|
} ) {
|
||||||
name: "this"
|
name: "this"
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
|
||||||
"$columnSpecs": "70dlu:grow, labelcompgap, 70dlu:grow"
|
"$columnSpecs": "70dlu:grow, unrelgap, 70dlu:grow"
|
||||||
"$rowSpecs": "default, linegap, fill:70dlu, linegap, pref, linegap, fill:70dlu:grow, linegap, fill:70dlu:grow, linegap, pref"
|
"$rowSpecs": "default, linegap, fill:70dlu, pargap, pref, linegap, fill:80dlu:grow, unrelgap, fill:80dlu:grow, unrelgap, pref"
|
||||||
} ) {
|
} ) {
|
||||||
name: "panel9"
|
name: "panel9"
|
||||||
"opaque": false
|
"opaque": false
|
||||||
@@ -29,31 +29,15 @@ new FormModel {
|
|||||||
name: "splitPane1"
|
name: "splitPane1"
|
||||||
"resizeWeight": 0.5
|
"resizeWeight": 0.5
|
||||||
"oneTouchExpandable": true
|
"oneTouchExpandable": true
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
add( new FormComponent( "com.formdev.flatlaf.testing.FlatContainerTest$Panel1" ) {
|
||||||
name: "panel10"
|
name: "panel15"
|
||||||
"background": sfield java.awt.Color orange
|
"background": new java.awt.Color( 217, 163, 67, 255 )
|
||||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
|
||||||
name: "textField2"
|
|
||||||
"text": "some text"
|
|
||||||
} )
|
|
||||||
add( new FormComponent( "javax.swing.JButton" ) {
|
|
||||||
name: "button1"
|
|
||||||
"text": "..."
|
|
||||||
} )
|
|
||||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "left"
|
"value": "left"
|
||||||
} )
|
} )
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
|
add( new FormComponent( "com.formdev.flatlaf.testing.FlatContainerTest$Panel2" ) {
|
||||||
name: "panel11"
|
name: "panel21"
|
||||||
"background": sfield java.awt.Color magenta
|
"background": new java.awt.Color( 98, 181, 67, 255 )
|
||||||
add( new FormComponent( "javax.swing.JTextField" ) {
|
|
||||||
name: "textField3"
|
|
||||||
"text": "some text"
|
|
||||||
} )
|
|
||||||
add( new FormComponent( "javax.swing.JButton" ) {
|
|
||||||
name: "button2"
|
|
||||||
"text": "..."
|
|
||||||
} )
|
|
||||||
}, new FormLayoutConstraints( class java.lang.String ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "right"
|
"value": "right"
|
||||||
} )
|
} )
|
||||||
@@ -65,15 +49,31 @@ new FormModel {
|
|||||||
"orientation": 0
|
"orientation": 0
|
||||||
"resizeWeight": 0.5
|
"resizeWeight": 0.5
|
||||||
"oneTouchExpandable": true
|
"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"
|
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 ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "left"
|
"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"
|
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 ) {
|
}, new FormLayoutConstraints( class java.lang.String ) {
|
||||||
"value": "right"
|
"value": "right"
|
||||||
} )
|
} )
|
||||||
@@ -96,43 +96,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridX": 1
|
"gridX": 1
|
||||||
"gridY": 7
|
"gridY": 7
|
||||||
@@ -143,27 +106,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridX": 3
|
"gridX": 3
|
||||||
"gridY": 7
|
"gridY": 7
|
||||||
@@ -174,28 +116,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridY": 9
|
"gridY": 9
|
||||||
} )
|
} )
|
||||||
@@ -205,27 +125,6 @@ new FormModel {
|
|||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"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 ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridX": 3
|
"gridX": 3
|
||||||
"gridY": 9
|
"gridY": 9
|
||||||
@@ -239,7 +138,7 @@ new FormModel {
|
|||||||
"opaque": false
|
"opaque": false
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "moreTabsCheckBox"
|
name: "moreTabsCheckBox"
|
||||||
"text": "more tabs"
|
"text": "More tabs"
|
||||||
"mnemonic": 77
|
"mnemonic": 77
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
@@ -250,7 +149,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "tabScrollCheckBox"
|
name: "tabScrollCheckBox"
|
||||||
"text": "tabLayoutPolicy = SCROLL"
|
"text": "Use scroll layout"
|
||||||
"mnemonic": 83
|
"mnemonic": 83
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
@@ -261,7 +160,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "showTabSeparatorsCheckBox"
|
name: "showTabSeparatorsCheckBox"
|
||||||
"text": "JTabbedPane.showTabSeparators"
|
"text": "Show tab separators"
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
@@ -271,8 +170,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "hasFullBorderCheckBox"
|
name: "hasFullBorderCheckBox"
|
||||||
"text": "JTabbedPane.hasFullBorder"
|
"text": "Show content border"
|
||||||
"mnemonic": 70
|
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
@@ -291,5 +189,61 @@ new FormModel {
|
|||||||
"location": new java.awt.Point( 0, 0 )
|
"location": new java.awt.Point( 0, 0 )
|
||||||
"size": new java.awt.Dimension( 625, 515 )
|
"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();
|
label10 = new JLabel();
|
||||||
radioButtonMenuItem1 = new JRadioButtonMenuItem();
|
radioButtonMenuItem1 = new JRadioButtonMenuItem();
|
||||||
radioButtonMenuItem2 = new JRadioButtonMenuItem();
|
radioButtonMenuItem2 = new JRadioButtonMenuItem();
|
||||||
|
label14 = new JLabel();
|
||||||
|
label15 = new JLabel();
|
||||||
|
label16 = new JLabel();
|
||||||
label1 = new JLabel();
|
label1 = new JLabel();
|
||||||
scrollPane15 = new JScrollPane();
|
scrollPane15 = new JScrollPane();
|
||||||
editorPane1 = new JEditorPane();
|
editorPane1 = new JEditorPane();
|
||||||
@@ -146,6 +149,7 @@ public class FlatHtmlTest
|
|||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
|
"[]" +
|
||||||
"[]"));
|
"[]"));
|
||||||
|
|
||||||
//---- label5 ----
|
//---- label5 ----
|
||||||
@@ -173,7 +177,7 @@ public class FlatHtmlTest
|
|||||||
panel1.add(button2, "cell 2 1");
|
panel1.add(button2, "cell 2 1");
|
||||||
|
|
||||||
//---- label11 ----
|
//---- label11 ----
|
||||||
label11.setText("text");
|
label11.setText("JToggleButton:");
|
||||||
panel1.add(label11, "cell 0 2");
|
panel1.add(label11, "cell 0 2");
|
||||||
|
|
||||||
//---- toggleButton1 ----
|
//---- toggleButton1 ----
|
||||||
@@ -187,7 +191,7 @@ public class FlatHtmlTest
|
|||||||
panel1.add(toggleButton2, "cell 2 2");
|
panel1.add(toggleButton2, "cell 2 2");
|
||||||
|
|
||||||
//---- label12 ----
|
//---- label12 ----
|
||||||
label12.setText("text");
|
label12.setText("JCheckBox:");
|
||||||
panel1.add(label12, "cell 0 3");
|
panel1.add(label12, "cell 0 3");
|
||||||
|
|
||||||
//---- checkBox1 ----
|
//---- checkBox1 ----
|
||||||
@@ -199,7 +203,7 @@ public class FlatHtmlTest
|
|||||||
panel1.add(checkBox2, "cell 2 3");
|
panel1.add(checkBox2, "cell 2 3");
|
||||||
|
|
||||||
//---- label13 ----
|
//---- label13 ----
|
||||||
label13.setText("text");
|
label13.setText("JRadioButton:");
|
||||||
panel1.add(label13, "cell 0 4");
|
panel1.add(label13, "cell 0 4");
|
||||||
|
|
||||||
//---- radioButton1 ----
|
//---- radioButton1 ----
|
||||||
@@ -265,6 +269,20 @@ public class FlatHtmlTest
|
|||||||
radioButtonMenuItem2.setText("Some text");
|
radioButtonMenuItem2.setText("Some text");
|
||||||
radioButtonMenuItem2.setSelected(true);
|
radioButtonMenuItem2.setSelected(true);
|
||||||
panel1.add(radioButtonMenuItem2, "cell 2 8");
|
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");
|
add(panel1, "cell 4 0 1 3,aligny top,growy 0");
|
||||||
|
|
||||||
@@ -379,6 +397,9 @@ public class FlatHtmlTest
|
|||||||
private JLabel label10;
|
private JLabel label10;
|
||||||
private JRadioButtonMenuItem radioButtonMenuItem1;
|
private JRadioButtonMenuItem radioButtonMenuItem1;
|
||||||
private JRadioButtonMenuItem radioButtonMenuItem2;
|
private JRadioButtonMenuItem radioButtonMenuItem2;
|
||||||
|
private JLabel label14;
|
||||||
|
private JLabel label15;
|
||||||
|
private JLabel label16;
|
||||||
private JLabel label1;
|
private JLabel label1;
|
||||||
private JScrollPane scrollPane15;
|
private JScrollPane scrollPane15;
|
||||||
private JEditorPane editorPane1;
|
private JEditorPane editorPane1;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ new FormModel {
|
|||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "insets 0,hidemode 3"
|
"$layoutConstraints": "insets 0,hidemode 3"
|
||||||
"$columnConstraints": "[fill][fill][fill]"
|
"$columnConstraints": "[fill][fill][fill]"
|
||||||
"$rowConstraints": "[][][][][][][][][]"
|
"$rowConstraints": "[][][][][][][][][][]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "panel1"
|
name: "panel1"
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
@@ -77,7 +77,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label11"
|
name: "label11"
|
||||||
"text": "text"
|
"text": "JToggleButton:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 2"
|
"value": "cell 0 2"
|
||||||
} )
|
} )
|
||||||
@@ -97,7 +97,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label12"
|
name: "label12"
|
||||||
"text": "text"
|
"text": "JCheckBox:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 3"
|
"value": "cell 0 3"
|
||||||
} )
|
} )
|
||||||
@@ -115,7 +115,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label13"
|
name: "label13"
|
||||||
"text": "text"
|
"text": "JRadioButton:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 4"
|
"value": "cell 0 4"
|
||||||
} )
|
} )
|
||||||
@@ -207,6 +207,26 @@ new FormModel {
|
|||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 8"
|
"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 ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 4 0 1 3,aligny top,growy 0"
|
"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;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,6 +62,7 @@ public class FlatTestFrame
|
|||||||
private FlatInspector inspector;
|
private FlatInspector inspector;
|
||||||
|
|
||||||
public boolean useApplyComponentOrientation;
|
public boolean useApplyComponentOrientation;
|
||||||
|
public boolean applyComponentOrientationToFrame;
|
||||||
|
|
||||||
public static FlatTestFrame create( String[] args, String title ) {
|
public static FlatTestFrame create( String[] args, String title ) {
|
||||||
DemoPrefs.init( PREFS_ROOT_PATH );
|
DemoPrefs.init( PREFS_ROOT_PATH );
|
||||||
@@ -73,9 +74,16 @@ public class FlatTestFrame
|
|||||||
System.setProperty( FlatSystemProperties.UI_SCALE, scaleFactor );
|
System.setProperty( FlatSystemProperties.UI_SCALE, scaleFactor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// install inspectors
|
||||||
|
FlatInspector.install( "ctrl shift alt X" );
|
||||||
|
FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||||
|
|
||||||
// disable animated Laf change
|
// disable animated Laf change
|
||||||
System.setProperty( "flatlaf.animatedLafChange", "false" );
|
System.setProperty( "flatlaf.animatedLafChange", "false" );
|
||||||
|
|
||||||
|
// test loading custom defaults from package
|
||||||
|
FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.testing.customdefaults" );
|
||||||
|
|
||||||
// set look and feel
|
// set look and feel
|
||||||
DemoPrefs.initLaf( args );
|
DemoPrefs.initLaf( args );
|
||||||
|
|
||||||
@@ -245,6 +253,13 @@ public class FlatTestFrame
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
|
||||||
|
FlatUIDefaultsInspector.hide();
|
||||||
|
}
|
||||||
|
|
||||||
private void updateTitle() {
|
private void updateTitle() {
|
||||||
double systemScaleFactor = UIScale.getSystemScaleFactor( getGraphicsConfiguration() );
|
double systemScaleFactor = UIScale.getSystemScaleFactor( getGraphicsConfiguration() );
|
||||||
float userScaleFactor = UIScale.getUserScaleFactor();
|
float userScaleFactor = UIScale.getUserScaleFactor();
|
||||||
@@ -439,7 +454,9 @@ public class FlatTestFrame
|
|||||||
? ComponentOrientation.RIGHT_TO_LEFT
|
? ComponentOrientation.RIGHT_TO_LEFT
|
||||||
: ComponentOrientation.LEFT_TO_RIGHT;
|
: ComponentOrientation.LEFT_TO_RIGHT;
|
||||||
|
|
||||||
if( useApplyComponentOrientation )
|
if( applyComponentOrientationToFrame )
|
||||||
|
applyComponentOrientation( orientation );
|
||||||
|
else if( useApplyComponentOrientation )
|
||||||
content.applyComponentOrientation( orientation );
|
content.applyComponentOrientation( orientation );
|
||||||
else {
|
else {
|
||||||
updateComponentsRecur( content, (c, type) -> {
|
updateComponentsRecur( content, (c, type) -> {
|
||||||
|
|||||||
@@ -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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import java.awt.event.*;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import com.formdev.flatlaf.FlatClientProperties;
|
import com.formdev.flatlaf.FlatClientProperties;
|
||||||
import net.miginfocom.swing.*;
|
import net.miginfocom.swing.*;
|
||||||
@@ -39,6 +40,7 @@ public class FlatWindowDecorationsTest
|
|||||||
JDialog.setDefaultLookAndFeelDecorated( true );
|
JDialog.setDefaultLookAndFeelDecorated( true );
|
||||||
|
|
||||||
FlatTestFrame frame = FlatTestFrame.create( args, "FlatWindowDecorationsTest" );
|
FlatTestFrame frame = FlatTestFrame.create( args, "FlatWindowDecorationsTest" );
|
||||||
|
frame.applyComponentOrientationToFrame = true;
|
||||||
|
|
||||||
// WARNING: Do not this in real-world programs.
|
// WARNING: Do not this in real-world programs.
|
||||||
// frame.setUndecorated( true );
|
// frame.setUndecorated( true );
|
||||||
@@ -76,6 +78,10 @@ public class FlatWindowDecorationsTest
|
|||||||
menuBarEmbeddedCheckBox.setEnabled( window instanceof JFrame );
|
menuBarEmbeddedCheckBox.setEnabled( window instanceof JFrame );
|
||||||
maximizedBoundsCheckBox.setEnabled( window instanceof Frame );
|
maximizedBoundsCheckBox.setEnabled( window instanceof Frame );
|
||||||
|
|
||||||
|
addMenuButton.setEnabled( menuBarCheckBox.isEnabled() );
|
||||||
|
removeMenuButton.setEnabled( menuBarCheckBox.isEnabled() );
|
||||||
|
changeMenuButton.setEnabled( menuBarCheckBox.isEnabled() );
|
||||||
|
|
||||||
boolean windowHasIcons = (window != null && !window.getIconImages().isEmpty());
|
boolean windowHasIcons = (window != null && !window.getIconImages().isEmpty());
|
||||||
iconNoneRadioButton.setEnabled( windowHasIcons );
|
iconNoneRadioButton.setEnabled( windowHasIcons );
|
||||||
iconTestAllRadioButton.setEnabled( windowHasIcons );
|
iconTestAllRadioButton.setEnabled( windowHasIcons );
|
||||||
@@ -117,6 +123,32 @@ public class FlatWindowDecorationsTest
|
|||||||
rootPane.putClientProperty( FlatClientProperties.MENU_BAR_EMBEDDED, menuBarEmbeddedCheckBox.isSelected() );
|
rootPane.putClientProperty( FlatClientProperties.MENU_BAR_EMBEDDED, menuBarEmbeddedCheckBox.isSelected() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addMenu() {
|
||||||
|
JMenu menu = new JMenu( "Hello" );
|
||||||
|
menu.add( new JMenuItem( "world" ) );
|
||||||
|
menuBar.add( menu );
|
||||||
|
menuBar.revalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeMenu() {
|
||||||
|
int menuCount = menuBar.getMenuCount();
|
||||||
|
if( menuCount <= 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
menuBar.remove( menuCount - 1 );
|
||||||
|
menuBar.revalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void changeMenu() {
|
||||||
|
int menuCount = menuBar.getMenuCount();
|
||||||
|
if( menuCount <= 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
int len = new Random().nextInt( 20 );
|
||||||
|
String text = "1234567890abcdefghij".substring( 0, len + 1 );
|
||||||
|
menuBar.getMenu( menuCount - 1 ).setText( text );
|
||||||
|
}
|
||||||
|
|
||||||
private void resizableChanged() {
|
private void resizableChanged() {
|
||||||
Window window = SwingUtilities.windowForComponent( this );
|
Window window = SwingUtilities.windowForComponent( this );
|
||||||
if( window instanceof Frame )
|
if( window instanceof Frame )
|
||||||
@@ -218,6 +250,9 @@ public class FlatWindowDecorationsTest
|
|||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||||
menuBarCheckBox = new JCheckBox();
|
menuBarCheckBox = new JCheckBox();
|
||||||
|
addMenuButton = new JButton();
|
||||||
|
removeMenuButton = new JButton();
|
||||||
|
changeMenuButton = new JButton();
|
||||||
menuBarEmbeddedCheckBox = new JCheckBox();
|
menuBarEmbeddedCheckBox = new JCheckBox();
|
||||||
resizableCheckBox = new JCheckBox();
|
resizableCheckBox = new JCheckBox();
|
||||||
maximizedBoundsCheckBox = new JCheckBox();
|
maximizedBoundsCheckBox = new JCheckBox();
|
||||||
@@ -271,7 +306,7 @@ public class FlatWindowDecorationsTest
|
|||||||
"ltr,insets dialog,hidemode 3",
|
"ltr,insets dialog,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[left]para" +
|
"[left]para" +
|
||||||
"[fill]",
|
"[left]",
|
||||||
// rows
|
// rows
|
||||||
"para[]0" +
|
"para[]0" +
|
||||||
"[]0" +
|
"[]0" +
|
||||||
@@ -287,6 +322,21 @@ public class FlatWindowDecorationsTest
|
|||||||
menuBarCheckBox.addActionListener(e -> menuBarChanged());
|
menuBarCheckBox.addActionListener(e -> menuBarChanged());
|
||||||
add(menuBarCheckBox, "cell 0 0");
|
add(menuBarCheckBox, "cell 0 0");
|
||||||
|
|
||||||
|
//---- addMenuButton ----
|
||||||
|
addMenuButton.setText("Add menu");
|
||||||
|
addMenuButton.addActionListener(e -> addMenu());
|
||||||
|
add(addMenuButton, "cell 1 0 1 2,align left top,grow 0 0");
|
||||||
|
|
||||||
|
//---- removeMenuButton ----
|
||||||
|
removeMenuButton.setText("Remove menu");
|
||||||
|
removeMenuButton.addActionListener(e -> removeMenu());
|
||||||
|
add(removeMenuButton, "cell 1 0 1 2,align left top,grow 0 0");
|
||||||
|
|
||||||
|
//---- changeMenuButton ----
|
||||||
|
changeMenuButton.setText("Change menu");
|
||||||
|
changeMenuButton.addActionListener(e -> changeMenu());
|
||||||
|
add(changeMenuButton, "cell 1 0 1 2,align left top,grow 0 0");
|
||||||
|
|
||||||
//---- menuBarEmbeddedCheckBox ----
|
//---- menuBarEmbeddedCheckBox ----
|
||||||
menuBarEmbeddedCheckBox.setText("embedded menu bar");
|
menuBarEmbeddedCheckBox.setText("embedded menu bar");
|
||||||
menuBarEmbeddedCheckBox.setSelected(true);
|
menuBarEmbeddedCheckBox.setSelected(true);
|
||||||
@@ -606,6 +656,9 @@ public class FlatWindowDecorationsTest
|
|||||||
|
|
||||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||||
private JCheckBox menuBarCheckBox;
|
private JCheckBox menuBarCheckBox;
|
||||||
|
private JButton addMenuButton;
|
||||||
|
private JButton removeMenuButton;
|
||||||
|
private JButton changeMenuButton;
|
||||||
private JCheckBox menuBarEmbeddedCheckBox;
|
private JCheckBox menuBarEmbeddedCheckBox;
|
||||||
private JCheckBox resizableCheckBox;
|
private JCheckBox resizableCheckBox;
|
||||||
private JCheckBox maximizedBoundsCheckBox;
|
private JCheckBox maximizedBoundsCheckBox;
|
||||||
|
|||||||
@@ -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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -8,7 +8,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "ltr,insets dialog,hidemode 3"
|
"$layoutConstraints": "ltr,insets dialog,hidemode 3"
|
||||||
"$columnConstraints": "[left]para[fill]"
|
"$columnConstraints": "[left]para[left]"
|
||||||
"$rowConstraints": "para[]0[]0[]0[][][top][]"
|
"$rowConstraints": "para[]0[]0[]0[][][top][]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "this"
|
name: "this"
|
||||||
@@ -23,6 +23,36 @@ new FormModel {
|
|||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 0"
|
"value": "cell 0 0"
|
||||||
} )
|
} )
|
||||||
|
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"
|
||||||
|
} )
|
||||||
|
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"
|
||||||
|
} )
|
||||||
|
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"
|
||||||
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "menuBarEmbeddedCheckBox"
|
name: "menuBarEmbeddedCheckBox"
|
||||||
"text": "embedded menu bar"
|
"text": "embedded menu bar"
|
||||||
@@ -238,7 +268,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( null ) {
|
}, new FormLayoutConstraints( null ) {
|
||||||
"location": new java.awt.Point( 0, 0 )
|
"location": new java.awt.Point( 0, 0 )
|
||||||
"size": new java.awt.Dimension( 450, 380 )
|
"size": new java.awt.Dimension( 550, 380 )
|
||||||
} )
|
} )
|
||||||
add( new FormContainer( "javax.swing.JMenuBar", new FormLayoutManager( class javax.swing.JMenuBar ) ) {
|
add( new FormContainer( "javax.swing.JMenuBar", new FormLayoutManager( class javax.swing.JMenuBar ) ) {
|
||||||
name: "menuBar"
|
name: "menuBar"
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package com.formdev.flatlaf.testing.extras;
|
package com.formdev.flatlaf.testing.extras;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import com.formdev.flatlaf.FlatIconColors;
|
|
||||||
import com.formdev.flatlaf.extras.*;
|
import com.formdev.flatlaf.extras.*;
|
||||||
import com.formdev.flatlaf.testing.*;
|
import com.formdev.flatlaf.testing.*;
|
||||||
import net.miginfocom.swing.*;
|
import net.miginfocom.swing.*;
|
||||||
@@ -31,7 +30,6 @@ public class FlatExtrasTest
|
|||||||
public static void main( String[] args ) {
|
public static void main( String[] args ) {
|
||||||
SwingUtilities.invokeLater( () -> {
|
SwingUtilities.invokeLater( () -> {
|
||||||
FlatTestFrame frame = FlatTestFrame.create( args, "FlatExtrasTest" );
|
FlatTestFrame frame = FlatTestFrame.create( args, "FlatExtrasTest" );
|
||||||
System.out.println( UIManager.getColor( FlatIconColors.ACTIONS_GREY.key ) );
|
|
||||||
frame.showFrame( FlatExtrasTest::new );
|
frame.showFrame( FlatExtrasTest::new );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
@@ -109,7 +107,8 @@ public class FlatExtrasTest
|
|||||||
|
|
||||||
//---- triStateLabel1 ----
|
//---- triStateLabel1 ----
|
||||||
triStateLabel1.setText("text");
|
triStateLabel1.setText("text");
|
||||||
add(triStateLabel1, "cell 2 0");
|
triStateLabel1.setEnabled(false);
|
||||||
|
add(triStateLabel1, "cell 2 0,gapx 30");
|
||||||
|
|
||||||
//---- triStateCheckBox2 ----
|
//---- triStateCheckBox2 ----
|
||||||
triStateCheckBox2.setText("third state disabled");
|
triStateCheckBox2.setText("third state disabled");
|
||||||
@@ -119,7 +118,8 @@ public class FlatExtrasTest
|
|||||||
|
|
||||||
//---- triStateLabel2 ----
|
//---- triStateLabel2 ----
|
||||||
triStateLabel2.setText("text");
|
triStateLabel2.setText("text");
|
||||||
add(triStateLabel2, "cell 2 1");
|
triStateLabel2.setEnabled(false);
|
||||||
|
add(triStateLabel2, "cell 2 1,gapx 30");
|
||||||
|
|
||||||
//---- label2 ----
|
//---- label2 ----
|
||||||
label2.setText("SVG Icons:");
|
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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -25,8 +25,9 @@ new FormModel {
|
|||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "triStateLabel1"
|
name: "triStateLabel1"
|
||||||
"text": "text"
|
"text": "text"
|
||||||
|
"enabled": false
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, 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" ) {
|
add( new FormComponent( "com.formdev.flatlaf.extras.TriStateCheckBox" ) {
|
||||||
name: "triStateCheckBox2"
|
name: "triStateCheckBox2"
|
||||||
@@ -39,8 +40,9 @@ new FormModel {
|
|||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "triStateLabel2"
|
name: "triStateLabel2"
|
||||||
"text": "text"
|
"text": "text"
|
||||||
|
"enabled": false
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 1"
|
"value": "cell 2 1,gapx 30"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "label2"
|
name: "label2"
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ import javax.swing.plaf.UIResource;
|
|||||||
import javax.swing.plaf.basic.BasicLookAndFeel;
|
import javax.swing.plaf.basic.BasicLookAndFeel;
|
||||||
import com.formdev.flatlaf.*;
|
import com.formdev.flatlaf.*;
|
||||||
import com.formdev.flatlaf.intellijthemes.FlatAllIJThemes;
|
import com.formdev.flatlaf.intellijthemes.FlatAllIJThemes;
|
||||||
|
import com.formdev.flatlaf.testing.FlatTestLaf;
|
||||||
import com.formdev.flatlaf.ui.FlatLineBorder;
|
import com.formdev.flatlaf.ui.FlatLineBorder;
|
||||||
import com.formdev.flatlaf.util.ColorFunctions.ColorFunction;
|
import com.formdev.flatlaf.util.ColorFunctions.ColorFunction;
|
||||||
import com.formdev.flatlaf.util.ColorFunctions.HSLIncreaseDecrease;
|
import com.formdev.flatlaf.util.ColorFunctions.HSLIncreaseDecrease;
|
||||||
@@ -96,6 +97,8 @@ public class UIDefaultsDump
|
|||||||
dump( FlatDarculaLaf.class.getName(), dir );
|
dump( FlatDarculaLaf.class.getName(), dir );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dump( FlatTestLaf.class.getName(), dir );
|
||||||
|
|
||||||
// dump( MyBasicLookAndFeel.class.getName(), dir );
|
// dump( MyBasicLookAndFeel.class.getName(), dir );
|
||||||
// dump( MetalLookAndFeel.class.getName(), dir );
|
// dump( MetalLookAndFeel.class.getName(), dir );
|
||||||
// dump( NimbusLookAndFeel.class.getName(), dir );
|
// dump( NimbusLookAndFeel.class.getName(), dir );
|
||||||
|
|||||||
@@ -16,19 +16,21 @@
|
|||||||
|
|
||||||
#---- variables ----
|
#---- variables ----
|
||||||
|
|
||||||
@background=#ccffcc
|
@background=#cfc
|
||||||
@foreground=#ff0000
|
@foreground=#f00
|
||||||
@selectionBackground=#00aa00
|
@selectionBackground=#0a0
|
||||||
@selectionForeground=#ffff00
|
@selectionForeground=#ff0
|
||||||
@selectionInactiveBackground=#888888
|
@selectionInactiveBackground=#888
|
||||||
@selectionInactiveForeground=#ffffff
|
@selectionInactiveForeground=#fff
|
||||||
@disabledText=#000088
|
@disabledText=#008
|
||||||
@textComponentBackground=#ffffff
|
@textComponentBackground=#fff
|
||||||
@menuBackground=#fff
|
@menuBackground=#fff
|
||||||
@menuHoverBackground=darken(@menuBackground,10%)
|
@menuHoverBackground=darken(@menuBackground,10%)
|
||||||
@menuCheckBackground=darken(@menuBackground,10%)
|
@menuCheckBackground=darken(@menuBackground,10%)
|
||||||
@menuCheckHoverBackground=darken(@menuBackground,20%)
|
@menuCheckHoverBackground=darken(@menuBackground,20%)
|
||||||
@cellFocusColor=#ff0000
|
@menuAcceleratorForeground=#f88
|
||||||
|
@menuAcceleratorSelectionForeground=#fff
|
||||||
|
@cellFocusColor=#f00
|
||||||
@icon=#afafaf
|
@icon=#afafaf
|
||||||
|
|
||||||
@dropCellBackground=#f00
|
@dropCellBackground=#f00
|
||||||
@@ -39,20 +41,10 @@
|
|||||||
|
|
||||||
#---- globals ----
|
#---- globals ----
|
||||||
|
|
||||||
*.background=@background
|
*.caretForeground=#00f
|
||||||
*.foreground=@foreground
|
|
||||||
*.textBackground=#ccffcc
|
|
||||||
*.textForeground=#ff0000
|
|
||||||
*.caretForeground=#0000ff
|
|
||||||
*.inactiveBackground=#f0f0f0
|
*.inactiveBackground=#f0f0f0
|
||||||
*.inactiveForeground=#000088
|
*.inactiveForeground=#008
|
||||||
*.selectionBackground=@selectionBackground
|
|
||||||
*.selectionForeground=@selectionForeground
|
|
||||||
*.disabledBackground=#e0e0e0
|
*.disabledBackground=#e0e0e0
|
||||||
*.disabledForeground=@disabledText
|
|
||||||
*.disabledText=@disabledText
|
|
||||||
*.acceleratorForeground=#ff8888
|
|
||||||
*.acceleratorSelectionForeground=#ffffff
|
|
||||||
|
|
||||||
|
|
||||||
#---- system colors ----
|
#---- system colors ----
|
||||||
@@ -69,40 +61,40 @@ controlDkShadow=#696969
|
|||||||
|
|
||||||
Button.startBackground=#fff
|
Button.startBackground=#fff
|
||||||
Button.endBackground=#bbb
|
Button.endBackground=#bbb
|
||||||
Button.focusedBackground=#00ffff
|
Button.focusedBackground=#0ff
|
||||||
Button.hoverBackground=#ffff00
|
Button.hoverBackground=#ff0
|
||||||
Button.pressedBackground=#FFC800
|
Button.pressedBackground=#FFC800
|
||||||
|
|
||||||
Button.startBorderColor=#00f
|
Button.startBorderColor=#00f
|
||||||
Button.endBorderColor=#f00
|
Button.endBorderColor=#f00
|
||||||
Button.disabledBorderColor=#000088
|
Button.disabledBorderColor=#008
|
||||||
Button.focusedBorderColor=#466d94
|
Button.focusedBorderColor=#466d94
|
||||||
Button.hoverBorderColor=#ff0000
|
Button.hoverBorderColor=#f00
|
||||||
|
|
||||||
Button.default.startBackground=#ddd
|
Button.default.startBackground=#ddd
|
||||||
Button.default.endBackground=#888
|
Button.default.endBackground=#888
|
||||||
Button.default.foreground=#880000
|
Button.default.foreground=#800
|
||||||
Button.default.focusedBackground=#00ffff
|
Button.default.focusedBackground=#0ff
|
||||||
Button.default.hoverBackground=#ffff00
|
Button.default.hoverBackground=#ff0
|
||||||
Button.default.pressedBackground=#FFC800
|
Button.default.pressedBackground=#FFC800
|
||||||
Button.default.startBorderColor=#f00
|
Button.default.startBorderColor=#f00
|
||||||
Button.default.endBorderColor=#00f
|
Button.default.endBorderColor=#00f
|
||||||
Button.default.hoverBorderColor=#ff0000
|
Button.default.hoverBorderColor=#f00
|
||||||
Button.default.focusedBorderColor=#537699
|
Button.default.focusedBorderColor=#537699
|
||||||
Button.default.focusColor=#ff0000
|
Button.default.focusColor=#f00
|
||||||
|
|
||||||
Button.toolbar.hoverBackground=#ffffff
|
Button.toolbar.hoverBackground=#fff
|
||||||
Button.toolbar.pressedBackground=#eeeeee
|
Button.toolbar.pressedBackground=#eee
|
||||||
|
|
||||||
|
|
||||||
#---- CheckBox ----
|
#---- CheckBox ----
|
||||||
|
|
||||||
# enabled
|
# enabled
|
||||||
CheckBox.icon.borderColor=#878787
|
CheckBox.icon.borderColor=#878787
|
||||||
CheckBox.icon.background=#FFFFFF
|
CheckBox.icon.background=#fff
|
||||||
CheckBox.icon.selectedBorderColor=#4982CC
|
CheckBox.icon.selectedBorderColor=#4982CC
|
||||||
CheckBox.icon.selectedBackground=#4D89C9
|
CheckBox.icon.selectedBackground=#4D89C9
|
||||||
CheckBox.icon.checkmarkColor=#FFFFFF
|
CheckBox.icon.checkmarkColor=#fff
|
||||||
|
|
||||||
# disabled
|
# disabled
|
||||||
CheckBox.icon.disabledBorderColor=#BDBDBD
|
CheckBox.icon.disabledBorderColor=#BDBDBD
|
||||||
@@ -111,12 +103,12 @@ CheckBox.icon.disabledCheckmarkColor=#ABABAB
|
|||||||
|
|
||||||
# focused
|
# focused
|
||||||
CheckBox.icon.focusedBorderColor=#7B9FC7
|
CheckBox.icon.focusedBorderColor=#7B9FC7
|
||||||
CheckBox.icon.focusedBackground=#00ffff
|
CheckBox.icon.focusedBackground=#0ff
|
||||||
CheckBox.icon.selectedFocusedBorderColor=#ACCFF7
|
CheckBox.icon.selectedFocusedBorderColor=#ACCFF7
|
||||||
|
|
||||||
# hover
|
# hover
|
||||||
CheckBox.icon.hoverBorderColor=#ff0000
|
CheckBox.icon.hoverBorderColor=#f00
|
||||||
CheckBox.icon.hoverBackground=#ffff00
|
CheckBox.icon.hoverBackground=#ff0
|
||||||
|
|
||||||
# pressed
|
# pressed
|
||||||
CheckBox.icon.pressedBackground=#FFC800
|
CheckBox.icon.pressedBackground=#FFC800
|
||||||
@@ -124,18 +116,18 @@ CheckBox.icon.pressedBackground=#FFC800
|
|||||||
|
|
||||||
#---- ComboBox ----
|
#---- ComboBox ----
|
||||||
|
|
||||||
ComboBox.background=#ffffff
|
ComboBox.background=#fff
|
||||||
ComboBox.buttonBackground=#f0f0f0
|
ComboBox.buttonBackground=#f0f0f0
|
||||||
ComboBox.buttonEditableBackground=#cccccc
|
ComboBox.buttonEditableBackground=#ccc
|
||||||
ComboBox.buttonArrowColor=#666666
|
ComboBox.buttonArrowColor=#666
|
||||||
ComboBox.buttonDisabledArrowColor=#ABABAB
|
ComboBox.buttonDisabledArrowColor=#ABABAB
|
||||||
ComboBox.buttonHoverArrowColor=#ff0000
|
ComboBox.buttonHoverArrowColor=#f00
|
||||||
|
|
||||||
|
|
||||||
#---- Component ----
|
#---- Component ----
|
||||||
|
|
||||||
Component.borderColor=#ff0000
|
Component.borderColor=#f00
|
||||||
Component.disabledBorderColor=#000088
|
Component.disabledBorderColor=#008
|
||||||
Component.focusedBorderColor=#466d94
|
Component.focusedBorderColor=#466d94
|
||||||
Component.focusColor=#97c3f3
|
Component.focusColor=#97c3f3
|
||||||
#Component.focusWidth=5
|
#Component.focusWidth=5
|
||||||
@@ -155,7 +147,7 @@ DesktopIcon.background=darken($Desktop.background,20%)
|
|||||||
|
|
||||||
#---- HelpButton ----
|
#---- HelpButton ----
|
||||||
|
|
||||||
HelpButton.questionMarkColor=#0000ff
|
HelpButton.questionMarkColor=#00f
|
||||||
|
|
||||||
|
|
||||||
#---- InternalFrame ----
|
#---- InternalFrame ----
|
||||||
@@ -178,16 +170,16 @@ InternalFrame.closePressedForeground=#fff
|
|||||||
|
|
||||||
#---- Label ----
|
#---- Label ----
|
||||||
|
|
||||||
Label.foreground=#008800
|
Label.foreground=#080
|
||||||
Label.disabledForeground=#000088
|
Label.disabledForeground=#008
|
||||||
|
|
||||||
|
|
||||||
#---- List ----
|
#---- List ----
|
||||||
|
|
||||||
List.background=#f0ffff
|
List.background=#f0ffff
|
||||||
List.cellNoFocusBorder=1,6,1,6
|
List.cellNoFocusBorder=1,6,1,6
|
||||||
List.focusSelectedCellHighlightBorder=1,6,1,6,#880000
|
List.focusSelectedCellHighlightBorder=1,6,1,6,#800
|
||||||
List.focusCellHighlightBorder=1,6,1,6,#880000
|
List.focusCellHighlightBorder=1,6,1,6,#800
|
||||||
|
|
||||||
|
|
||||||
#---- Menu ----
|
#---- Menu ----
|
||||||
@@ -198,7 +190,7 @@ Menu.icon.disabledArrowColor=#ABABAB
|
|||||||
|
|
||||||
#---- MenuBar ----
|
#---- MenuBar ----
|
||||||
|
|
||||||
MenuBar.borderColor=#4444ff
|
MenuBar.borderColor=#44f
|
||||||
MenuBar.hoverBackground=#fdd
|
MenuBar.hoverBackground=#fdd
|
||||||
|
|
||||||
|
|
||||||
@@ -210,14 +202,14 @@ MenuItemCheckBox.icon.disabledCheckmarkColor=#ABABAB
|
|||||||
|
|
||||||
#---- OptionPane ----
|
#---- OptionPane ----
|
||||||
|
|
||||||
OptionPane.background=#ffdddd
|
OptionPane.background=#fdd
|
||||||
OptionPane.foreground=#ff0000
|
OptionPane.foreground=#f00
|
||||||
|
|
||||||
OptionPane.icon.errorColor=#ff0000
|
OptionPane.icon.errorColor=#f00
|
||||||
OptionPane.icon.informationColor=#00ff00
|
OptionPane.icon.informationColor=#0f0
|
||||||
OptionPane.icon.questionColor=#0000ff
|
OptionPane.icon.questionColor=#00f
|
||||||
OptionPane.icon.warningColor=#ffcc00
|
OptionPane.icon.warningColor=#fc0
|
||||||
OptionPane.icon.foreground=#ffffff
|
OptionPane.icon.foreground=#fff
|
||||||
|
|
||||||
|
|
||||||
#---- Popup ----
|
#---- Popup ----
|
||||||
@@ -229,7 +221,7 @@ Popup.dropShadowInsets=-6,6,6,6
|
|||||||
|
|
||||||
#---- PopupMenu ----
|
#---- PopupMenu ----
|
||||||
|
|
||||||
PopupMenu.borderColor=#0000ff
|
PopupMenu.borderColor=#00f
|
||||||
|
|
||||||
|
|
||||||
#---- PopupMenuSeparator ----
|
#---- PopupMenuSeparator ----
|
||||||
@@ -241,24 +233,24 @@ PopupMenuSeparator.stripeIndent=1
|
|||||||
|
|
||||||
#---- ProgressBar ----
|
#---- ProgressBar ----
|
||||||
|
|
||||||
ProgressBar.background=#88ff88
|
ProgressBar.background=#8f8
|
||||||
ProgressBar.foreground=#73737333
|
ProgressBar.foreground=#73737333
|
||||||
ProgressBar.selectionForeground=#ff0000
|
ProgressBar.selectionForeground=#f00
|
||||||
ProgressBar.selectionBackground=#000088
|
ProgressBar.selectionBackground=#008
|
||||||
ProgressBar.cycleTime=10000
|
ProgressBar.cycleTime=10000
|
||||||
|
|
||||||
|
|
||||||
#---- ScrollBar ----
|
#---- ScrollBar ----
|
||||||
|
|
||||||
ScrollBar.track=#88ff88
|
ScrollBar.track=#8f8
|
||||||
ScrollBar.thumb=#73737333
|
ScrollBar.thumb=#73737333
|
||||||
ScrollBar.hoverTrackColor=#00ff00
|
ScrollBar.hoverTrackColor=#0f0
|
||||||
ScrollBar.hoverThumbColor=#ff0000
|
ScrollBar.hoverThumbColor=#f00
|
||||||
|
|
||||||
|
|
||||||
#---- Separator ----
|
#---- Separator ----
|
||||||
|
|
||||||
Separator.foreground=#00bb00
|
Separator.foreground=#0b0
|
||||||
Separator.height=20
|
Separator.height=20
|
||||||
Separator.stripeWidth=10
|
Separator.stripeWidth=10
|
||||||
Separator.stripeIndent=5
|
Separator.stripeIndent=5
|
||||||
@@ -266,54 +258,54 @@ Separator.stripeIndent=5
|
|||||||
|
|
||||||
#---- Slider ----
|
#---- Slider ----
|
||||||
|
|
||||||
Slider.trackColor=#00bb00
|
Slider.trackColor=#0b0
|
||||||
Slider.thumbColor=#880000
|
Slider.thumbColor=#800
|
||||||
Slider.tickColor=#ff0000
|
Slider.tickColor=#f00
|
||||||
Slider.focusedColor=$Component.focusColor
|
Slider.focusedColor=$Component.focusColor
|
||||||
Slider.hoverColor=#0000ff
|
Slider.hoverColor=#00f
|
||||||
Slider.disabledForeground=#000088
|
Slider.disabledForeground=#008
|
||||||
|
|
||||||
|
|
||||||
#---- SplitPane ----
|
#---- SplitPane ----
|
||||||
|
|
||||||
SplitPaneDivider.draggingColor=#880000
|
SplitPaneDivider.draggingColor=#800
|
||||||
SplitPaneDivider.oneTouchArrowColor=#00ff00
|
SplitPaneDivider.oneTouchArrowColor=#0f0
|
||||||
SplitPaneDivider.oneTouchHoverArrowColor=#ff0000
|
SplitPaneDivider.oneTouchHoverArrowColor=#f00
|
||||||
|
|
||||||
|
|
||||||
#---- TabbedPane ----
|
#---- TabbedPane ----
|
||||||
|
|
||||||
TabbedPane.disabledForeground=#777777
|
TabbedPane.disabledForeground=#777
|
||||||
TabbedPane.selectedBackground=#0f0
|
TabbedPane.selectedBackground=#0f0
|
||||||
TabbedPane.selectedForeground=#00f
|
TabbedPane.selectedForeground=#00f
|
||||||
TabbedPane.underlineColor=#4A88C7
|
TabbedPane.underlineColor=#4A88C7
|
||||||
TabbedPane.disabledUnderlineColor=#7a7a7a
|
TabbedPane.disabledUnderlineColor=#7a7a7a
|
||||||
TabbedPane.hoverColor=#eeeeee
|
TabbedPane.hoverColor=#eee
|
||||||
TabbedPane.focusColor=#dddddd
|
TabbedPane.focusColor=#ddd
|
||||||
TabbedPane.tabSeparatorColor=#00f
|
TabbedPane.tabSeparatorColor=#00f
|
||||||
TabbedPane.contentAreaColor=#bbbbbb
|
TabbedPane.contentAreaColor=#bbb
|
||||||
|
|
||||||
|
|
||||||
#---- Table ----
|
#---- Table ----
|
||||||
|
|
||||||
Table.rowHeight=25
|
Table.rowHeight=25
|
||||||
Table.background=#fffff0
|
Table.background=#fffff0
|
||||||
Table.sortIconColor=#ffff00
|
Table.sortIconColor=#ff0
|
||||||
Table.gridColor=#00ffff
|
Table.gridColor=#0ff
|
||||||
|
|
||||||
|
|
||||||
#---- TableHeader ----
|
#---- TableHeader ----
|
||||||
|
|
||||||
TableHeader.background=#4444ff
|
TableHeader.background=#44f
|
||||||
TableHeader.foreground=#ffffff
|
TableHeader.foreground=#fff
|
||||||
TableHeader.separatorColor=#00ff00
|
TableHeader.separatorColor=#0f0
|
||||||
TableHeader.bottomSeparatorColor=#00ff00
|
TableHeader.bottomSeparatorColor=#0f0
|
||||||
|
|
||||||
|
|
||||||
#---- TitledBorder ----
|
#---- TitledBorder ----
|
||||||
|
|
||||||
TitledBorder.titleColor=#ff00ff
|
TitledBorder.titleColor=#f0f
|
||||||
TitledBorder.border=1,1,1,1,#ff00ff
|
TitledBorder.border=1,1,1,1,#f0f
|
||||||
|
|
||||||
|
|
||||||
#---- TitlePane ----
|
#---- TitlePane ----
|
||||||
@@ -326,27 +318,27 @@ TitlePane.inactiveForeground=#fff
|
|||||||
|
|
||||||
#---- ToggleButton ----
|
#---- ToggleButton ----
|
||||||
|
|
||||||
ToggleButton.background=#ddddff
|
ToggleButton.background=#ddf
|
||||||
ToggleButton.selectedBackground=#44ff44
|
ToggleButton.selectedBackground=#4f4
|
||||||
ToggleButton.selectedForeground=#000000
|
ToggleButton.selectedForeground=#000
|
||||||
ToggleButton.disabledSelectedBackground=#44dd44
|
ToggleButton.disabledSelectedBackground=#4d4
|
||||||
|
|
||||||
ToggleButton.focusedBackground=#00ffff
|
ToggleButton.focusedBackground=#0ff
|
||||||
ToggleButton.hoverBackground=#ffff00
|
ToggleButton.hoverBackground=#ff0
|
||||||
ToggleButton.pressedBackground=#FFC800
|
ToggleButton.pressedBackground=#FFC800
|
||||||
|
|
||||||
ToggleButton.toolbar.selectedBackground=#dddddd
|
ToggleButton.toolbar.selectedBackground=#ddd
|
||||||
|
|
||||||
|
|
||||||
#---- ToolTip ----
|
#---- ToolTip ----
|
||||||
|
|
||||||
ToolTip.background=#eeeeff
|
ToolTip.background=#eef
|
||||||
|
|
||||||
|
|
||||||
#---- Tree ----
|
#---- Tree ----
|
||||||
|
|
||||||
Tree.background=#fff0ff
|
Tree.background=#fff0ff
|
||||||
Tree.paintLines=true
|
Tree.paintLines=true
|
||||||
Tree.hash=#ff0000
|
Tree.hash=#f00
|
||||||
Tree.editorBorder=1,1,1,1,#f00
|
Tree.editorBorder=1,1,1,1,#f00
|
||||||
Tree.editorBorderSelectionColor=#00f
|
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 ----
|
#---- BusyLabel ----
|
||||||
|
|
||||||
JXBusyLabel.baseColor=#00ff00
|
JXBusyLabel.baseColor=#0f0
|
||||||
JXBusyLabel.highlightColor=#ff0000
|
JXBusyLabel.highlightColor=#f00
|
||||||
|
|
||||||
|
|
||||||
#---- Header ----
|
#---- Header ----
|
||||||
|
|
||||||
JXHeader.background=#ff8888
|
JXHeader.background=#f88
|
||||||
JXHeader.startBackground=#ffcccc
|
JXHeader.startBackground=#fcc
|
||||||
JXHeader.titleForeground=#0000ff
|
JXHeader.titleForeground=#00f
|
||||||
JXHeader.descriptionForeground=#ff0000
|
JXHeader.descriptionForeground=#f00
|
||||||
|
|
||||||
|
|
||||||
#---- Hyperlink ----
|
#---- Hyperlink ----
|
||||||
|
|
||||||
Hyperlink.linkColor=#ff0000
|
Hyperlink.linkColor=#f00
|
||||||
Hyperlink.visitedColor=#0000ff
|
Hyperlink.visitedColor=#00f
|
||||||
Hyperlink.disabledText=#000088
|
Hyperlink.disabledText=#008
|
||||||
|
|
||||||
|
|
||||||
#---- MonthView ----
|
#---- MonthView ----
|
||||||
|
|
||||||
JXMonthView.background=@textComponentBackground
|
JXMonthView.background=@textComponentBackground
|
||||||
JXMonthView.monthStringBackground=#00ff00
|
JXMonthView.monthStringBackground=#0f0
|
||||||
JXMonthView.monthStringForeground=#0000ff
|
JXMonthView.monthStringForeground=#00f
|
||||||
JXMonthView.daysOfTheWeekForeground=#00ff00
|
JXMonthView.daysOfTheWeekForeground=#0f0
|
||||||
JXMonthView.weekOfTheYearForeground=#0000ff
|
JXMonthView.weekOfTheYearForeground=#00f
|
||||||
JXMonthView.unselectableDayForeground=#0000ff
|
JXMonthView.unselectableDayForeground=#00f
|
||||||
JXMonthView.selectedBackground=#aaffaa
|
JXMonthView.selectedBackground=#afa
|
||||||
JXMonthView.flaggedDayForeground=#00ffff
|
JXMonthView.flaggedDayForeground=#0ff
|
||||||
JXMonthView.leadingDayForeground=#c0c0c0
|
JXMonthView.leadingDayForeground=#c0c0c0
|
||||||
JXMonthView.trailingDayForeground=#c0c0c0
|
JXMonthView.trailingDayForeground=#c0c0c0
|
||||||
JXMonthView.arrowColor=#0000ff
|
JXMonthView.arrowColor=#00f
|
||||||
JXMonthView.disabledArrowColor=#ABABAB
|
JXMonthView.disabledArrowColor=#ABABAB
|
||||||
|
|
||||||
|
|
||||||
#---- TaskPaneContainer ----
|
#---- TaskPaneContainer ----
|
||||||
|
|
||||||
TaskPaneContainer.background=#ff8888
|
TaskPaneContainer.background=#f88
|
||||||
TaskPaneContainer.border=10,10,10,10
|
TaskPaneContainer.border=10,10,10,10
|
||||||
|
|
||||||
|
|
||||||
#---- TaskPane ----
|
#---- TaskPane ----
|
||||||
|
|
||||||
TaskPane.background=#00ff00
|
TaskPane.background=#0f0
|
||||||
TaskPane.borderColor=#0000ff
|
TaskPane.borderColor=#00f
|
||||||
TaskPane.contentInsets=10,10,10,10
|
TaskPane.contentInsets=10,10,10,10
|
||||||
|
|
||||||
TaskPane.titleBackgroundGradientStart=#ffff00
|
TaskPane.titleBackgroundGradientStart=#ff0
|
||||||
TaskPane.titleForeground=#ff00ff
|
TaskPane.titleForeground=#f0f
|
||||||
TaskPane.titleOver=#0000aa
|
TaskPane.titleOver=#00a
|
||||||
TaskPane.specialTitleBackground=#00ffff
|
TaskPane.specialTitleBackground=#0ff
|
||||||
TaskPane.specialTitleForeground=#444444
|
TaskPane.specialTitleForeground=#444
|
||||||
TaskPane.specialTitleOver=#dd0000
|
TaskPane.specialTitleOver=#d00
|
||||||
|
|
||||||
|
|
||||||
#---- TitledPanel ----
|
#---- TitledPanel ----
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ Button.default.pressedBackground #3f6796 com.formdev.flatlaf.util.DerivedColo
|
|||||||
Button.defaultButtonFollowsFocus true
|
Button.defaultButtonFollowsFocus true
|
||||||
Button.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
Button.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||||
Button.disabledBorderColor #5e6060 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.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI]
|
||||||
Button.font [active] $defaultFont [UI]
|
Button.font [active] $defaultFont [UI]
|
||||||
Button.foreground #bbbbbb javax.swing.plaf.ColorUIResource [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.minimumWidth 72
|
||||||
Button.pressedBackground #5b5f62 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse)
|
Button.pressedBackground #5b5f62 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse)
|
||||||
Button.rollover true
|
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.shadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||||
Button.textIconGap 4
|
Button.textIconGap 4
|
||||||
Button.textShiftOffset 0
|
Button.textShiftOffset 0
|
||||||
Button.toolbar.hoverBackground #4e5355 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse)
|
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.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.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]
|
Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
ButtonUI com.formdev.flatlaf.ui.FlatButtonUI
|
ButtonUI com.formdev.flatlaf.ui.FlatButtonUI
|
||||||
|
|
||||||
@@ -113,7 +117,7 @@ Caret.width [active] 1
|
|||||||
CheckBox.arc 4
|
CheckBox.arc 4
|
||||||
CheckBox.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
CheckBox.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||||
CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [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.font [active] $defaultFont [UI]
|
||||||
CheckBox.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
CheckBox.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
CheckBox.icon.background #43494a 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.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI]
|
||||||
CheckBoxMenuItem.borderPainted true
|
CheckBoxMenuItem.borderPainted true
|
||||||
CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI]
|
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.font [active] $defaultFont [UI]
|
||||||
CheckBoxMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
CheckBoxMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [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.buttonShadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||||
ComboBox.buttonStyle auto
|
ComboBox.buttonStyle auto
|
||||||
ComboBox.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
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.editorColumns 0
|
||||||
ComboBox.font [active] $defaultFont [UI]
|
ComboBox.font [active] $defaultFont [UI]
|
||||||
ComboBox.foreground #bbbbbb javax.swing.plaf.ColorUIResource [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.font [active] $defaultFont [UI]
|
||||||
EditorPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
EditorPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
EditorPane.inactiveBackground #3c3f41 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.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
EditorPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
EditorPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||||
EditorPane.selectionForeground #bbbbbb 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.font [active] $defaultFont [UI]
|
||||||
FormattedTextField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
FormattedTextField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
FormattedTextField.inactiveBackground #3c3f41 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.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.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||||
FormattedTextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
FormattedTextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI
|
FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI
|
||||||
@@ -335,7 +339,7 @@ HelpButton.questionMarkColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI]
|
|||||||
|
|
||||||
#---- Hyperlink ----
|
#---- 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.linkColor #589df6 javax.swing.plaf.ColorUIResource [UI]
|
||||||
Hyperlink.visitedColor #589df6 javax.swing.plaf.ColorUIResource [UI]
|
Hyperlink.visitedColor #589df6 javax.swing.plaf.ColorUIResource [UI]
|
||||||
HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI
|
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.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
InternalFrame.inactiveDropShadowOpacity 0.75
|
InternalFrame.inactiveDropShadowOpacity 0.75
|
||||||
InternalFrame.inactiveTitleBackground #303234 javax.swing.plaf.ColorUIResource [UI]
|
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.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI]
|
||||||
InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI]
|
InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI]
|
||||||
InternalFrame.titleFont [active] $defaultFont [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.arrowColor #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
JXMonthView.background #45494a javax.swing.plaf.ColorUIResource [UI]
|
JXMonthView.background #45494a javax.swing.plaf.ColorUIResource [UI]
|
||||||
JXMonthView.daysOfTheWeekForeground #aaaaaa 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.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.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI]
|
||||||
JXMonthView.monthStringBackground #4c5052 javax.swing.plaf.ColorUIResource [UI]
|
JXMonthView.monthStringBackground #4c5052 javax.swing.plaf.ColorUIResource [UI]
|
||||||
JXMonthView.monthStringForeground #bbbbbb 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.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI]
|
||||||
JXMonthView.selectedBackground #4b6eaf javax.swing.plaf.ColorUIResource [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.unselectableDayForeground #e05555 javax.swing.plaf.ColorUIResource [UI]
|
||||||
JXMonthView.weekOfTheYearForeground #888888 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 ----
|
||||||
|
|
||||||
Label.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
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.disabledShadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||||
Label.font [active] $defaultFont [UI]
|
Label.font [active] $defaultFont [UI]
|
||||||
Label.foreground #bbbbbb javax.swing.plaf.ColorUIResource [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.borderPainted true
|
||||||
Menu.cancelMode hideLastSubmenu
|
Menu.cancelMode hideLastSubmenu
|
||||||
Menu.crossMenuMnemonic true
|
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.font [active] $defaultFont [UI]
|
||||||
Menu.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
Menu.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
Menu.icon.arrowColor #a7a7a7 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.borderPainted true
|
||||||
MenuItem.checkBackground #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse)
|
MenuItem.checkBackground #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse)
|
||||||
MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI]
|
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.font [active] $defaultFont [UI]
|
||||||
MenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
MenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
MenuItem.iconTextGap 6
|
MenuItem.iconTextGap 6
|
||||||
@@ -643,11 +647,12 @@ PasswordField.echoChar '\u2022'
|
|||||||
PasswordField.font [active] $defaultFont [UI]
|
PasswordField.font [active] $defaultFont [UI]
|
||||||
PasswordField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
PasswordField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
PasswordField.inactiveBackground #3c3f41 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.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.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||||
PasswordField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
PasswordField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
|
PasswordField.showCapsLock true
|
||||||
PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI
|
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.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||||
RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI]
|
RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI]
|
||||||
RadioButton.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [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.font [active] $defaultFont [UI]
|
||||||
RadioButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
RadioButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
RadioButton.highlight #242424 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.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI]
|
||||||
RadioButtonMenuItem.borderPainted true
|
RadioButtonMenuItem.borderPainted true
|
||||||
RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI]
|
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.font [active] $defaultFont [UI]
|
||||||
RadioButtonMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
RadioButtonMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [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.buttonHoverArrowColor #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
Spinner.buttonStyle button
|
Spinner.buttonStyle button
|
||||||
Spinner.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
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.editorAlignment 11
|
||||||
Spinner.editorBorderPainted false
|
Spinner.editorBorderPainted false
|
||||||
Spinner.font [active] $defaultFont [UI]
|
Spinner.font [active] $defaultFont [UI]
|
||||||
@@ -904,7 +909,7 @@ TabbedPane.contentAreaColor #323232 javax.swing.plaf.ColorUIResource [UI]
|
|||||||
TabbedPane.contentOpaque true
|
TabbedPane.contentOpaque true
|
||||||
TabbedPane.contentSeparatorHeight 1
|
TabbedPane.contentSeparatorHeight 1
|
||||||
TabbedPane.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI]
|
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.disabledUnderlineColor #7a7a7a javax.swing.plaf.ColorUIResource [UI]
|
||||||
TabbedPane.focus #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
TabbedPane.focus #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
TabbedPane.focusColor #3d4b5c 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.font [active] $defaultFont [UI]
|
||||||
TextArea.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
TextArea.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextArea.inactiveBackground #3c3f41 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.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
TextArea.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
TextArea.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextArea.selectionForeground #bbbbbb 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.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextField.highlight #242424 javax.swing.plaf.ColorUIResource [UI]
|
TextField.highlight #242424 javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextField.inactiveBackground #3c3f41 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.light #313131 javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [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.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
TextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextField.shadow #646464 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.font [active] $defaultFont [UI]
|
||||||
TextPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
TextPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextPane.inactiveBackground #3c3f41 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.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
TextPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
TextPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||||
TextPane.selectionForeground #bbbbbb 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.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI]
|
||||||
TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI]
|
TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI]
|
||||||
TitlePane.inactiveBackground #303234 javax.swing.plaf.ColorUIResource [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.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI]
|
||||||
TitlePane.menuBarEmbedded true
|
TitlePane.menuBarEmbedded true
|
||||||
TitlePane.menuBarMargins 0,8,0,22 javax.swing.plaf.InsetsUIResource [UI]
|
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.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI]
|
||||||
ToggleButton.disabledBackground #3c3f41 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.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.font [active] $defaultFont [UI]
|
||||||
ToggleButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
ToggleButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
ToggleButton.highlight #242424 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.dockingBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||||
ToolBar.dockingForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
ToolBar.dockingForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
ToolBar.floatingBackground #3c3f41 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.font [active] $defaultFont [UI]
|
||||||
ToolBar.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
ToolBar.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
ToolBar.gripColor #adadad 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]
|
text #45494a javax.swing.plaf.ColorUIResource [UI]
|
||||||
textHighlight #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
textHighlight #4b6eaf javax.swing.plaf.ColorUIResource [UI]
|
||||||
textHighlightText #bbbbbb 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]
|
textText #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||||
window #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
window #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||||
windowBorder #bbbbbb 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.defaultButtonFollowsFocus true
|
||||||
Button.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
|
Button.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
|
||||||
Button.disabledBorderColor #cfcfcf 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.disabledText #8c8c8c javax.swing.plaf.ColorUIResource [UI]
|
||||||
Button.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI]
|
Button.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI]
|
||||||
Button.focusedBorderColor #87afda 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.minimumWidth 72
|
||||||
Button.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse)
|
Button.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse)
|
||||||
Button.rollover true
|
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.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI]
|
||||||
Button.textIconGap 4
|
Button.textIconGap 4
|
||||||
Button.textShiftOffset 0
|
Button.textShiftOffset 0
|
||||||
Button.toolbar.hoverBackground #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse)
|
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.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.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]
|
Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
ButtonUI com.formdev.flatlaf.ui.FlatButtonUI
|
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.placeholderForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI]
|
||||||
PasswordField.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI]
|
PasswordField.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI]
|
||||||
PasswordField.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI]
|
PasswordField.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI]
|
||||||
|
PasswordField.showCapsLock true
|
||||||
PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI
|
PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -25,3 +25,29 @@ dependencies {
|
|||||||
implementation( "com.fifesoft:rsyntaxtextarea:3.1.1" )
|
implementation( "com.fifesoft:rsyntaxtextarea:3.1.1" )
|
||||||
implementation( "com.fifesoft:autocomplete:3.1.0" )
|
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 org.fife.ui.rsyntaxtextarea.FileLocation;
|
||||||
import com.formdev.flatlaf.FlatLightLaf;
|
import com.formdev.flatlaf.FlatLightLaf;
|
||||||
import com.formdev.flatlaf.extras.FlatInspector;
|
import com.formdev.flatlaf.extras.FlatInspector;
|
||||||
|
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
|
||||||
import com.formdev.flatlaf.util.UIScale;
|
import com.formdev.flatlaf.util.UIScale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,6 +52,7 @@ public class FlatThemeFileEditor
|
|||||||
SwingUtilities.invokeLater( () -> {
|
SwingUtilities.invokeLater( () -> {
|
||||||
FlatLightLaf.install();
|
FlatLightLaf.install();
|
||||||
FlatInspector.install( "ctrl alt shift X" );
|
FlatInspector.install( "ctrl alt shift X" );
|
||||||
|
FlatUIDefaultsInspector.install( "ctrl shift alt Y" );
|
||||||
|
|
||||||
FlatThemeFileEditor frame = new FlatThemeFileEditor();
|
FlatThemeFileEditor frame = new FlatThemeFileEditor();
|
||||||
|
|
||||||
@@ -85,7 +87,7 @@ public class FlatThemeFileEditor
|
|||||||
themeEditorArea = new FlatThemeEditorPane();
|
themeEditorArea = new FlatThemeEditorPane();
|
||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||||
setTitle("FlatLaf Theme Editor");
|
setTitle("FlatLaf Theme Editor");
|
||||||
Container contentPane = getContentPane();
|
Container contentPane = getContentPane();
|
||||||
contentPane.setLayout(new BorderLayout());
|
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 {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -7,7 +7,7 @@ new FormModel {
|
|||||||
name: "this"
|
name: "this"
|
||||||
"$locationPolicy": 2
|
"$locationPolicy": 2
|
||||||
"$sizePolicy": 2
|
"$sizePolicy": 2
|
||||||
"defaultCloseOperation": 2
|
"defaultCloseOperation": 3
|
||||||
"title": "FlatLaf Theme Editor"
|
"title": "FlatLaf Theme Editor"
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||||
name: "dialogPane"
|
name: "dialogPane"
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ Button.default.pressedBackground
|
|||||||
Button.defaultButtonFollowsFocus
|
Button.defaultButtonFollowsFocus
|
||||||
Button.disabledBackground
|
Button.disabledBackground
|
||||||
Button.disabledBorderColor
|
Button.disabledBorderColor
|
||||||
|
Button.disabledSelectedBackground
|
||||||
Button.disabledText
|
Button.disabledText
|
||||||
Button.focusInputMap
|
Button.focusInputMap
|
||||||
Button.focusedBackground
|
Button.focusedBackground
|
||||||
@@ -43,12 +44,15 @@ Button.margin
|
|||||||
Button.minimumWidth
|
Button.minimumWidth
|
||||||
Button.pressedBackground
|
Button.pressedBackground
|
||||||
Button.rollover
|
Button.rollover
|
||||||
|
Button.selectedBackground
|
||||||
|
Button.selectedForeground
|
||||||
Button.shadow
|
Button.shadow
|
||||||
Button.textIconGap
|
Button.textIconGap
|
||||||
Button.textShiftOffset
|
Button.textShiftOffset
|
||||||
Button.toolbar.hoverBackground
|
Button.toolbar.hoverBackground
|
||||||
Button.toolbar.margin
|
Button.toolbar.margin
|
||||||
Button.toolbar.pressedBackground
|
Button.toolbar.pressedBackground
|
||||||
|
Button.toolbar.selectedBackground
|
||||||
Button.toolbar.spacingInsets
|
Button.toolbar.spacingInsets
|
||||||
ButtonUI
|
ButtonUI
|
||||||
Caret.width
|
Caret.width
|
||||||
@@ -448,6 +452,7 @@ PasswordField.margin
|
|||||||
PasswordField.placeholderForeground
|
PasswordField.placeholderForeground
|
||||||
PasswordField.selectionBackground
|
PasswordField.selectionBackground
|
||||||
PasswordField.selectionForeground
|
PasswordField.selectionForeground
|
||||||
|
PasswordField.showCapsLock
|
||||||
PasswordFieldUI
|
PasswordFieldUI
|
||||||
Popup.dropShadowColor
|
Popup.dropShadowColor
|
||||||
Popup.dropShadowInsets
|
Popup.dropShadowInsets
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
BIN
images/arc_orange.png
Normal file
BIN
images/arc_orange.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user