Browse Source

REPORT-63194 【组件可更新提醒】组件复用-适配设计器字段输入框输入时会出现字符消失的情况

【问题原因】
合成文本,如中文等存在输入-删除-替换的机制,参考JTextComponent#replaceInputMethodText()
所以insertString中不能直接return,而应该抛出异常中断后续字符处理,否则在处理中文等合成文本时
会导致原有字符被删除

【改动思路】
同上
bugfix/11.0
Starryi 3 years ago
parent
commit
fb67c0901c
  1. 7
      designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java

7
designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java

@ -818,14 +818,17 @@ public class ShareMainPane extends JPanel {
@Override @Override
public void insertString(int offset, String str, AttributeSet attrSet) throws BadLocationException { public void insertString(int offset, String str, AttributeSet attrSet) throws BadLocationException {
if (str == null) { if (str == null) {
return; throw new BadLocationException(null, offset);
} }
int count = str.length(); int count = str.length();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
char c = str.charAt(i); char c = str.charAt(i);
if (allowCharAsString.indexOf(c) < 0) { if (allowCharAsString.indexOf(c) < 0) {
java.awt.Toolkit.getDefaultToolkit().beep(); java.awt.Toolkit.getDefaultToolkit().beep();
return; // REPORT-63194
// 合成文本,如中文等存在输入-删除-替换的机制 JTextComponent#replaceInputMethodText()
// 所以这里不能直接return,而应该抛出异常中断后续字符处理,否则在处理中文等合成文本时会导致原有字符被删除
throw new BadLocationException(str, offset);
} }
} }
super.insertString(offset, str, attrSet); super.insertString(offset, str, attrSet);

Loading…
Cancel
Save