簡體   English   中英

JTextArea無法正確閱讀文本

[英]JTextArea won't read in text properly

我似乎無法使它正常工作。 我的分配只會讓我們使用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

正如您將在此站點上一次又一次地閱讀一樣,請不要將KeyListener與文本組件(例如JTextArea因為這會弄亂文本組件的功能。 相反,使用DocumentListener當你希望檢測更改的狀態JTextArea它發生之后,或DocumentFilter如果你想之前被發布到文本組件檢測(也可能改變)切換到文本組件。

我看到您正在使用JTextArea(1,25)或單行JTextArea ,這使我問:為什么不使用JTextField 如果執行此操作並希望捕獲ENTER鍵,則只需將ActionListener添加到JTextField

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM