From 694c2ad7671e96f1336cf8aede3a3a0fd477a1f2 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 29 Aug 2021 11:44:38 +0200 Subject: [PATCH] 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 --- .../flatlaf/themeeditor/FlatThemePreview.java | 94 ++++++++++++------- .../flatlaf/themeeditor/FlatThemePreview.jfd | 62 ++++++------ 2 files changed, 95 insertions(+), 61 deletions(-) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.java index 2fd0db51..eb3d857d 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.java @@ -30,6 +30,7 @@ import javax.swing.UIDefaults.LazyValue; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableRowSorter; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import com.formdev.flatlaf.FlatLaf; @@ -69,6 +70,8 @@ class FlatThemePreview list1.setSelectedIndex( 1 ); tree1.setSelectionRow( 1 ); table1.setRowSelectionInterval( 1, 1 ); + table1.setRowSorter( new TableRowSorter<>( table1.getModel() ) ); + table1.getRowSorter().toggleSortOrder( 0 ); table1.uiDefaultsGetter = this::getUIDefaultProperty; EventQueue.invokeLater( () -> { @@ -268,7 +271,7 @@ class FlatThemePreview } private void enableDisable( Component comp, boolean enabled ) { - if( comp != previewLabel && comp != enabledCheckBox ) + if( comp != previewLabel && comp != enabledCheckBox && comp != menu2 ) comp.setEnabled( enabled ); if( !(comp instanceof Container) || comp instanceof JInternalFrame ) @@ -278,8 +281,21 @@ class FlatThemePreview if( c instanceof JScrollPane ) 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 ); } + + 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() { @@ -384,6 +400,7 @@ class FlatThemePreview tabbedPaneLabel = new JLabel(); tabbedPane1 = new FlatThemePreview.PreviewTabbedPane(); listTreeLabel = new JLabel(); + splitPane1 = new JSplitPane(); scrollPane2 = new JScrollPane(); list1 = new JList<>(); scrollPane3 = new JScrollPane(); @@ -796,43 +813,51 @@ class FlatThemePreview add(tabbedPane1, "cell 1 23"); //---- listTreeLabel ---- - listTreeLabel.setText("JList / JTree:"); - add(listTreeLabel, "cell 0 24"); + listTreeLabel.setText("JList / JTree:
JSplitPane:"); + add(listTreeLabel, "cell 0 24,aligny top,growy 0"); - //======== scrollPane2 ======== + //======== splitPane1 ======== { + splitPane1.setResizeWeight(0.5); - //---- list1 ---- - list1.setModel(new AbstractListModel() { - String[] values = { - "Item 1", - "Item 2", - "Item 3" - }; - @Override - public int getSize() { return values.length; } - @Override - public String getElementAt(int i) { return values[i]; } - }); - scrollPane2.setViewportView(list1); + //======== scrollPane2 ======== + { + scrollPane2.setPreferredSize(new Dimension(50, 50)); + + //---- list1 ---- + list1.setModel(new AbstractListModel() { + String[] values = { + "Item 1", + "Item 2", + "Item 3" + }; + @Override + 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"); - - //======== 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"); + add(splitPane1, "cell 1 24,height 50"); //---- tableLabel ---- tableLabel.setText("JTable:"); @@ -984,6 +1009,7 @@ class FlatThemePreview private JLabel tabbedPaneLabel; private FlatThemePreview.PreviewTabbedPane tabbedPane1; private JLabel listTreeLabel; + private JSplitPane splitPane1; private JScrollPane scrollPane2; private JList list1; private JScrollPane scrollPane3; diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.jfd index a624cf1b..f031b2b1 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.jfd +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.jfd @@ -510,40 +510,48 @@ new FormModel { } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "listTreeLabel" - "text": "JList / JTree:" + "text": "JList / JTree:
JSplitPane:" }, 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 ) ) { - name: "scrollPane2" - add( new FormComponent( "javax.swing.JList" ) { - name: "list1" - "model": new javax.swing.DefaultListModel { - addElement( "Item 1" ) - addElement( "Item 2" ) - addElement( "Item 3" ) - } + add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) { + name: "splitPane1" + "resizeWeight": 0.5 + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane2" + "preferredSize": new java.awt.Dimension( 50, 50 ) + add( new FormComponent( "javax.swing.JList" ) { + 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 ) { - "value": "cell 1 24,width 50,height 50" - } ) - add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { - name: "scrollPane3" - "horizontalScrollBarPolicy": 31 - add( new FormComponent( "javax.swing.JTree" ) { - name: "tree1" - "model": new javax.swing.tree.DefaultTreeModel( new javax.swing.tree.DefaultMutableTreeNode { - userObject: "Item 1" - add( new javax.swing.tree.DefaultMutableTreeNode { - userObject: "Item 2" - } ) - add( new javax.swing.tree.DefaultMutableTreeNode { - userObject: "Item 3" + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane3" + "horizontalScrollBarPolicy": 31 + "preferredSize": new java.awt.Dimension( 50, 50 ) + add( new FormComponent( "javax.swing.JTree" ) { + name: "tree1" + "model": new javax.swing.tree.DefaultTreeModel( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 1" + add( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 2" + } ) + add( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 3" + } ) } ) } ) + }, new FormLayoutConstraints( class java.lang.String ) { + "value": "right" } ) }, 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" ) { name: "tableLabel"