2 qq 40079609 qq_40079609 于 2018.03.12 14:01 提问

ubuntu下的java swing应用JTextField无法输入中文

在ubuntu中安装好了图形界面,搜狗输入法,企鹅fcitx,
可以在浏览器,系统控制台等地方输入中文,并且切换成英文输入。
但是启动好swing应用后不能在文本框里输入中文,输入法显示是搜狗输入法,输入法那里也无法通过快捷键切换。
有没有遇到类似情况的啊

2个回答

qq_36383462
qq_36383462   2018.03.12 14:51
已采纳

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Main {

public static void main(String[] args) throws Exception {
    JFrame frame = new JFrame("JTextField 只能输入中文,字母,数字");
    JLabel label = new JLabel("输入:");
    JTextField textField = new JTextField(20);
    // 当 JTextField 中内容发生改变时触发
    textField.addCaretListener(new TextFieldInputListener());

    JPanel panel = new JPanel();
    panel.add(label);
    panel.add(textField);

    frame.add(panel, BorderLayout.CENTER);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

}

class TextFieldInputListener implements CaretListener {

@Override
public void caretUpdate(CaretEvent e) {
    JTextField textField = (JTextField) e.getSource(); // 获得触发事件的 JTextField
    String text = textField.getText();
    if (text.length() == 0) {
        return;
    }
    char ch = text.charAt(text.length() - 1);
    if (!(ch >= '0' && ch <= '9' // 数字
            || ch >= 'A' && ch <= 'z' // 字母
            || ch >= '\u4E00' && ch <= '\u9FA5')) { // 中文,最常用的范围是 U+4E00~U+9FA5,也有使用 U+4E00~ U+9FFF 的,但目前 U+9FA6~U+9FFF 之间的字符还属于空码,暂时还未定义,但不能保证以后不会被定义
        JOptionPane.showMessageDialog(textField, "只能输入中文,字母,数字", "提示", JOptionPane.INFORMATION_MESSAGE);
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                // 去掉 JTextField 中的末尾字符
                textField.setText(text.substring(0, text.length() - 1));
            }
        });
    }
}

}

Moluth
Moluth   2018.03.12 14:19

有些输入法是可以正常输如中文的,某些输入中文时,显示的是拼音格式 比如输入“你好” 显示 “ni'hao”,然后退格键会报错。这是swing框架的问题

qq_40079609
qq_40079609 而且windows下没有这种问题,开着搜狗按“ni hao”就显示拼音框了
3 个月之前 回复
qq_40079609
qq_40079609 并没有退格键、空格键什么的,只是开着搜狗输入“ni hao”就只是“ni hao”,和没开输入法的感觉一样
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!