Java 按下按钮时,如何从文本字段获取文本?

Java 按下按钮时,如何从文本字段获取文本?,java,events,applet,textfield,Java,Events,Applet,Textfield,我是编程界的新手,所以我的技能很差。无论如何,我必须为一个学校项目写一个程序,所以我想出了一个看起来很容易的程序。 基本上,我只有一个框架、一个按钮、一个面板(稍后我将使用)和两个文本字段。我需要的是,当我在第一个文本字段中写入内容并按下按钮时,文本将被扫描并放入一个变量(以后必须处理)。事实上,我认为我做的事情不对(就像我说的,我只是一个初学者),我不知道如何得到我想要的。 代码如下: import java.awt.*; import java.awt.event.WindowEvent;

我是编程界的新手,所以我的技能很差。无论如何,我必须为一个学校项目写一个程序,所以我想出了一个看起来很容易的程序。 基本上,我只有一个框架、一个按钮、一个面板(稍后我将使用)和两个文本字段。我需要的是,当我在第一个文本字段中写入内容并按下按钮时,文本将被扫描并放入一个变量(以后必须处理)。事实上,我认为我做的事情不对(就像我说的,我只是一个初学者),我不知道如何得到我想要的。 代码如下:

import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.*;
import java.io.*;
import java.util.Timer.*;
import java.util.TimerTask.*;
import java.util.Scanner.*;
import java.lang.*;
import javax.sound.sampled.*; 

public class ExamProgram {

public TextField scrivi;
public TextField vuraid;
public Button b;
public String s;


 static class int timer4action(){return 0;}

 static class chiusura implements WindowListener { 
 public void windowClosing (WindowEvent ev) {System.exit(0);} 
 public void windowClosed (WindowEvent ev) {} 
 public void windowOpened (WindowEvent ev) {} 
 public void windowActivated (WindowEvent ev) {} 
 public void windowDeactivated (WindowEvent ev) {} 
 public void windowIconified (WindowEvent ev) {} 
 public void windowDeiconified (WindowEvent ev) {} 
}  //Window events

public ExamProgram(){ //Constructor
    //Frame inizialization
    Frame f = new Frame ("Artificial wife");
    f.setLayout(null);
    f.setBackground(Color.white);
    Image icona = Toolkit.getDefaultToolkit().getImage("src\\img\\Kurisu_profile.png");
    f.setIconImage(icona);
    f.setSize(800,600);
    f.setVisible(true);
    f.setResizable(false);
    f.addWindowListener(new chiusura());
    //Menù initialization.
    MenuBar mb = new MenuBar();
    Menu m1 = new Menu("File");
    Menu m2 = new Menu("Opzioni");
    Menu m3 = new Menu("Aiuto");
    MenuItem mi1 = new MenuItem("Nuovo");
    MenuItem mi2 = new MenuItem("Carica");
    MenuItem mi3 = new MenuItem("Chiudi");
    MenuItem mi4 = new MenuItem("Cambia lingua");
    MenuItem mi5 = new MenuItem("FAQ");
    MenuItem mi6 = new MenuItem("Manuale Elettronico");
    m1.add(mi1); m1.add(mi2); m1.add(mi3);
    m2.add(mi4);
    m3.add(mi5);m3.add(mi6); 
    mb.add(m1); mb.add(m2); mb.add(m3);
    f.setMenuBar(mb);
    //Panel initialization
    Panel waifu = new Panel();
    waifu.setBackground(Color.PINK);
    waifu.setBounds(25, 50, 750, 450);
    waifu.setVisible(true);
    f.add(waifu);
    //Textfield n°1 initialization
    scrivi = new TextField();
    scrivi.setVisible(true);
    scrivi.setBackground(Color.pink);
    scrivi.setBounds(200,530, 400, 30);
    f.add(scrivi);

    //Button initialization
    b = new Button("Send");
    b.setBackground(Color.PINK);
    b.setBounds(650, 530, 50, 30);
    f.add(b);

    //Event and Textfield n°2 initialization
    vuraid = new TextField();
    vuraid.setVisible(true);
    vuraid.setEditable(false);
    vuraid.setBackground(Color.green);
    vuraid.setBounds(200,570, 400, 30);
    f.add(vuraid);
    b.addActionListener(new send());

}

public static void main(String[] args){
    new ExamProgram();
}
}
我想从这次活动中得到的行动:

