From f61782d87f6dc0fab686fbd4380dd477b8d83b3e Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Fri, 13 Sep 2019 10:35:36 +0200 Subject: [PATCH] Table and Tree: show focus border (at scroll pane) even if in editing mode --- .../com/formdev/flatlaf/ui/FlatBorder.java | 18 +++++++++++++++++- .../formdev/flatlaf/FlatComponents2Test.java | 1 + .../formdev/flatlaf/FlatComponents2Test.jfd | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java index 6e77c909..7c229fcf 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java @@ -22,13 +22,17 @@ import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; +import java.awt.KeyboardFocusManager; import java.awt.Paint; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JScrollPane; import javax.swing.JSpinner; +import javax.swing.JTable; import javax.swing.JTextField; +import javax.swing.JTree; import javax.swing.JViewport; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicBorders; import javax.swing.text.JTextComponent; @@ -97,7 +101,19 @@ public class FlatBorder if( c instanceof JScrollPane ) { JViewport viewport = ((JScrollPane)c).getViewport(); Component view = (viewport != null) ? viewport.getView() : null; - return (view != null) ? view.hasFocus() : false; + if( view != null ) { + if( view.hasFocus() ) + return true; + + if( (view instanceof JTable && ((JTable)view).isEditing()) || + (view instanceof JTree && ((JTree)view).isEditing()) ) + { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + if( focusOwner != null ) + return SwingUtilities.isDescendingFrom( focusOwner, view ); + } + } + return false; } else if( c instanceof JComboBox && ((JComboBox)c).isEditable() ) { Component editorComponent = ((JComboBox)c).getEditor().getEditorComponent(); return (editorComponent != null) ? editorComponent.hasFocus() : false; diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.java index 1e93c5eb..405107f8 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.java @@ -156,6 +156,7 @@ public class FlatComponents2Test //---- tree1 ---- tree1.setShowsRootHandles(true); + tree1.setEditable(true); scrollPane3.setViewportView(tree1); } add(scrollPane3, "cell 1 3,growx"); diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.jfd b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.jfd index 60e1d5dd..21f057e6 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.jfd +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/FlatComponents2Test.jfd @@ -102,6 +102,7 @@ new FormModel { add( new FormComponent( "javax.swing.JTree" ) { name: "tree1" "showsRootHandles": true + "editable": true } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 3,growx"