使用回车按钮将文本从JTextfield发送到另一个Jtextfield [英] Sending a Text from JTextfield to another Jtextfield using the enter button

查看:92
本文介绍了使用回车按钮将文本从JTextfield发送到另一个Jtextfield的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在此处输入图片描述

我需要的是能够创建此框.我需要的是将文本输入到右侧的第一个框中,然后按下回车按钮,右侧的文本转到左侧的文本.左侧的文本框不应是可编辑的.我不是一个非常熟练的程序员,但是以下是我到目前为止的内容.任何帮助都将不胜感激.

What i need is to be able to create this box. What I need is for the text to be entered into the first box on the right, and once the enter button is pressed, the text on the right goes to the text on the left. The left text box should not be editable. I am not a very skilled programmer, but the following is what I have so far. Any and all help is appreciated.

//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);
      }
    }

推荐答案

一种方法是声明一个String字段,这种方式可以将在输入字段中输入的Text存储到该字段中,以便以后使用.

One way would be to declare a String field, this way you could store the Text entered in your input field into that field to access it later.

在构造函数中,声明String,类似:

Inside your Constructor, declare the String, something like:

private String savedText = "";

由于您是从已经包含字符的文本字段获取输入的,因此类似在此输入文本"之类的方法,好的做法是在用户输入任何内容之前先将其清除.这样,只有在文本字段中输入的内容才会存储在您的String变量中.

Since you are getting your input from a textfield already containing characters, something like "Enter text here", good practice would be to clear it before the user can input anything. This way only what is entered in the textfield will be stored in your String variable.

-首先,您需要在用户单击文本字段时清除其文本字段,以便使用mouseListener(mouseReleased或mouseClicked).

-First, you need to clear your textfield when the user clicks in it so you use a mouseListener(mouseReleased or mouseClicked).

textField.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseReleased(MouseEvent e) {
        super.mouseReleased(e);
        // set the textfield to empty String
        textField.setText(" ");
    }
});

第二,您设置您的actionListener(在文本字段内按下Enter键),就像您做的一样:

Second, you set your actionListener (Enter key pressed inside textfield), something like you did:

textfield.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // Input action to be done here
        }
    }
});

然后,您可以在保存String之前进行一些数据验证,只是要确保用户通过使用if语句实际输入了某些内容,如下所示:

Then you can do some data validation before saving the String, just to make sure the user actually input something by using an if statement, something like this:

if(!userInput.getText().equals(" ")) { // get the text from the textfield, 
check if it's empty
            //Do something
        }

在IF语句中,将文本字段中的文本保存到String变量中,然后将其他组件的文本设置为该变量.

Inside you IF statement, you save the text from your textfield into your String variable, then set the text of your other component to that variable.

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,则我的构造函数将与您的不同,但是原理保持不变.

I made this real quick so forgive the look or any issues in functionality, the goal here is just to show the logic of listeners. I use Intellij so My Constructor will differ from yours if you use NetBeans or Eclipse, but the principles remain the same.

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);
}
}

这篇关于使用回车按钮将文本从JTextfield发送到另一个Jtextfield的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