From 19afbe99d91be1445fae53513633f8a891b7dfb0 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Mon, 17 Jul 2023 15:45:03 +0200 Subject: [PATCH] FormattedTextField: On Linux, fixed `IllegalArgumentException: Invalid location` if `JFormattedTextField.setDocument()` is invoked in a focus gained listener on that formatted text field. (issue #698) --- CHANGELOG.md | 3 +++ .../src/main/java/com/formdev/flatlaf/ui/FlatCaret.java | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4025a29f..c3a1f330 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,9 @@ FlatLaf Change Log - Native Windows libraries: Fixed crash when running in Java 8 and newer Java version is installed in `PATH` environment variable and using class `SystemInfo` before AWT initialization. (issue #673) +- FormattedTextField: On Linux, fixed `IllegalArgumentException: Invalid + location` if `JFormattedTextField.setDocument()` is invoked in a focus gained + listener on that formatted text field. (issue #698) ## 3.1.1 diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java index 95c0ccc1..e301961e 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java @@ -256,10 +256,14 @@ public class FlatCaret // select all if( c instanceof JFormattedTextField ) { EventQueue.invokeLater( () -> { - if( getComponent() == null ) + // Warning: do not use variables from outside of this runnable + // because they may be out-of-date when this runnable is executed + + JTextComponent c2 = getComponent(); + if( c2 == null ) return; // was deinstalled - select( 0, doc.getLength() ); + select( 0, c2.getDocument().getLength() ); } ); } else { select( 0, doc.getLength() );