【问题标题】:Sending a Text from JTextfield to another Jtextfield using the enter button使用输入按钮将文本从 JTextfield 发送到另一个 Jtextfield
【发布时间】:2021-02-02 13:37:50
【问题描述】:

enter image description here

我需要的是能够创建这个盒子。我需要的是将文本输入到右侧的第一个框中,一旦按下回车按钮,右侧的文本就会转到左侧的文本。左边的文本框不应该是可编辑的。我不是一个非常熟练的程序员,但以下是我到目前为止所拥有的。感谢您提供任何和所有帮助。

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

【问题讨论】:

  • 也许您应该先阅读以下教程? Creating a GUI With JFC/Swing
  • 当我在你的问题中运行代码时,它产生了this
  • 是的,这是正确的,我只是不知道如何进入一个 Jtextfield 然后让它去另一个

标签: java swing actionlistener jtextfield


【解决方案1】:

一种方法是声明一个字符串字段,这样您就可以将输入字段中输入的文本存储到该字段中以供以后访问。

在您的构造函数中,声明字符串,类似于:

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,My Constructor 将与您的不同,但原理保持不变。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2014-09-02
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多