2015-10-08 109 views
2

我似乎無法得到這個工作。我的任務只會讓我們使用JTextAreas。 我的代碼的問題是我無法在TextArea中讀取它的文本。目標是在用戶鍵入輸入內容後輸入用戶輸入後運行邏輯。JTextArea不會正確地讀取文本

當我運行代碼,我只能在一個字符鍵入..和圖形用戶界面呈現的原因,我不能想出一個零之後的字符。例如:[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 

回答

4

如您在本網站再次讀取時間和時間 - 不要使用帶有文本分量的KeyListenerJTextArea,因爲這會搞亂文本組件的功能。相反,使用時要檢測更改JTextArea的狀態爲DocumentListener它發生之後,或DocumentFilter如果你想之前被髮布到文本組件檢測(也可能改變)切換到文本組件。

我看到您使用的是JTextArea(1,25)或單行JTextArea,這讓我問:爲什麼不使用JTextField?如果你這樣做,並希望陷阱ENTER按鍵,那麼你可以簡單地添加一個ActionListenerJTextField

+0

我是GUI/Java編程新手。我會研究DocumentListeners,謝謝。我很樂意使用textField,但這是家庭作業,他們要求我們使用TextArea來代替TextField。 – user3712626