Theme Editor: preview improvements:

- added JSplitPane (contains JList and JTree)
- sort first column in JTable to have preview of sort direction arrow
- fixed background color of JEditorPane and JTextPane when enabling/disabling
- keep first JMenu enabled, but disable the menu items
This commit is contained in:
Karl Tauber
2021-08-29 11:44:38 +02:00
parent 97943fcd38
commit 694c2ad767
2 changed files with 95 additions and 61 deletions

View File

@@ -30,6 +30,7 @@ import javax.swing.UIDefaults.LazyValue;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.DefaultTreeModel;
import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.FlatLaf;
@@ -69,6 +70,8 @@ class FlatThemePreview
list1.setSelectedIndex( 1 ); list1.setSelectedIndex( 1 );
tree1.setSelectionRow( 1 ); tree1.setSelectionRow( 1 );
table1.setRowSelectionInterval( 1, 1 ); table1.setRowSelectionInterval( 1, 1 );
table1.setRowSorter( new TableRowSorter<>( table1.getModel() ) );
table1.getRowSorter().toggleSortOrder( 0 );
table1.uiDefaultsGetter = this::getUIDefaultProperty; table1.uiDefaultsGetter = this::getUIDefaultProperty;
EventQueue.invokeLater( () -> { EventQueue.invokeLater( () -> {
@@ -268,7 +271,7 @@ class FlatThemePreview
} }
private void enableDisable( Component comp, boolean enabled ) { private void enableDisable( Component comp, boolean enabled ) {
if( comp != previewLabel && comp != enabledCheckBox ) if( comp != previewLabel && comp != enabledCheckBox && comp != menu2 )
comp.setEnabled( enabled ); comp.setEnabled( enabled );
if( !(comp instanceof Container) || comp instanceof JInternalFrame ) if( !(comp instanceof Container) || comp instanceof JInternalFrame )
@@ -278,8 +281,21 @@ class FlatThemePreview
if( c instanceof JScrollPane ) if( c instanceof JScrollPane )
c = ((JScrollPane)c).getViewport().getView(); c = ((JScrollPane)c).getViewport().getView();
// make sure that background is updated correctly in BasicTextUI.updateBackground()
if( c instanceof JTextPane )
c.setBackground( UIManager.getColor( "TextPane.background" ) );
else if( c instanceof JEditorPane )
c.setBackground( UIManager.getColor( "EditorPane.background" ) );
enableDisable( c, enabled ); enableDisable( c, enabled );
} }
if( comp instanceof JMenu ) {
JMenu menu = (JMenu) comp;
int count = menu.getMenuComponentCount();
for( int i = 0; i < count; i++ )
enableDisable( menu.getMenuComponent( i ), enabled );
}
} }
private void changeProgress() { private void changeProgress() {
@@ -384,6 +400,7 @@ class FlatThemePreview
tabbedPaneLabel = new JLabel(); tabbedPaneLabel = new JLabel();
tabbedPane1 = new FlatThemePreview.PreviewTabbedPane(); tabbedPane1 = new FlatThemePreview.PreviewTabbedPane();
listTreeLabel = new JLabel(); listTreeLabel = new JLabel();
splitPane1 = new JSplitPane();
scrollPane2 = new JScrollPane(); scrollPane2 = new JScrollPane();
list1 = new JList<>(); list1 = new JList<>();
scrollPane3 = new JScrollPane(); scrollPane3 = new JScrollPane();
@@ -796,43 +813,51 @@ class FlatThemePreview
add(tabbedPane1, "cell 1 23"); add(tabbedPane1, "cell 1 23");
//---- listTreeLabel ---- //---- listTreeLabel ----
listTreeLabel.setText("JList / JTree:"); listTreeLabel.setText("<html>JList / JTree:<br>JSplitPane:</html>");
add(listTreeLabel, "cell 0 24"); add(listTreeLabel, "cell 0 24,aligny top,growy 0");
//======== scrollPane2 ======== //======== splitPane1 ========
{ {
splitPane1.setResizeWeight(0.5);
//---- list1 ---- //======== scrollPane2 ========
list1.setModel(new AbstractListModel<String>() { {
String[] values = { scrollPane2.setPreferredSize(new Dimension(50, 50));
"Item 1",
"Item 2", //---- list1 ----
"Item 3" list1.setModel(new AbstractListModel<String>() {
}; String[] values = {
@Override "Item 1",
public int getSize() { return values.length; } "Item 2",
@Override "Item 3"
public String getElementAt(int i) { return values[i]; } };
}); @Override
scrollPane2.setViewportView(list1); public int getSize() { return values.length; }
@Override
public String getElementAt(int i) { return values[i]; }
});
scrollPane2.setViewportView(list1);
}
splitPane1.setLeftComponent(scrollPane2);
//======== scrollPane3 ========
{
scrollPane3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane3.setPreferredSize(new Dimension(50, 50));
//---- tree1 ----
tree1.setModel(new DefaultTreeModel(
new DefaultMutableTreeNode("Item 1") {
{
add(new DefaultMutableTreeNode("Item 2"));
add(new DefaultMutableTreeNode("Item 3"));
}
}));
scrollPane3.setViewportView(tree1);
}
splitPane1.setRightComponent(scrollPane3);
} }
add(scrollPane2, "cell 1 24,width 50,height 50"); add(splitPane1, "cell 1 24,height 50");
//======== scrollPane3 ========
{
scrollPane3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//---- tree1 ----
tree1.setModel(new DefaultTreeModel(
new DefaultMutableTreeNode("Item 1") {
{
add(new DefaultMutableTreeNode("Item 2"));
add(new DefaultMutableTreeNode("Item 3"));
}
}));
scrollPane3.setViewportView(tree1);
}
add(scrollPane3, "cell 1 24,width 50,height 50");
//---- tableLabel ---- //---- tableLabel ----
tableLabel.setText("JTable:"); tableLabel.setText("JTable:");
@@ -984,6 +1009,7 @@ class FlatThemePreview
private JLabel tabbedPaneLabel; private JLabel tabbedPaneLabel;
private FlatThemePreview.PreviewTabbedPane tabbedPane1; private FlatThemePreview.PreviewTabbedPane tabbedPane1;
private JLabel listTreeLabel; private JLabel listTreeLabel;
private JSplitPane splitPane1;
private JScrollPane scrollPane2; private JScrollPane scrollPane2;
private JList<String> list1; private JList<String> list1;
private JScrollPane scrollPane3; private JScrollPane scrollPane3;

View File

@@ -510,40 +510,48 @@ new FormModel {
} ) } )
add( new FormComponent( "javax.swing.JLabel" ) { add( new FormComponent( "javax.swing.JLabel" ) {
name: "listTreeLabel" name: "listTreeLabel"
"text": "JList / JTree:" "text": "<html>JList / JTree:<br>JSplitPane:</html>"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 24" "value": "cell 0 24,aligny top,growy 0"
} ) } )
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) {
name: "scrollPane2" name: "splitPane1"
add( new FormComponent( "javax.swing.JList" ) { "resizeWeight": 0.5
name: "list1" add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
"model": new javax.swing.DefaultListModel { name: "scrollPane2"
addElement( "Item 1" ) "preferredSize": new java.awt.Dimension( 50, 50 )
addElement( "Item 2" ) add( new FormComponent( "javax.swing.JList" ) {
addElement( "Item 3" ) name: "list1"
} "model": new javax.swing.DefaultListModel {
addElement( "Item 1" )
addElement( "Item 2" )
addElement( "Item 3" )
}
} )
}, new FormLayoutConstraints( class java.lang.String ) {
"value": "left"
} ) } )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
"value": "cell 1 24,width 50,height 50" name: "scrollPane3"
} ) "horizontalScrollBarPolicy": 31
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { "preferredSize": new java.awt.Dimension( 50, 50 )
name: "scrollPane3" add( new FormComponent( "javax.swing.JTree" ) {
"horizontalScrollBarPolicy": 31 name: "tree1"
add( new FormComponent( "javax.swing.JTree" ) { "model": new javax.swing.tree.DefaultTreeModel( new javax.swing.tree.DefaultMutableTreeNode {
name: "tree1" userObject: "Item 1"
"model": new javax.swing.tree.DefaultTreeModel( new javax.swing.tree.DefaultMutableTreeNode { add( new javax.swing.tree.DefaultMutableTreeNode {
userObject: "Item 1" userObject: "Item 2"
add( new javax.swing.tree.DefaultMutableTreeNode { } )
userObject: "Item 2" add( new javax.swing.tree.DefaultMutableTreeNode {
} ) userObject: "Item 3"
add( new javax.swing.tree.DefaultMutableTreeNode { } )
userObject: "Item 3"
} ) } )
} ) } )
}, new FormLayoutConstraints( class java.lang.String ) {
"value": "right"
} ) } )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 24,width 50,height 50" "value": "cell 1 24,height 50"
} ) } )
add( new FormComponent( "javax.swing.JLabel" ) { add( new FormComponent( "javax.swing.JLabel" ) {
name: "tableLabel" name: "tableLabel"