java textfield有一个问题,即当我覆盖jtextfield中的所有文本并立即向jtextfield中输入新文本(不要传递backspace),然后使用函数gettext()获取前一个字符串而不是当前字符串。请帮忙找些解决办法。提前谢谢。
zu0ti5jz1#
例如:
import java.awt.GridLayout; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; public class TextLabelMirror { private JPanel mainPanel = new JPanel(); private JTextField field = new JTextField(20); private JTextField field1 = new JTextField(20); public TextLabelMirror() { field.getDocument().addDocumentListener(new DocumentListener() { @Override public void changedUpdate(DocumentEvent e) { updateLabel(e); } @Override public void insertUpdate(DocumentEvent e) { updateLabel(e); } @Override public void removeUpdate(DocumentEvent e) { updateLabel(e); } private void updateLabel(DocumentEvent e) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { field1.setText(field.getText()); } }); } }); mainPanel.setLayout(new GridLayout(1, 0, 10, 0)); mainPanel.add(field); mainPanel.add(field1); } public JComponent getComponent() { return mainPanel; } private static void createAndShowUI() { JFrame frame = new JFrame("TextLabelMirror"); frame.getContentPane().add(new TextLabelMirror().getComponent()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { createAndShowUI(); } }); } }
bqjvbblv2#
我刚刚测试了您描述的问题,向jtextfield添加了一个keylistener,并将gettext()方法的返回值打印到控制台。我发现,如果您想在keytyped或keypressed事件中使用gettext()方法,那么它总是落后一个字符(我不知道这一点,因为我通常只使用一个按钮来确认输入完文本,并将一个keyevent绑定到return键,以便在用户想通过按enter来确认时触发按钮)我认为这是由于textfield在事件被拍摄后更新了它的文本值。我假设这就是你所做的,因为你没有提供样本代码,所以我会删除这个答案,如果它不是。解决这个问题的方法是实现您想在keyreased方法中执行的操作。
public void keyReleased(Event e) { System.out.println(myTextField.getText()); }
yyhrrdl83#
不要使用keylister。在触发keypressed()事件时,该字符尚未添加到文档中。向jbutton添加actionlistener。这样,用户在完成文本输入后单击按钮。另外,在以后的帖子与你的sscce的问题,这样我们可以更好地了解你在试图做什么。
3条答案
按热度按时间zu0ti5jz1#
例如:
bqjvbblv2#
我刚刚测试了您描述的问题,向jtextfield添加了一个keylistener,并将gettext()方法的返回值打印到控制台。
我发现,如果您想在keytyped或keypressed事件中使用gettext()方法,那么它总是落后一个字符(我不知道这一点,因为我通常只使用一个按钮来确认输入完文本,并将一个keyevent绑定到return键,以便在用户想通过按enter来确认时触发按钮)
我认为这是由于textfield在事件被拍摄后更新了它的文本值。
我假设这就是你所做的,因为你没有提供样本代码,所以我会删除这个答案,如果它不是。
解决这个问题的方法是实现您想在keyreased方法中执行的操作。
yyhrrdl83#
不要使用keylister。在触发keypressed()事件时,该字符尚未添加到文档中。
向jbutton添加actionlistener。这样,用户在完成文本输入后单击按钮。
另外,在以后的帖子与你的sscce的问题,这样我们可以更好地了解你在试图做什么。