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中的命名约定,比如类名应该以大写字母开头。