JTextArea 无法正确读取文本



我似乎不能让这个工作。我的作业只允许我们使用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

正如您将在本网站反复阅读的那样,不要将KeyListenerJTextArea这样的文本组件一起使用,因为这会使文本组件的功能混乱。相反,当您希望检测JTextArea状态发生变化后,请使用DocumentListener,或者如果您希望检测(并可能更改)文本组件在发布到文本组件之前的更改,请使用DocumentFilter

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

最新更新