繁体   English   中英

使用回车按钮将文本从 JTextfield 发送到另一个 Jtextfield

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM