Browse Source

REPORT-27497 编辑单元格输入韩文时字会缺失

feature/big-screen
hades 4 years ago
parent
commit
ab8cd90400
  1. 10
      designer-realize/src/main/java/com/fr/grid/Grid.java
  2. 5
      designer-realize/src/main/java/com/fr/grid/GridKeyListener.java
  3. 31
      designer-realize/src/main/java/com/fr/grid/action/GridInputAction.java
  4. 24
      designer-realize/src/main/java/com/fr/grid/help/GridHelper.java
  5. 34
      designer-realize/src/test/java/com/fr/grid/help/GridHelperTest.java

10
designer-realize/src/main/java/com/fr/grid/Grid.java

@ -130,6 +130,8 @@ public class Grid extends BaseGridComponent {
private boolean notShowingTableSelectPane = true; private boolean notShowingTableSelectPane = true;
private GridMouseAdapter gridMouseAdapter; private GridMouseAdapter gridMouseAdapter;
private boolean needRequestFocus = true;
public Grid(int resolution) { public Grid(int resolution) {
this.resolution = resolution; this.resolution = resolution;
// 能触发processEvent,不管是否给component增加listener // 能触发processEvent,不管是否给component增加listener
@ -259,6 +261,10 @@ public class Grid extends BaseGridComponent {
this.getElementCasePane().repaint(); this.getElementCasePane().repaint();
} }
public void setNeedRequestFocus(boolean needRequestFocus) {
this.needRequestFocus = needRequestFocus;
}
/** /**
* Gets vertical frozen line color. * Gets vertical frozen line color.
*/ */
@ -908,7 +914,9 @@ public class Grid extends BaseGridComponent {
this.validate(); this.validate();
// 需要重新绘制界面 // 需要重新绘制界面
this.repaint(10); this.repaint(10);
this.editorComponent.requestFocus(); if (this.needRequestFocus) {
this.editorComponent.requestFocus();
}
} }
/** /**

5
designer-realize/src/main/java/com/fr/grid/GridKeyListener.java

@ -2,10 +2,12 @@ package com.fr.grid;
import com.fr.common.inputevent.InputEventBaseOnOS; import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.grid.action.GridInputAction;
import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.FloatSelection;
import com.fr.grid.selection.Selection; import com.fr.grid.selection.Selection;
import com.fr.report.elementcase.ElementCase; import com.fr.report.elementcase.ElementCase;
import com.fr.stable.os.support.OSSupportCenter;
import java.awt.*; import java.awt.*;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
@ -177,6 +179,9 @@ public class GridKeyListener implements KeyListener {
return; return;
} }
if (!grid.isCellEditing()) { if (!grid.isCellEditing()) {
GridInputAction action = OSSupportCenter.getAction(GridInputAction.class);
action.register(grid, ch);
action.execute();
grid.startEditing(true); grid.startEditing(true);
} }

31
designer-realize/src/main/java/com/fr/grid/action/GridInputAction.java

@ -0,0 +1,31 @@
package com.fr.grid.action;
import com.fr.design.os.impl.SupportOSImpl;
import com.fr.grid.Grid;
import com.fr.grid.help.GridHelper;
import com.fr.stable.os.support.OSBasedAction;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/8/12
*/
public class GridInputAction implements OSBasedAction {
private Grid grid;
private char ch;
@Override
public void execute(Object... objects) {
// win下韩语输入法与其他输入法不一样 在输入第二个字符时 就开始触发keyType 而其中grid的焦点转移会导致输入失效
boolean accept = SupportOSImpl.KOREAN_INPUT.support() && grid != null;
if (accept) {
grid.setNeedRequestFocus(!GridHelper.isKoreanCharacter(ch));
}
}
public void register(Grid grid, char ch) {
this.grid = grid;
this.ch = ch;
}
}

24
designer-realize/src/main/java/com/fr/grid/help/GridHelper.java

@ -0,0 +1,24 @@
package com.fr.grid.help;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/8/7
*/
public class GridHelper {
private static final char X_AC00 = 0xAC00;
private static final char X_D7A3 = 0xD7A3;
private static final char X_3130 = 0x3130;
private static final char X_318F = 0x318F;
private static final char X_1100 = 0x1100;
private static final char X_11FF = 0x11FF;
private static final char X_20A9 = 0x20A9;
public static boolean isKoreanCharacter(char value) {
return value >= X_AC00 && value <= X_D7A3
|| value > X_3130 && value < X_318F
|| value > X_1100 && value < X_11FF
|| value == X_20A9;
}
}

34
designer-realize/src/test/java/com/fr/grid/help/GridHelperTest.java

@ -0,0 +1,34 @@
package com.fr.grid.help;
import junit.framework.TestCase;
import org.junit.Assert;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/8/7
*/
public class GridHelperTest extends TestCase {
/**
* 为空
*/
private char ch;
public void testIsKoreanCharacter() {
Assert.assertFalse(GridHelper.isKoreanCharacter('1'));
Assert.assertFalse(GridHelper.isKoreanCharacter('A'));
Assert.assertFalse(GridHelper.isKoreanCharacter('z'));
Assert.assertFalse(GridHelper.isKoreanCharacter('测'));
Assert.assertFalse(GridHelper.isKoreanCharacter('測'));
Assert.assertFalse(GridHelper.isKoreanCharacter('鐪'));
Assert.assertFalse(GridHelper.isKoreanCharacter('&'));
Assert.assertFalse(GridHelper.isKoreanCharacter(' '));
Assert.assertFalse(GridHelper.isKoreanCharacter(ch));
Assert.assertFalse(GridHelper.isKoreanCharacter('は'));
Assert.assertTrue(GridHelper.isKoreanCharacter('먀'));
Assert.assertTrue(GridHelper.isKoreanCharacter('이'));
}
}
Loading…
Cancel
Save