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
等文本组件一起使用,因为这会扰乱文本组件。当您希望检测 JTextArea
状态发生变化时使用 DocumentListener
,或者如果您希望检测(并可能更改)对文本的更改,请使用 DocumentFilter
组件发布到文本组件之前。
我看到您使用的是 JTextArea(1, 25) 或单行 JTextArea
,这让我问:为什么不使用 JTextField
?如果你这样做并想捕获 ENTER 按键,那么你可以简单地添加一个 ActionListener
到 JTextField
.
我似乎无法让它工作。我的作业将只让我们使用 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
等文本组件一起使用,因为这会扰乱文本组件。当您希望检测 JTextArea
状态发生变化时使用 DocumentListener
,或者如果您希望检测(并可能更改)对文本的更改,请使用 DocumentFilter
组件发布到文本组件之前。
我看到您使用的是 JTextArea(1, 25) 或单行 JTextArea
,这让我问:为什么不使用 JTextField
?如果你这样做并想捕获 ENTER 按键,那么你可以简单地添加一个 ActionListener
到 JTextField
.