mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-24 09:10:08 +00:00
8268145: [macos] Rendering artifacts is seen when text inside the JTable with TableCellEditor having JTextfield
Reviewed-by: kizune, abhiscxk, honkar
This commit is contained in:
parent
aa3828447c
commit
84032850db
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2024, 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
|
||||
@ -189,20 +189,25 @@ public class AquaCaret extends DefaultCaret
|
||||
// intersection of the caret rectangle and the component less the border, if any.
|
||||
final Rectangle caretRect = new Rectangle(x, y, width, height);
|
||||
final Border border = getComponent().getBorder();
|
||||
if (border != null) {
|
||||
final Rectangle alloc = getComponent().getBounds();
|
||||
alloc.x = alloc.y = 0;
|
||||
final Rectangle alloc = getComponent().getBounds();
|
||||
alloc.x = alloc.y = 0;
|
||||
if (border != null && border.isBorderOpaque()) {
|
||||
final Insets borderInsets = border.getBorderInsets(getComponent());
|
||||
alloc.x += borderInsets.left;
|
||||
alloc.y += borderInsets.top;
|
||||
alloc.width -= borderInsets.left + borderInsets.right;
|
||||
alloc.height -= borderInsets.top + borderInsets.bottom;
|
||||
Rectangle2D.intersect(caretRect, alloc, caretRect);
|
||||
x = caretRect.x;
|
||||
y = caretRect.y;
|
||||
width = Math.max(caretRect.width, 1);
|
||||
height = Math.max(caretRect.height, 1);
|
||||
} else {
|
||||
x = alloc.x;
|
||||
y = alloc.y;
|
||||
width = alloc.width;
|
||||
height = alloc.height;
|
||||
}
|
||||
x = caretRect.x;
|
||||
y = caretRect.y;
|
||||
width = Math.max(caretRect.width, 1);
|
||||
height = Math.max(caretRect.height, 1);
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
86
test/jdk/javax/swing/JTable/TestCaretArtifact.java
Normal file
86
test/jdk/javax/swing/JTable/TestCaretArtifact.java
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8268145
|
||||
* @library /java/awt/regtesthelpers
|
||||
* @build PassFailJFrame
|
||||
* @requires (os.family == "mac")
|
||||
* @summary Verify rendering artifact is not seen moving caret inside
|
||||
* JTable with TableCellEditor having JTextField
|
||||
* @run main/manual TestCaretArtifact
|
||||
*/
|
||||
|
||||
import javax.swing.DefaultCellEditor;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import javax.swing.table.TableColumn;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class TestCaretArtifact {
|
||||
|
||||
private static final String INSTRUCTIONS = """
|
||||
Double click on "Click Here" textfield so that textfield becomes editable;
|
||||
Press spacebar. Press left arrow button.
|
||||
Do this few times.
|
||||
If artifact is seen, press Fail else press Pass.""";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
PassFailJFrame.builder()
|
||||
.title("Caret Artifact Instructions")
|
||||
.instructions(INSTRUCTIONS)
|
||||
.columns(35)
|
||||
.testUI(TestCaretArtifact::createUI)
|
||||
.build()
|
||||
.awaitAndCheck();
|
||||
}
|
||||
|
||||
|
||||
public static JFrame createUI() {
|
||||
TableCellEditor editor = new TestEditor(new JTextField());
|
||||
JTable table = new JTable(new Object[][] {{"click here",
|
||||
"inactive forever"}},
|
||||
new Object[] {"1", "2"});
|
||||
|
||||
JFrame frame = new JFrame("CaretArtifact");
|
||||
TableColumn column = table.getColumn("1");
|
||||
column.setCellEditor(editor);
|
||||
frame.getContentPane().add("Center", table);
|
||||
frame.setSize(400, 100);
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
static class TestEditor extends DefaultCellEditor {
|
||||
public TestEditor(JTextField tf) {
|
||||
super(tf);
|
||||
}
|
||||
public boolean stopCellEditing() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user