Dal*_*ito 11 java unicode applet swing windows-7
我有几种用于编写(繁体中文)台湾人的输入方法,它们与Windows 7一起提供.此外,所有输入方法都有一个选项来切换字符宽度(单字节/双字节字符).
如果我在Java应用程序中选择其中一个输入方法并将字符宽度设置为半角(单字节字符模式),我可以在JTextField中成功输入文本.但是,如果应用程序显示一些对话框(例如JOptionPane)或弹出窗口,则输入法字符宽度将自动更改为全角(双字节字符模式).之后,用户必须手动切换到半角字符.
我可以使用Java类"InputContext"以编程方式打开或关闭输入方法,但是我无法控制输入方法是否设置为全宽/半宽(单/双字节)字符模式.
我想也许可以从Windows输入法设置中禁用它,但是没有与字符宽度的自动切换相关的选项.
问题是:有没有办法处理(禁用)这种自动切换?
以下是使用上述输入方法对此进行测试的示例代码:
public class Example implements ActionListener {
JFrame f = new JFrame("pasod");
JTextField txt = new JTextField();
Button btn = new Button("Locale");
public Example() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout());
btn.addActionListener(this);
panel.add(btn);
panel.add(txt);
f.add(panel);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setSize(800, 100);
f.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(btn, "Neso", "Neso",
JOptionPane.INFORMATION_MESSAGE);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
好吧,我已经通过 Java 源代码进行了跟踪,寻找任何突出的内容;
您将JOptionPane.showMessageDialog()其称为重载JOptionPane.showOptionDialog();
public static int showOptionDialog(Component parentComponent,
Object message, String title, int optionType, int messageType,
Icon icon, Object[] options, Object initialValue)
throws HeadlessException {
JOptionPane pane = new JOptionPane(message, messageType,
optionType, icon,
options, initialValue);
pane.setInitialValue(initialValue);
pane.setComponentOrientation(((parentComponent == null) ?
getRootFrame() : parentComponent).getComponentOrientation());
int style = styleFromMessageType(messageType);
JDialog dialog = pane.createDialog(parentComponent, title, style);
pane.selectInitialValue();
dialog.show();
//..Result handling code
}
Run Code Online (Sandbox Code Playgroud)
所以我们研究createDialog();
public JDialog createDialog(String title) throws HeadlessException {
int style = styleFromMessageType(getMessageType());
JDialog dialog = new JDialog((Dialog) null, title, true);
initDialog(dialog, style, null);
return dialog;
}
Run Code Online (Sandbox Code Playgroud)
JDialog所以我们检查所有调用的构造函数dialogInit();
protected void dialogInit() {
enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.WINDOW_EVENT_MASK);
setLocale( JComponent.getDefaultLocale() );
setRootPane(createRootPane());
setRootPaneCheckingEnabled(true);
if (JDialog.isDefaultLookAndFeelDecorated()) {
boolean supportsWindowDecorations =
UIManager.getLookAndFeel().getSupportsWindowDecorations();
if (supportsWindowDecorations) {
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
}
}
sun.awt.SunToolkit.checkAndSetPolicy(this, true);
}
Run Code Online (Sandbox Code Playgroud)
在这里我们发现了setLocale( JComponent.getDefaultLocale() );;
因此,每当您创建 JDialog 时,无论是否间接将程序的语言环境重置为默认值,都会出现这种情况,我猜这包括重置您的输入设置。
有几种方法可以设置默认区域设置(以编程方式、系统属性或运行时参数);详细信息可以在这里找到
希望对您有帮助
| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |