Theme Editor: Preview: fixed preview of cell focus indicators in List, Table and Tree

This commit is contained in:
Karl Tauber
2023-03-25 23:46:48 +01:00
parent 03a775cd31
commit bc5587477b
2 changed files with 47 additions and 3 deletions

View File

@@ -27,6 +27,7 @@ import java.util.function.Predicate;
import javax.swing.*; import javax.swing.*;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader; import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel; import javax.swing.table.TableColumnModel;
import javax.swing.table.TableRowSorter; import javax.swing.table.TableRowSorter;
import javax.swing.tree.DefaultMutableTreeNode; 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.extras.components.*;
import com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon; import com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon;
import com.formdev.flatlaf.ui.FlatTabbedPaneUI; import com.formdev.flatlaf.ui.FlatTabbedPaneUI;
import com.formdev.flatlaf.ui.FlatUIUtils;
import net.miginfocom.swing.*; import net.miginfocom.swing.*;
/** /**
@@ -91,10 +93,14 @@ class FlatThemePreviewAll
tabbedPane1.addTab( "Tab 8", null ); tabbedPane1.addTab( "Tab 8", null );
list1.setSelectedIndex( 1 ); list1.setSelectedIndex( 1 );
// list1.setSelectedIndices( new int[] { 0, 1 } );
list1.uiDefaultsGetter = preview::getUIDefaultProperty;
tree1.setSelectionRow( 1 ); tree1.setSelectionRow( 1 );
// tree1.setSelectionRows( new int[] { 0, 1 } );
table1.setRowSorter( new TableRowSorter<>( table1.getModel() ) ); table1.setRowSorter( new TableRowSorter<>( table1.getModel() ) );
table1.getRowSorter().toggleSortOrder( 0 ); table1.getRowSorter().toggleSortOrder( 0 );
table1.setRowSelectionInterval( 1, 1 ); table1.setRowSelectionInterval( 1, 1 );
table1.setColumnSelectionInterval( 0, 0 );
table1.uiDefaultsGetter = preview::getUIDefaultProperty; table1.uiDefaultsGetter = preview::getUIDefaultProperty;
EventQueue.invokeLater( () -> { EventQueue.invokeLater( () -> {
@@ -347,7 +353,7 @@ class FlatThemePreviewAll
JLabel listTreeLabel = new JLabel(); JLabel listTreeLabel = new JLabel();
JSplitPane splitPane1 = new JSplitPane(); JSplitPane splitPane1 = new JSplitPane();
JScrollPane scrollPane2 = new JScrollPane(); JScrollPane scrollPane2 = new JScrollPane();
list1 = new JList<>(); list1 = new FlatThemePreviewAll.PreviewList();
JScrollPane scrollPane3 = new JScrollPane(); JScrollPane scrollPane3 = new JScrollPane();
tree1 = new JTree(); tree1 = new JTree();
JLabel tableLabel = new JLabel(); JLabel tableLabel = new JLabel();
@@ -980,7 +986,7 @@ class FlatThemePreviewAll
private FlatProgressBar progressBar2; private FlatProgressBar progressBar2;
private JToolBar toolBar1; private JToolBar toolBar1;
private FlatThemePreviewAll.PreviewTabbedPane tabbedPane1; private FlatThemePreviewAll.PreviewTabbedPane tabbedPane1;
private JList<String> list1; private FlatThemePreviewAll.PreviewList list1;
private JTree tree1; private JTree tree1;
private FlatThemePreviewAll.PreviewTable table1; private FlatThemePreviewAll.PreviewTable table1;
private JDesktopPane desktopPane1; private JDesktopPane desktopPane1;
@@ -1046,12 +1052,32 @@ class FlatThemePreviewAll
} }
} }
//---- class PreviewList --------------------------------------------------
private static class PreviewList
extends JList<String>
{
Function<Object, Object> 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 ------------------------------------------------- //---- class PreviewTable -------------------------------------------------
private static class PreviewTable private static class PreviewTable
extends JTable extends JTable
{ {
Function<Object, Object> uiDefaultsGetter; Function<Object, Object> uiDefaultsGetter;
private boolean inPrepareRenderer;
@Override @Override
protected JTableHeader createDefaultTableHeader() { protected JTableHeader createDefaultTableHeader() {
@@ -1069,6 +1095,24 @@ class FlatThemePreviewAll
super.paint( g ); 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 ---- //---- class PreviewTableHeader ----
private class PreviewTableHeader private class PreviewTableHeader

View File

@@ -624,7 +624,7 @@ new FormModel {
add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) {
name: "scrollPane2" name: "scrollPane2"
"preferredSize": new java.awt.Dimension( 50, 50 ) "preferredSize": new java.awt.Dimension( 50, 50 )
add( new FormComponent( "javax.swing.JList" ) { add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewAll$PreviewList" ) {
name: "list1" name: "list1"
"model": new javax.swing.DefaultListModel { "model": new javax.swing.DefaultListModel {
addElement( "Item 1" ) addElement( "Item 1" )