【问题标题】:Pass value from one JtextField to another?将值从一个 JtextField 传递到另一个?
【发布时间】:2013-10-31 05:22:25
【问题描述】:

//java swing 新手,需要帮助获取第一个 Jtextfield 中的文本以显示在 //second second jtextfield 中????我很年轻,刚开始学习java,需要一些帮助。以下是我已经完成的代码,谢谢

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class lab4 extends JFrame implements ActionListener {

    int numClicks = 0;
    String text = null;

    public lab4() {
        setSize(1200, 700);
        setVisible(true);
        JButton button = new JButton("Hello i am a button");
        button.addActionListener(this);
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));

        panel.add(button);
        this.add(panel);

        JMenuBar menubar = new JMenuBar();
        this.setJMenuBar(menubar);
        JMenu file = new JMenu("File");
        menubar.add(file);
        JMenuItem open = new JMenuItem("Open File");
        file.add(open);

        final JTextField myField = new JTextField(10);
        myField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String text = myField.getText();
//System.out.println("Hello");

            }
        });

        final JTextField myField2 = new JTextField(10);
        yField2.setText(myField.getText());
        panel.add(myField);

        panel.add(myField2);
        setVisible(true);
    }
}

    public static void main(String[] args) {
        new lab4();

    }

    public void actionPerformed(ActionEvent e) {
        numClicks++;
        System.out.println("The button has been clicked " + numClicks + " times");

    }
}

【问题讨论】:

  • 顺便说一句,您的mainactionPerformed 方法是在主类主体之外声明的,并且您有一个额外的},这意味着您的代码甚至无法编译。 ..

标签: java swing jtextfield settext


【解决方案1】:

是的,你做得很好。如果在一个动作事件上按顺序发生不止一项工作,那么您需要将序列放入相应的actionPerformed 函数中。所以:

myField.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    String text = myField.getText();
    myField2.setText(text);

}
});

JComponents 监听器意味着它们仅在动作事件发生时才会监听和响应。他们将通过注册到事件源(JCompnent)的ActionListener 实例和addActionListener() 函数得到通知,就像您所做的那样。

还有一点需要注意:在声明之前,您不能访问任何语句中的字段。编译器在对它进行任何操作之前需要了解有关该字段的信息。所以你必须在它的访问代码之前声明myField2,例如myField1anonymous classActionListeneractionPerformed函数。

教程资源:

  1. Writing Event Listeners
  2. Anonymous Class

【讨论】:

    【解决方案2】:

    您可以共享模型:

    JTextField textField1 = new JTextField(...);
    JTextField textField2 = new JTextField(...);
    textField2.setDocument( textField1.getDocument() ):
    

    现在,每当您在任一文本字段中键入文本时,另一个文本字段也会更新。

    【讨论】:

    • 恭喜100k ;)
    • 谢谢,我只用了 1151 天……而且还在继续计算 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多