-
Bug
-
Resolution: Fixed
-
P3
-
7
SYNOPSIS
--------
Cannot use IME on JComboBox
OPERATING SYSTEMS
-----------------
Windows XP SP3 x86 (Japanese)
Windows Server 2008 R2 Enterprise SP1 (Japanese)
Not Reproducible using JDK 7 b130 on Linux
Not Reproducible using 1.6.0_24-b07 on Windows
FULL JDK VERSION
----------------
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b130)
Java HotSpot(TM) Client VM (build 21.0-b02, mixed mode)
DESCRIPTION
-----------
On Windows platform, we cannot use IME on JComboBox after opening drop-down list. I applied KeyListener against JComboBox, it should work. Works fine with JDK 7 b130 on Linux, and 1.6.0_24-b07 on Windows
REPRODUCTION INSTRUCTIONS
-------------------------
This testing requires Japanese Windows
1. Compile and run JComboBoxTest2.java from Command Prompt
> javac JComboBoxTest2.java
> java JComboBoxTest2
2. Turn on IME, type "ma", Japanese "MA" is displayed on preedit area
3. Press Return key to commit
4. Japanese "MAMIMUMEMO" is displayed on JComboBox
5. Open drop-down list on JComboBox
6. Check IME status. If IME is turned off, please turn it on
(If it's turned off, it may not be turned on)
7. If IME is on, type "wa", Japanese "WA" should be displayed on preedit
area, but "wa" is displayed in Command Prompt
TESTCASE SOURCE
---------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class JComboBoxTest2 extends JFrame implements ActionListener {
MyComboBox cb = null;
JButton btn = null;
static String[] data = new String[] {
"\u3042\u3044\u3046\u3048\u304a", "\u304b\u304d\u304f\u3051\u3053",
"\u3055\u3057\u3059\u305b\u305d", "\u305f\u3061\u3064\u3066\u3068",
"\u306a\u306b\u306c\u306d\u306e", "\u306f\u3072\u3075\u3078\u307b",
"\u307e\u307f\u3080\u3081\u3082", "\u3084\u3086\u3088",
"\u3089\u308a\u308b\u308c\u308d", "\u308f\u3092\u3093",
};
JComboBoxTest2 () {
setTitle("JComboBoxTest2");
Container c = getContentPane();
c.setLayout(new GridLayout(0,1));
cb = new MyComboBox(data);
c.add(cb);
btn = new JButton("Print");
btn.addActionListener(this);
c.add(btn);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public void actionPerformed(ActionEvent ae) {
System.out.println(cb.getSelectedItem().toString());
cb.requestFocus();
}
public static void main(String[] args) {
new JComboBoxTest2();
}
class MyComboBox extends JComboBox implements KeyListener, JComboBox.KeySelectionManager {
private long accessTime;
private StringBuffer sb = new StringBuffer();
MyComboBox(String[] s){
super(s);
setKeySelectionManager(this);
addKeyListener(this);
}
public int selectionForKey(char aKey, ComboBoxModel aModel) { return -1; }
public void keyPressed(KeyEvent event) { }
public void keyTyped(KeyEvent event) {
char c = event.getKeyChar();
if ((accessTime + 800) < System.currentTimeMillis()) {
sb = new StringBuffer();
}
sb.append(c);
accessTime = System.currentTimeMillis();
String lower = sb.toString().toLowerCase();
System.out.println("Search String: " + lower);
for(int i=0; i<getItemCount(); i++) {
if(((String)getItemAt(i)).toLowerCase().startsWith(lower)) {
setSelectedIndex(i);
break;
}
}
}
public void keyReleased(KeyEvent event) { }
}
}
--------
Cannot use IME on JComboBox
OPERATING SYSTEMS
-----------------
Windows XP SP3 x86 (Japanese)
Windows Server 2008 R2 Enterprise SP1 (Japanese)
Not Reproducible using JDK 7 b130 on Linux
Not Reproducible using 1.6.0_24-b07 on Windows
FULL JDK VERSION
----------------
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b130)
Java HotSpot(TM) Client VM (build 21.0-b02, mixed mode)
DESCRIPTION
-----------
On Windows platform, we cannot use IME on JComboBox after opening drop-down list. I applied KeyListener against JComboBox, it should work. Works fine with JDK 7 b130 on Linux, and 1.6.0_24-b07 on Windows
REPRODUCTION INSTRUCTIONS
-------------------------
This testing requires Japanese Windows
1. Compile and run JComboBoxTest2.java from Command Prompt
> javac JComboBoxTest2.java
> java JComboBoxTest2
2. Turn on IME, type "ma", Japanese "MA" is displayed on preedit area
3. Press Return key to commit
4. Japanese "MAMIMUMEMO" is displayed on JComboBox
5. Open drop-down list on JComboBox
6. Check IME status. If IME is turned off, please turn it on
(If it's turned off, it may not be turned on)
7. If IME is on, type "wa", Japanese "WA" should be displayed on preedit
area, but "wa" is displayed in Command Prompt
TESTCASE SOURCE
---------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class JComboBoxTest2 extends JFrame implements ActionListener {
MyComboBox cb = null;
JButton btn = null;
static String[] data = new String[] {
"\u3042\u3044\u3046\u3048\u304a", "\u304b\u304d\u304f\u3051\u3053",
"\u3055\u3057\u3059\u305b\u305d", "\u305f\u3061\u3064\u3066\u3068",
"\u306a\u306b\u306c\u306d\u306e", "\u306f\u3072\u3075\u3078\u307b",
"\u307e\u307f\u3080\u3081\u3082", "\u3084\u3086\u3088",
"\u3089\u308a\u308b\u308c\u308d", "\u308f\u3092\u3093",
};
JComboBoxTest2 () {
setTitle("JComboBoxTest2");
Container c = getContentPane();
c.setLayout(new GridLayout(0,1));
cb = new MyComboBox(data);
c.add(cb);
btn = new JButton("Print");
btn.addActionListener(this);
c.add(btn);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public void actionPerformed(ActionEvent ae) {
System.out.println(cb.getSelectedItem().toString());
cb.requestFocus();
}
public static void main(String[] args) {
new JComboBoxTest2();
}
class MyComboBox extends JComboBox implements KeyListener, JComboBox.KeySelectionManager {
private long accessTime;
private StringBuffer sb = new StringBuffer();
MyComboBox(String[] s){
super(s);
setKeySelectionManager(this);
addKeyListener(this);
}
public int selectionForKey(char aKey, ComboBoxModel aModel) { return -1; }
public void keyPressed(KeyEvent event) { }
public void keyTyped(KeyEvent event) {
char c = event.getKeyChar();
if ((accessTime + 800) < System.currentTimeMillis()) {
sb = new StringBuffer();
}
sb.append(c);
accessTime = System.currentTimeMillis();
String lower = sb.toString().toLowerCase();
System.out.println("Search String: " + lower);
for(int i=0; i<getItemCount(); i++) {
if(((String)getItemAt(i)).toLowerCase().startsWith(lower)) {
setSelectedIndex(i);
break;
}
}
}
public void keyReleased(KeyEvent event) { }
}
}
- relates to
-
JDK-7061057 Regression : NativeIM and JavaIM are activated at same time
-
- Open
-
-
JDK-6853146 Regression: on-the-spot input is broken in AWT Peered components
-
- Closed
-
-
JDK-7071248 IME composition window does not disappear when file dialog is closed : Japanese WinXP
-
- Closed
-
-
JDK-6806217 implement synthetic focus model for MS Windows
-
- Closed
-
-
JDK-7034291 Regression : Preedit String on active client is committed into unexpected component
-
- Closed
-