8076164: [JTextField] When input too long Thai character, cursor's behavior is odd
Reviewed-by: alexsch, azvegint
This commit is contained in:
parent
45f00a6646
commit
58be04ef9d
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2015, 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
|
||||
@ -97,7 +97,12 @@ public class BasicTextFieldUI extends BasicTextUI {
|
||||
String kind = elem.getName();
|
||||
if (kind != null) {
|
||||
if (kind.equals(AbstractDocument.ContentElementName)) {
|
||||
return new GlyphView(elem);
|
||||
return new GlyphView(elem) {
|
||||
@Override
|
||||
public int getResizeWeight(int axis) {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
} else if (kind.equals(AbstractDocument.ParagraphElementName)) {
|
||||
return new I18nFieldView(elem);
|
||||
}
|
||||
|
@ -537,6 +537,17 @@ public class GlyphView extends View implements TabableView, Cloneable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public int getResizeWeight(int axis) {
|
||||
if (axis == View.X_AXIS) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the minimum span for this view along an axis.
|
||||
*
|
||||
@ -552,6 +563,9 @@ public class GlyphView extends View implements TabableView, Cloneable {
|
||||
public float getMinimumSpan(int axis) {
|
||||
switch (axis) {
|
||||
case View.X_AXIS:
|
||||
if (getResizeWeight(X_AXIS) == 0) {
|
||||
return getPreferredSpan(X_AXIS);
|
||||
}
|
||||
if (minimumSpan < 0) {
|
||||
minimumSpan = 0;
|
||||
int p0 = getStartOffset();
|
||||
|
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8076164
|
||||
@summary [JTextField] When input too long Thai character, cursor's behavior
|
||||
is odd
|
||||
@author Semyon Sadetsky
|
||||
*/
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import java.lang.Override;
|
||||
import java.lang.Runnable;
|
||||
|
||||
public class I18NViewNoWrapMinSpan {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
JTextField textField = new JTextField(15);
|
||||
textField.setText("ม12345");
|
||||
float noSpaceMin = textField.getUI().getRootView(textField)
|
||||
.getMinimumSpan(0);
|
||||
textField.getDocument().insertString(3, " ", null);
|
||||
if (noSpaceMin > textField.getUI().getRootView(textField)
|
||||
.getMinimumSpan(0)) {
|
||||
throw new RuntimeException(
|
||||
"Minimum span is calculated for wrapped text");
|
||||
}
|
||||
} catch (BadLocationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
System.out.println("ok");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user