如何在用户修改后获取 JTextField 的值 [java]
How to take the value of a JTextField after being modified by the user [java]
我有一个空的 JTextField,用户应该用一个 int 数字修改它。但是,即使 JTextFiled 已填充整数,当我从该 JTextField 获取字符串时,字符串结果为“”(-> 空)。
我怎样才能保存字段的新值?我应该怎么办?
问题是:
//Class where JTextField is initialized:
javax.swing.JTextField tMax = new javax.swing.JTextField();
tMax.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
tMaxKeyTyped(evt);
}
});
private void tMaxKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
char c = evt.getKeyChar();
if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent.VK_DELETE)) {
getToolkit().beep();
evt.consume();
}
}
public String getTMax() {
String tMaxString = tMax.getText();
return tMaxString;
}
//Class where tMax should be used
//code
private void runBtnActionPerformed(java.awt.event.ActionEvent evt) {
Panel class1 = new Panel();
String tMaxString = class1.getTMax();
System.out.println(tMaxString);
当我 运行 程序并单击 运行 按钮时 Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
。
如何保存修改后的 JTextField?
非常感谢。
您的 tMax 字段定义了两次。一次作为实例变量,一次作为局部变量。
去掉局部变量:
//javax.swing.JTextField tMax = new javax.swing.JTextField();
tMax = new javax.swing.JTextField();
even once the JTextFiled has been filled with an integer,
不要在键入文本时使用 KeyListener 对其进行编辑。相反,您应该使用:
最后我使用 DocumentListener 解决了这个问题。解决方法如下:
package AppPackage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class Test {
JFrame frame = new JFrame("Test");
JPanel panel = new JPanel();
JTextField option = new JTextField("HI", 10);
static String optionString;
public Test() {
option.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
warn();
}
@Override
public void removeUpdate(DocumentEvent e) {
warn();
}
@Override
public void changedUpdate(DocumentEvent e) {
warn();
}
public void warn() {
optionString = option.getText();
System.out.println(optionString);
}
});
panel.add(option);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test();
}
});
}
}
希望这对某人有用。
我有一个空的 JTextField,用户应该用一个 int 数字修改它。但是,即使 JTextFiled 已填充整数,当我从该 JTextField 获取字符串时,字符串结果为“”(-> 空)。 我怎样才能保存字段的新值?我应该怎么办? 问题是:
//Class where JTextField is initialized:
javax.swing.JTextField tMax = new javax.swing.JTextField();
tMax.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
tMaxKeyTyped(evt);
}
});
private void tMaxKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
char c = evt.getKeyChar();
if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent.VK_DELETE)) {
getToolkit().beep();
evt.consume();
}
}
public String getTMax() {
String tMaxString = tMax.getText();
return tMaxString;
}
//Class where tMax should be used
//code
private void runBtnActionPerformed(java.awt.event.ActionEvent evt) {
Panel class1 = new Panel();
String tMaxString = class1.getTMax();
System.out.println(tMaxString);
当我 运行 程序并单击 运行 按钮时 Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
。
如何保存修改后的 JTextField? 非常感谢。
您的 tMax 字段定义了两次。一次作为实例变量,一次作为局部变量。
去掉局部变量:
//javax.swing.JTextField tMax = new javax.swing.JTextField();
tMax = new javax.swing.JTextField();
even once the JTextFiled has been filled with an integer,
不要在键入文本时使用 KeyListener 对其进行编辑。相反,您应该使用:
最后我使用 DocumentListener 解决了这个问题。解决方法如下:
package AppPackage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class Test {
JFrame frame = new JFrame("Test");
JPanel panel = new JPanel();
JTextField option = new JTextField("HI", 10);
static String optionString;
public Test() {
option.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
warn();
}
@Override
public void removeUpdate(DocumentEvent e) {
warn();
}
@Override
public void changedUpdate(DocumentEvent e) {
warn();
}
public void warn() {
optionString = option.getText();
System.out.println(optionString);
}
});
panel.add(option);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test();
}
});
}
}
希望这对某人有用。