如何解决使用回车按钮将文本从JTextfield发送到另一个Jtextfield
我需要的是能够创建此框。我需要的是将文本输入到右侧的第一个框中,一旦按下回车按钮,则右侧的文本将转到左侧的文本。左侧的文本框不可编辑。我不是一个非常熟练的程序员,但是以下是我到目前为止的内容。任何帮助都将不胜感激。
//file: GridBag3.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
public class GridBag3 extends JPanel {
GridBagConstraints constraints = new GridBagConstraints();
JTextField enterText = new JTextField ("Type a word you remember and press ENTER");
JTextField recieveText = new JTextField("Recieve Text");
public GridBag3() {
GridBagConstraints constraints = new GridBagConstraints();
setLayout(new GridBagLayout());
constraints.weightx = 3.0;
constraints.weighty = 3.0;
constraints.fill = GridBagConstraints.BOTH;
int x,y; // for clarity
constraints.gridheight = 2; // span two rows
addGB(recieveText,x =2,y = 1);
constraints.gridheight = 2; // set it back
addGB(enterText,x = 0,y = 1);
constraints.gridwidth = 1; // span two columns
addGB(new JLabel("Recall"),x = 1,y = 0);
constraints.gridwidth = 2; // set it back
addGB(new JLabel(""),y = 0);
constraints.gridwidth = 1;
addGB(new JLabel(""),x = 2,y =0);
constraints.gridwidth = 1;
addGB(new JLabel(""),y = 2);
constraints.gridwidth = 1;
addGB (new JLabel(""),y =2);
constraints.gridwidth = 1;
}
void addGB(Component component,int x,int y) {
constraints.gridx = x;
constraints.gridy = y;
add(component,constraints);
}
public void actionPerformed(ActionEvent e)
{
enterText.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
recieveText.requestFocusInWindow();
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame("GridBag3");
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize(500,500);
frame.setLocation(200,200);
frame.setContentPane(new GridBag3());
frame.setVisible(true);
}
}
解决方法
一种方法是声明一个String字段,这样您就可以将在输入字段中输入的文本存储到该字段中,以便以后使用。
在构造函数中,声明String,类似:
private String savedText = "";
由于您是从已经包含字符的文本字段中获取输入的,例如“在此处输入文本”,所以好的做法是在用户可以输入任何内容之前清除它。这样,只有在文本字段中输入的内容才会存储在您的String变量中。
-首先,您需要在用户单击文本字段时清除它,以便使用mouseListener(mouseReleased或mouseClicked)。
textField.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
// set the textfield to empty String
textField.setText(" ");
}
});
第二,您设置您的actionListener(在文本字段内按下Enter键),就像您做的一样:
textfield.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Input action to be done here
}
}
});
然后您可以在保存String之前进行一些数据验证,只是为了确保用户使用if语句实际输入了某些内容,如下所示:
if(!userInput.getText().equals(" ")) { // get the text from the textfield,check if it's empty
//Do something
}
在IF语句中,将文本字段中的文本保存到String变量中,然后将其他组件的文本设置为该变量。
savedText = textField.getText(); // Set your String variable to the text in
the textField
label1.setText(savedText); // Set the text of your other component
我很快就做到了,所以可以原谅外观或功能上的任何问题,这里的目的只是为了展示听众的逻辑。我使用Intellij,因此如果您使用NetBeans或Eclipse,则我的构造函数将与您的不同,但是原理保持不变。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* @author ADsquared on 2020-10-22.
* @project Stack
*/
public class Recall {
private JPanel root;
private JTextField userInput;
private JLabel recallText;
private String saveText = " ";
public Recall() {
userInput.setText("Enter text to send");
userInput.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
userInput.setText(" ");
}
});
userInput.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(!userInput.getText().equals(" ")) {
saveText = userInput.getText();
recallText.setText(saveText);
}
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame("Recall");
frame.setContentPane(new Recall().root);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。