From bc5587477b5e9c474f630435a075e8869d7d6dbf Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sat, 25 Mar 2023 23:46:48 +0100 Subject: [PATCH] Theme Editor: Preview: fixed preview of cell focus indicators in List, Table and Tree --- .../themeeditor/FlatThemePreviewAll.java | 48 ++++++++++++++++++- .../themeeditor/FlatThemePreviewAll.jfd | 2 +- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java index d77a4c2c..6fcf2711 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java @@ -27,6 +27,7 @@ import java.util.function.Predicate; import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; import javax.swing.table.TableRowSorter; import javax.swing.tree.DefaultMutableTreeNode; @@ -37,6 +38,7 @@ import com.formdev.flatlaf.extras.FlatSVGIcon; import com.formdev.flatlaf.extras.components.*; import com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon; import com.formdev.flatlaf.ui.FlatTabbedPaneUI; +import com.formdev.flatlaf.ui.FlatUIUtils; import net.miginfocom.swing.*; /** @@ -91,10 +93,14 @@ class FlatThemePreviewAll tabbedPane1.addTab( "Tab 8", null ); list1.setSelectedIndex( 1 ); +// list1.setSelectedIndices( new int[] { 0, 1 } ); + list1.uiDefaultsGetter = preview::getUIDefaultProperty; tree1.setSelectionRow( 1 ); +// tree1.setSelectionRows( new int[] { 0, 1 } ); table1.setRowSorter( new TableRowSorter<>( table1.getModel() ) ); table1.getRowSorter().toggleSortOrder( 0 ); table1.setRowSelectionInterval( 1, 1 ); + table1.setColumnSelectionInterval( 0, 0 ); table1.uiDefaultsGetter = preview::getUIDefaultProperty; EventQueue.invokeLater( () -> { @@ -347,7 +353,7 @@ class FlatThemePreviewAll JLabel listTreeLabel = new JLabel(); JSplitPane splitPane1 = new JSplitPane(); JScrollPane scrollPane2 = new JScrollPane(); - list1 = new JList<>(); + list1 = new FlatThemePreviewAll.PreviewList(); JScrollPane scrollPane3 = new JScrollPane(); tree1 = new JTree(); JLabel tableLabel = new JLabel(); @@ -980,7 +986,7 @@ class FlatThemePreviewAll private FlatProgressBar progressBar2; private JToolBar toolBar1; private FlatThemePreviewAll.PreviewTabbedPane tabbedPane1; - private JList list1; + private FlatThemePreviewAll.PreviewList list1; private JTree tree1; private FlatThemePreviewAll.PreviewTable table1; private JDesktopPane desktopPane1; @@ -1046,12 +1052,32 @@ class FlatThemePreviewAll } } + //---- class PreviewList -------------------------------------------------- + + private static class PreviewList + extends JList + { + Function uiDefaultsGetter; + + @Override + public void paint( Graphics g ) { + if( !Beans.isDesignTime() ) { + // needed for DefaultListCellRenderer + FlatLaf.runWithUIDefaultsGetter( uiDefaultsGetter, () -> { + super.paint( g ); + } ); + } else + super.paint( g ); + } + } + //---- class PreviewTable ------------------------------------------------- private static class PreviewTable extends JTable { Function uiDefaultsGetter; + private boolean inPrepareRenderer; @Override protected JTableHeader createDefaultTableHeader() { @@ -1069,6 +1095,24 @@ class FlatThemePreviewAll super.paint( g ); } + @Override + public Component prepareRenderer( TableCellRenderer renderer, int row, int column ) { + inPrepareRenderer = true; + try { + return super.prepareRenderer( renderer, row, column ); + } finally { + inPrepareRenderer = false; + } + } + + @Override + public boolean isFocusOwner() { + // needed because FlatUIUtils.isPermanentFocusOwner() is not used in FlatTableUI + return inPrepareRenderer + ? FlatUIUtils.isPermanentFocusOwner( this ) + : super.isFocusOwner(); + } + //---- class PreviewTableHeader ---- private class PreviewTableHeader diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.jfd index 05ff8e58..f4498655 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.jfd +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.jfd @@ -624,7 +624,7 @@ new FormModel { 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" ) { + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewAll$PreviewList" ) { name: "list1" "model": new javax.swing.DefaultListModel { addElement( "Item 1" )