mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-13 07:17:13 -06:00
UI defaults inspector:
- update table if LaF was switched or F5 key pressed - added LaF name to window title - close window with ESC key
This commit is contained in:
@@ -18,6 +18,8 @@ package com.formdev.flatlaf.extras;
|
|||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -55,6 +57,9 @@ public class FlatUIDefaultsInspector
|
|||||||
|
|
||||||
private static FlatUIDefaultsInspector inspector;
|
private static FlatUIDefaultsInspector inspector;
|
||||||
|
|
||||||
|
private final String title;
|
||||||
|
private final PropertyChangeListener lafListener = this::lafChanged;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Installs a key listener into the application that allows enabling and disabling
|
* 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").
|
* the UI inspector with the given keystroke (e.g. "ctrl shift alt Y").
|
||||||
@@ -89,6 +94,9 @@ public class FlatUIDefaultsInspector
|
|||||||
private FlatUIDefaultsInspector() {
|
private FlatUIDefaultsInspector() {
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
||||||
|
title = frame.getTitle();
|
||||||
|
updateWindowTitle();
|
||||||
|
|
||||||
panel.setBorder( new ScaledEmptyBorder( 10, 10, 10, 10 ) );
|
panel.setBorder( new ScaledEmptyBorder( 10, 10, 10, 10 ) );
|
||||||
filterPanel.setBorder( new ScaledEmptyBorder( 0, 0, 10, 0 ) );
|
filterPanel.setBorder( new ScaledEmptyBorder( 0, 0, 10, 0 ) );
|
||||||
|
|
||||||
@@ -113,8 +121,7 @@ public class FlatUIDefaultsInspector
|
|||||||
delegateKey( KeyEvent.VK_PAGE_DOWN, "scrollDown" );
|
delegateKey( KeyEvent.VK_PAGE_DOWN, "scrollDown" );
|
||||||
|
|
||||||
// initialize table
|
// initialize table
|
||||||
Item[] items = getUIDefaultsItems();
|
table.setModel( new ItemsTableModel( getUIDefaultsItems() ) );
|
||||||
table.setModel( new ItemsTableModel( items ) );
|
|
||||||
table.setDefaultRenderer( String.class, new KeyRenderer() );
|
table.setDefaultRenderer( String.class, new KeyRenderer() );
|
||||||
table.setDefaultRenderer( Item.class, new ValueRenderer() );
|
table.setDefaultRenderer( Item.class, new ValueRenderer() );
|
||||||
|
|
||||||
@@ -142,6 +149,20 @@ public class FlatUIDefaultsInspector
|
|||||||
filterField.setText( filter );
|
filterField.setText( filter );
|
||||||
if( valueType != null )
|
if( valueType != null )
|
||||||
valueTypeField.setSelectedItem( valueType );
|
valueTypeField.setSelectedItem( valueType );
|
||||||
|
|
||||||
|
UIManager.addPropertyChangeListener( lafListener );
|
||||||
|
|
||||||
|
// 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 ) {
|
private void delegateKey( int keyCode, String actionKey ) {
|
||||||
@@ -161,6 +182,18 @@ public class FlatUIDefaultsInspector
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lafChanged( PropertyChangeEvent e ) {
|
||||||
|
if( "lookAndFeel".equals( e.getPropertyName() ) )
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void refresh() {
|
||||||
|
ItemsTableModel model = (ItemsTableModel) table.getModel();
|
||||||
|
model.setItems( getUIDefaultsItems() );
|
||||||
|
|
||||||
|
updateWindowTitle();
|
||||||
|
}
|
||||||
|
|
||||||
private Item[] getUIDefaultsItems() {
|
private Item[] getUIDefaultsItems() {
|
||||||
UIDefaults defaults = UIManager.getDefaults();
|
UIDefaults defaults = UIManager.getDefaults();
|
||||||
|
|
||||||
@@ -188,6 +221,10 @@ public class FlatUIDefaultsInspector
|
|||||||
return items.toArray( new Item[items.size()] );
|
return items.toArray( new Item[items.size()] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateWindowTitle() {
|
||||||
|
frame.setTitle( title + " - " + UIManager.getLookAndFeel().getName() );
|
||||||
|
}
|
||||||
|
|
||||||
private void saveWindowBounds() {
|
private void saveWindowBounds() {
|
||||||
Preferences prefs = getPrefs();
|
Preferences prefs = getPrefs();
|
||||||
prefs.putInt( "x", frame.getX() );
|
prefs.putInt( "x", frame.getX() );
|
||||||
@@ -205,6 +242,8 @@ public class FlatUIDefaultsInspector
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void windowClosed() {
|
private void windowClosed() {
|
||||||
|
UIManager.removePropertyChangeListener( lafListener );
|
||||||
|
|
||||||
inspector = null;
|
inspector = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,7 +314,7 @@ public class FlatUIDefaultsInspector
|
|||||||
|
|
||||||
//======== frame ========
|
//======== frame ========
|
||||||
{
|
{
|
||||||
frame.setTitle("UI Defaults");
|
frame.setTitle("UI Defaults Inspector");
|
||||||
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
frame.addWindowListener(new WindowAdapter() {
|
frame.addWindowListener(new WindowAdapter() {
|
||||||
@Override
|
@Override
|
||||||
@@ -382,14 +421,22 @@ public class FlatUIDefaultsInspector
|
|||||||
private static class ItemsTableModel
|
private static class ItemsTableModel
|
||||||
extends AbstractTableModel
|
extends AbstractTableModel
|
||||||
{
|
{
|
||||||
private final Item[] allItems;
|
private Item[] allItems;
|
||||||
private Item[] items;
|
private Item[] items;
|
||||||
|
private Predicate<Item> filter;
|
||||||
|
|
||||||
ItemsTableModel( Item[] items ) {
|
ItemsTableModel( Item[] items ) {
|
||||||
this.allItems = this.items = items;
|
this.allItems = this.items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setItems( Item[] items ) {
|
||||||
|
this.allItems = this.items = items;
|
||||||
|
setFilter( filter );
|
||||||
|
}
|
||||||
|
|
||||||
void setFilter( Predicate<Item> filter ) {
|
void setFilter( Predicate<Item> filter ) {
|
||||||
|
this.filter = filter;
|
||||||
|
|
||||||
if( filter != null ) {
|
if( filter != null ) {
|
||||||
ArrayList<Item> list = new ArrayList<>( allItems.length );
|
ArrayList<Item> list = new ArrayList<>( allItems.length );
|
||||||
for( Item item : allItems ) {
|
for( Item item : allItems ) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ new FormModel {
|
|||||||
root: new FormRoot {
|
root: new FormRoot {
|
||||||
add( new FormWindow( "javax.swing.JFrame", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
add( new FormWindow( "javax.swing.JFrame", new FormLayoutManager( class java.awt.BorderLayout ) ) {
|
||||||
name: "frame"
|
name: "frame"
|
||||||
"title": "UI Defaults"
|
"title": "UI Defaults Inspector"
|
||||||
"defaultCloseOperation": 2
|
"defaultCloseOperation": 2
|
||||||
"$sizePolicy": 2
|
"$sizePolicy": 2
|
||||||
"$locationPolicy": 2
|
"$locationPolicy": 2
|
||||||
|
|||||||
Reference in New Issue
Block a user