import java.lang.*;
import java.awt.*;
import java.awt.event.*;

public class send implements ActionListener
{

    public void actionPerformed(ActionEvent e)
    {
       String textDialogue = new String();
       textDialogue = scrivi.getText();
       vuraid.setText(textDialogue);
    }
}
希望我能恰当地表达自己,这样你就能明白我想问的。为了让代码更容易理解,我试图删除所有意大利语文本。
非常感谢您的关注

我首先建议在您的示例中格式化代码,因为它太离谱了。除此之外,请描述您遇到的问题。我运行了您的示例,它似乎运行良好

我输入了第一个文本字段的一些文本,点击send,文本显示在第二个文本字段上。那到底是什么问题呢

除此之外,我建议对代码进行一些修改。首先,您可以使用匿名类来获得相同的功能,而不是创建一个实现
ActionListener
的新类。而不是
b.addActionListener(new send())你可以做很多事情:

b.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //your logic goes here...
        }
    });
更好的是,您可以使用lambda表达式在一行中执行相同的操作:

b.addActionListener(e -> {
        // logic goes here
    });
在这两种情况下,您都不需要创建新类。说到这里,我建议您检查有关类命名的命名约定。实现
ActionListener
的名为
send
的类名应以大写字母开头,所有类都应如此

在所有情况下,避免这样做
String something=new String()。这将有效地创建一个新的字符串对象,该对象是无编号的,可能会导致意外情况的发生(更多信息,请查看此处)


但是,在所有情况下,请重新格式化代码并解释您遇到的确切错误

您的
send
类需要对包含信息的对象(即文本字段)的引用

“最简单”的解决方案是通过其构造函数将文本字段的引用传递给
send

b.addActionListener(new send(vuraid));
显然,您需要更新
send
类来支持此功能

public class send implements ActionListener {
    private TextField vuraid

    public send(TextField vuraid) {
        this.vuraid = vuraid;
    }
    //...
这是一个比较普遍的概念。有关更多详细信息,请参阅

警告的话。您使用的主要是基于AWT的组件。AWT在18年前被Swing取代,你可能想考虑更新< /P> 我还鼓励您了解布局管理API是如何工作的,因为它将解决您在不同计算机之间遇到的许多常见问题

从查看更多细节开始

你通常也会发现这很令人感动

f.setSize(800,600);
f.setVisible(true);
f.setResizable(false);
main
方法的末尾,并按以下顺序调用它们

f.setResizable(false);
f.setSize(800,600);
f.setVisible(true);

这是为了解决首次显示UI时组件不可见的问题。使用
setresizeable
时还需要考虑一些因素,因为它可以更改窗口边框的大小和可用的窗口大小

操作侦听器应添加到按钮,因为您希望按钮单击时文本字段中的文本如下所示:

b = new Button("Send");
b.setBackground(Color.PINK);
b.setBounds(650, 530, 50, 30);
b.addActionListener(this);
f.add(b);
同时删除行
b.addActionListener(newsend())来自您的代码(语法错误)

要从Textfield1提取文本并在按钮上的Textfield2中显示,请单击:

public void actionPerformed(ActionEvent e)
{
String textDialogue = scrivi.getText();
vuraid.setText(textDialogue);
}
}

祝你一切顺利

基本上,每当你按下一个按钮,你就想把这个类放在你已经制作好的类中,

因此,让我们假设在名为
ExamProgram
类中,您将执行以下操作:

public class ExamProgram {
    //Additional information here...

    public ExamProgram() {
        //Additional information here...

        theHandler handler=new theHandler();
        someTextField.addActionListener(handler);
    }

    public class theHandler implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == someTextField) {
                //Button Pressed Actions Go here...
            }
        }
    }
}
theHandler
Action侦听器类是您用来测试按钮是否被按下,以及当按钮被按下时应该发生什么

现在如果你不(或不能)这样做,那么你就必须这样做

在此部分中,您的组件必须是
静态
最终

final JTextField someTextField=new JTextField("Example");

someTextField.addActionLister(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        //Button Pressed Actions Go here...
    }
}

在纠正这个错误的同时…程序员发现了我的错误,我应该注意到各种文本字段的声明超出了范围…我还建议您遵循Java中的命名约定,比如类名应该以大写字母开头。