【问题标题】:Using getText to output a text, but missing the last character when outputting on console使用 getText 输出文本,但在控制台输出时缺少最后一个字符
【发布时间】:2021-07-12 20:54:02
【问题描述】:

我正在尝试从JTextField 获取输入并使用getText() 在控制台上输出。它似乎正在工作,只是它没有打印出最后一个字符。如果我输入Hello 输出将是Hell,如果我输入Hello there 输出将是Hell ther .... 缺少最后一个字符。

public class Generator {

    private JFrame frame;
    private JTextField textRoomName;
    private String roomName;
    
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Generator window = new Generator();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Generator() {
        initialize();
        
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.getContentPane().setBackground(Color.GRAY);
        frame.setForeground(Color.BLACK);
        frame.setBackground(Color.BLACK);
        frame.setBounds(100, 100, 450, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
        textRoomName = new JTextField();
        textRoomName.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                roomName = textRoomName.getText();
                
            }
        });
        textRoomName.setBounds(140, 52, 212, 20);
        frame.getContentPane().add(textRoomName);
        textRoomName.setColumns(10);
        
        JButton btnGenerate = new JButton("Generate");
        btnGenerate.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println(roomName);
            }
        });
        btnGenerate.setBounds(324, 427, 89, 23);
        frame.getContentPane().add(btnGenerate);
    }
}

【问题讨论】:

    标签: java swing character jtextfield keylistener


    【解决方案1】:
    textRoomName.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            roomName = textRoomName.getText();
            
        }
    });
    

    不要使用 KeyListener。生成 keyPressed 事件时,文档尚未使用文本更新。

    要使用的更好的 API 是 DocumentListener

    阅读 Swing 教程中的以下部分:

    1. Listening For Changes on a Document
    2. How to Write a DocumentListener

    了解更多信息和示例。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多