[英]Sending a Text from JTextfield to another Jtextfield using the enter button
我需要的是能够创建这个盒子。 我需要的是将文本输入到右侧的第一个框中,一旦按下输入按钮,右侧的文本就会转到左侧的文本。 左边的文本框不应该是可编辑的。 我不是一个非常熟练的程序员,但以下是我迄今为止所拥有的。 任何和所有的帮助表示赞赏。
//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(""), x = 0, y = 0);
constraints.gridwidth = 1;
addGB(new JLabel(""), x = 2, y =0);
constraints.gridwidth = 1;
addGB(new JLabel(""), x = 2, y = 2);
constraints.gridwidth = 1;
addGB (new JLabel(""), x = 0, 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);
}
}
一种方法是声明一个字符串字段,这样您就可以将输入字段中输入的文本存储到该字段中,以便以后访问。
在您的构造函数中,声明字符串,例如:
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
}
}
});
然后你可以在保存字符串之前做一些数据验证,只是为了确保用户使用 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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.