From d68494c85dd8b5191da3c86ef555d4791ea86d73 Mon Sep 17 00:00:00 2001 From: Alexander Zuev Date: Wed, 15 Apr 2026 14:07:33 -0700 Subject: [PATCH 1/2] =?UTF-8?q?8377727:=20Ghost=20caret=20and=20focus=20ap?= =?UTF-8?q?pear=20in=20non=E2=80=91editable=20text=20fields=20on=20JDK=208?= =?UTF-8?q?u451+?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make caret color closer to the background color so it does appear as disabled caret. --- .../classes/javax/swing/text/DefaultCaret.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java b/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java index ed502e8da9b86..903bad7764313 100644 --- a/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java +++ b/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package javax.swing.text; +import java.awt.Color; import java.awt.Graphics; import java.awt.HeadlessException; import java.awt.Point; @@ -690,7 +691,18 @@ public void paint(Graphics g) { // semantics of damage we can't really get around this. damage(r); } - g.setColor(component.getCaretColor()); + if (component.isEditable()) { + g.setColor(component.getCaretColor()); + } else { + Color caretColor = component.getCaretColor(); + Color bg = component.getBackground(); + int red = (caretColor.getRed() + bg.getRed()) / 2; + int green = (caretColor.getGreen() + bg.getGreen()) / 2; + int blue = (caretColor.getBlue() + bg.getBlue()) / 2; + int alpha = 127; + Color newCaretColor = new Color(red, green, blue, alpha); + g.setColor(newCaretColor); + } int paintWidth = getCaretWidth(r.height); r.x -= paintWidth >> 1; g.fillRect(r.x, r.y, paintWidth, r.height); From af63b1c805b66be05ba5179e1c21ec768151c0bc Mon Sep 17 00:00:00 2001 From: Alexander Zuev Date: Tue, 21 Apr 2026 13:13:04 -0700 Subject: [PATCH 2/2] Add null check for caret and background color reported by the component. --- .../javax/swing/text/DefaultCaret.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java b/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java index 903bad7764313..f76e04051243e 100644 --- a/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java +++ b/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java @@ -695,13 +695,20 @@ public void paint(Graphics g) { g.setColor(component.getCaretColor()); } else { Color caretColor = component.getCaretColor(); + if (caretColor == null) { + caretColor = g.getColor(); + } Color bg = component.getBackground(); - int red = (caretColor.getRed() + bg.getRed()) / 2; - int green = (caretColor.getGreen() + bg.getGreen()) / 2; - int blue = (caretColor.getBlue() + bg.getBlue()) / 2; - int alpha = 127; - Color newCaretColor = new Color(red, green, blue, alpha); - g.setColor(newCaretColor); + if (bg == null) { + g.setColor(caretColor); + } else { + int red = (caretColor.getRed() + bg.getRed()) / 2; + int green = (caretColor.getGreen() + bg.getGreen()) / 2; + int blue = (caretColor.getBlue() + bg.getBlue()) / 2; + int alpha = 127; + Color newCaretColor = new Color(red, green, blue, alpha); + g.setColor(newCaretColor); + } } int paintWidth = getCaretWidth(r.height); r.x -= paintWidth >> 1;