Comments (8)
Tried also this solution in FlatLaf some days ago. This had some downsides. First was that FlatLaf.uninitialize()
was invoked from within FlatLaf.initialize()
. See stack trace:
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 165 in FlatLaf))
FlatLightLaf(FlatLaf).uninitialize() line: 165
UIManager.setLookAndFeel(LookAndFeel) line: 580
UIManager.setLookAndFeel(String) line: 633
FlatLightLaf(FlatLaf).getBase() line: 197
FlatLightLaf(FlatLaf).initialize() line: 115
UIManager.setLookAndFeel(LookAndFeel) line: 586
UIManager.setLookAndFeel(String) line: 633
DemoPrefs.initLaf(String[]) line: 69
FlatTestFrame.create(String[], String) line: 75
...
Next problem was that the active LaF (UIManager.getLookAndFeel()
) remains AquaLookAndFeel
, but with UI default values from FlatLaf. This was a mess...
But there is a better solution. Since Java 9 there is a new method UIManager.createLookAndFeel(String)
that allows creating installed LaFs by name.
This is what I'm using in FlatLaf now:
if( SystemInfo.IS_JAVA_9_OR_LATER ) {
Method m = UIManager.class.getMethod( "createLookAndFeel", String.class );
base = (BasicLookAndFeel) m.invoke( null, "Mac OS X" );
} else {
base = (BasicLookAndFeel) Class.forName( UIManager.getSystemLookAndFeelClassName() ).newInstance();
}
This works fine without any warning.
BTW congrats to the great DarkLaf launch. 👍
Glad that you decided to continue DarkLaf. Swing needs good modern up-to-date LaFs. The more the better. And many thanks for mentioning FlatLaf in your reddit announcement.
from darklaf.
Shouldn't occur anymore.
from darklaf.
I'm not sure how often Jigsaw is used, however, I guess that would be an error in a modular application.
What do you think of getting the instance via UIManager.getLookAndFeel()
?
from darklaf.
For instance:
final String systemLafClassName = UIManager.getSystemLookAndFeelClassName();
final LookAndFeel currentLaf = UIManager.getLookAndFeel();
if (systemLafClassName.equals(currentLaf.getClass().getName())) {
if (currentLaf instanceof BasicLookAndFeel) {
base = (BasicLookAndFeel) currentLaf;
} else {
base = new MetalLookAndFeel();
}
} else {
// Here can be a dance with UIManager.setLookAndFeel(systemLafClassName) + getLookAndFeel
try (ReflectiveWarningSuppressor sup = new ReflectiveWarningSuppressor()) {
final String name = UIManager.getSystemLookAndFeelClassName();
base = (BasicLookAndFeel) Class.forName(name).getDeclaredConstructor().newInstance();
}
}
from darklaf.
Yes this looks like a good solution. If --illegal-access=deny
is used the current LaF could still be used as a fallback option with a warning that the LaF might not behave as intended.
from darklaf.
the current LaF
What I mean is the following sequence seems to comply with --illegal-access=deny
:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
LookAndFeel systemLaf = UIManager.getLookAndFeel();
from darklaf.
Though a rather heavy operation probably the best solution. I checked the implementation of UIManager
and changing the Laf inside the constructor doesn't interfere with the Laf installation.
from darklaf.
Thanks for the insight. Though the issue you are describing stems from initializing the base laf in LookAndFeel#initalize
. Here the base laf is created in the constructor of DarkLaf
, so it actually happens before initialize
has been called.
BTW congrats to the great DarkLaf launch. 👍
Glad that you decided to continue DarkLaf. Swing needs good modern up-to-date LaFs.
The more the better. And many thanks for mentioning FlatLaf in your reddit announcement.
Thank you for the kind words :)
from darklaf.
Related Issues (20)
- Wiki Demo links not working. HOT 1
- temp files not deleted on Windows HOT 2
- Stackoverflow when setting the border of a spinner editor to an UIResource border
- Advice on how to contribute, Darklaf theme broken in JMeter 5.3, 5.4, 5.5 HOT 4
- JTree has some renderer bug HOT 3
- Event registered on EditorComponent for JComboBox will be cleared when new theme applied. HOT 3
- On a windows 10 computer,cannot open filechooser HOT 2
- JTabFrame custom PanelPopup buttons disappear after changing LaF settings HOT 1
- [Feature Request] JTabFrame disallow changing Alignment of the tabs.
- Buttons are "raised" in latest.integration (compared to 3.0.2)
- Can't build project on mac m1, 13.12.1 HOT 1
- Replace UIDefaultsWithResourceBundleCache with delegation
- [Feature Request] Allow confirm dialog on closing for ClosableTabbedPane without overwriting removeTabAt method
- [Bug] Exception when running on Windows Java 17 HOT 7
- [Bug] Opacity slider of JColorChooser has no effect
- [Feature Request] Apply color pipette with left-mouse click HOT 1
- [Bug] Wrong IconButton positioning in v3.0.3 HOT 2
- Dynamic colors in SVG icons don't work in native macOS menus
- [Feature Request] Frosted / Blurry background window support (Windows Acrylic / macOs: Vibrant) HOT 4
- Strange colors appearing in JColorChooser dialog
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from darklaf.