【问题标题】:JTextArea won't read in text properlyJTextArea 无法正确读取文本
【发布时间】:2015-10-08 21:32:05
【问题描述】:

我似乎无法让它工作。我的任务只会让我们使用 JTextAreas。 我的代码的问题是我无法在 TextArea 中读取它的文本。目标是在用户输入输入后输入 ENTER 后运行逻辑。

当我运行代码时,我只能输入一个字符。由于我无法弄清楚的原因,GUI 在零之后显示了该字符。例如:[0b] 将在 TextArea 中。请帮忙,我想不通。

public class ArabicToRomanGUI extends JFrame
{
private static final long serialVersionUID = 1L;
private JTextArea enterRomanNumber = new JTextArea();
JLabel label = new JLabel();
JPanel panel = new JPanel();
JFrame frame = new JFrame();


//TestArea contructor adds jtextArea to jframe
public ArabicToRomanGUI()
{
    super("Convert a Roman Numeral");
    setLayout(new FlowLayout());

    //Text field to enter a roman numeral
    enterRomanNumber = new JTextArea(1,25);
    enterRomanNumber.setText("Delete this text and Enter a Roman Numerial Here!");
    //enterRomanNumber.setAlignmentX(0);
    //enterRomanNumber.setAlignmentY(0);

    add(enterRomanNumber);

    HandlerForTextArea handler = new HandlerForTextArea();
    enterRomanNumber.addKeyListener(handler);
}

private class HandlerForTextArea implements KeyListener
{
    //used to process text field events
    @Override
    public void keyTyped(KeyEvent e) 
    {
            String userInput = "";
            userInput = enterRomanNumber.getText();
            userInput = userInput.toUpperCase();

            ConversionLogic.ConvertFromRomanToArabic(userInput); //converts user string of Roman numerals to an int in arabic
            String arabicNumberAsString = ConversionLogic.getConvertedRomanNumeral();
            enterRomanNumber.setText(arabicNumberAsString);

            //user pressed enter in JTextField enterNumberField
            if(e.getKeyCode() == KeyEvent.VK_ENTER)
            {
                //enterRomanNumber.setText(arabicNumberAsString);
                if (ConversionLogic.getCheckFail() == true)
                {
                    JOptionPane.showMessageDialog(frame, "The Roman Numeral entered is Invalid", "Error", JOptionPane.ERROR_MESSAGE);
                }
                else
                {
                    JOptionPane.showMessageDialog(frame, "The arabic equivalent is " + arabicNumberAsString + "." , "Conversion Successful", JOptionPane.PLAIN_MESSAGE);
                }
            }
    }

    @Override
    public void keyPressed(KeyEvent e) {
        //not used

    }

    @Override
    public void keyReleased(KeyEvent e) {
        //not used

    }

}//end inner class TextFieldHandler
}//end class ArabicToRomainGUI

【问题讨论】:

    标签: java swing jtextarea


    【解决方案1】:

    您将在此站点上一次又一次地阅读 - 不要将 KeyListenerJTextArea 等文本组件一起使用,因为这会扰乱文本组件的功能。相反,当您希望在 JTextArea 发生后检测其状态的更改时,请使用 DocumentListener,如果您希望在文本组件发布之前检测(并可能更改)文本组件的更改,请使用 DocumentFilter文本组件。

    我看到您正在使用 JTextArea(1, 25) 或单行 JTextArea,这让我问:为什么不使用 JTextField?如果您这样做并且想要捕获 ENTER 键按下,那么您可以简单地将 ActionListener 添加到 JTextField

    【讨论】:

    • 我是 GUI/Java 编程新手。我会调查 DocumentListeners,谢谢。我很想使用 textField ,但这是家庭作业,他们要求我们使用 TextArea 代替 TextField。
    猜你喜欢
    • 2021-02-07
    • 2015-01-22
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2019-03-30
    • 2018-07-24
    • 2020-03-11
    相关资源
    最近更新 更多