-1

我的问题是,当我在 jtextfield 中插入名字时,该记录的相应姓氏会自动显示在另一个 jtextfield 中吗?

这意味着我不想一次又一次地插入相同的数据..一旦我在数据库中插入记录,下次在下一个表单中自动插入相同的记录

所以有人在这里给我片段吗?提前致谢

4

2 回答 2

3

@MirroredFate(在此处的另一个答案中发表评论)永远不要使用 KeyListener,使用 DocumentListener,然后您可以在 JTextComponents 中确定所有可能的用户输入类型

在此处输入图像描述

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();
            }
        });
    }
}
于 2013-04-05T06:50:05.087 回答
0

你真的想看看这个文档:http ://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

您的代码将如下所示:

JTextField firstName = new JTextField();
JTextField lastName = new JTextField();
KeyListener kl = MyCustomKeyListener();
firstName.addKeyListener(kl);

在您的自定义KeyListener中,重写keyTyped()查找 的值的方法firstName,在数据库中查找以找到对应的姓氏,然后使用它来设置 的值lastName

通过这种方式,您可以使每次键入键时都会执行此操作,或者您可以检查并确保只有特定键触发操作(例如按return)。

另外,我应该提到您可以为此使用匿名类。而不是创建MyCustomKeyListener,你可以说:

firstName.addKeyListener(new KeyListener(){
    void keyTyped(keyEvent e){
        //whatever you want to happen when the key is typed in here
    }
});

编辑:正如已经指出的那样,使用DocumentListener. 这是通过访问底层 JTextField 的文档并向其中添加侦听器来完成的,如此处的答案所示:Value Change Listener to JTextField

于 2013-04-05T06:10:22.237 回答