Java 如何从Jtextfield中的用户处获得2个输入?
我想让用户为播放器1键入一个名称,然后按enter键,然后让文本字段再次为空,这样用户就可以为播放器2键入一个名称。到目前为止,我只能得到玩家一的名字作为输入,而不能得到玩家二。由于某种原因,我的代码无法工作。任何帮助都将不胜感激。提前谢谢Java 如何从Jtextfield中的用户处获得2个输入?,java,swing,input,jtextfield,Java,Swing,Input,Jtextfield,我想让用户为播放器1键入一个名称,然后按enter键,然后让文本字段再次为空,这样用户就可以为播放器2键入一个名称。到目前为止,我只能得到玩家一的名字作为输入,而不能得到玩家二。由于某种原因,我的代码无法工作。任何帮助都将不胜感激。提前谢谢 import java.lang.*; import java.util.*; import java.util.List; import java.io.*; import java.awt.*; import java.awt.event.*; impo
import java.lang.*;
import java.util.*;
import java.util.List;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
public class mainClass extends JPanel implements ActionListener {
//constant variables to use
static String playerOneName;
static String playerTwoName;
static boolean playerOneNameSet;
static boolean playerTwoNameSet;
private static final long serialVersionUID = 1L;
public mainClass() {
}
public void paintComponent(Graphics g) {
//set background color to white
g.setColor(Color.white);
g.fillRect(0, 0, getWidth(), getHeight());
}
public static void initializeBoard() {
}
public static void main(String[] args) {
// title of frame
JFrame frame = new JFrame("Risk");
JTextField textField = new JTextField(20);
frame.add(textField, BorderLayout.SOUTH);
JLabel welcome = new JLabel("");
welcome.setText("Please Enter name for Player 1 in the text box at the bottom");
frame.add(welcome,BorderLayout.NORTH);
//action listener listens for enter key
textField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
playerOneName= textField.getText();
System.out.println(playerOneName);
playerOneNameSet = true;
System.out.println(playerOneNameSet);
}
});
if(playerOneNameSet == true) {
JTextField textField2 = new JTextField(20);
frame.add(textField2, BorderLayout.SOUTH);
JLabel welcome2 = new JLabel("");
welcome2.setText("Please Enter name for Player 2 in the text box at the bottom");
frame.add(welcome2,BorderLayout.NORTH);
//action listener listens for enter key
textField2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
playerTwoName= textField2.getText();
System.out.println(playerTwoName);
playerTwoNameSet = true;
System.out.println(playerTwoNameSet);
}
});
}
// make sure it closes correctly
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame size in pixels
final int FRAME_WIDTH = 1000;
final int FRAME_HEIGHT = 700;
frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
// makes sure the frame is visible
frame.setVisible(true);
mainClass main = new mainClass();
frame.add(main);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
代码中有一个逻辑错误 如果只想对两个输入使用一个
JTextField
,则无需创建
twoJTextField
只需处理ActionEvent
并只更新JTextField
。以下是代码:
textField.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
if (!playerOneNameSet)
{
playerOneName = textField.getText();
textField.setText("");
welcome.setText("Please Enter name for Player 2 in the text box at the
bottom");
playerOneNameSet = true;
}
else
{
playerTwoName = textField.getText();
textField.setText("");
}
}
});
不需要if
后面的部分。它还将取消使用playerWoNameSet
如果您想使用两个JTextField
,那么您必须在一开始就正确地使用,并且没有任何逻辑缺陷。
详细的逻辑错误:
让我试着向您展示一下您的程序流程
public static void main(String[] args)
{
// title of frame
JFrame frame = new JFrame("Risk");
.
.
.
.
//action listener listens for enter key
textField.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
playerOneName= textField.getText();
System.out.println(playerOneName);
playerOneNameSet = true;
System.out.println(playerOneNameSet);
}
});
在这里之前,您的代码都很好。在上述行之后,会发生这种情况
之所以会发生这种情况,是因为playerNameset
是一个static
变量,其默认值为false
此行只执行一次。一旦您的GUI被创建,main()方法将不会被再次调用,直到您再次运行它。之后,控件将传递到已创建的JTextField
,在生成任何ActionEvent
时也会传递到该控件。此后,它将永远不会转到if
行
我希望我帮助过你。请对任何进一步的问题发表评论。代码中有一个逻辑错误 如果只想对两个输入使用一个
JTextField
,则无需创建
twoJTextField
只需处理ActionEvent
并只更新JTextField
。以下是代码:
textField.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
if (!playerOneNameSet)
{
playerOneName = textField.getText();
textField.setText("");
welcome.setText("Please Enter name for Player 2 in the text box at the
bottom");
playerOneNameSet = true;
}
else
{
playerTwoName = textField.getText();
textField.setText("");
}
}
});
不需要if
后面的部分。它还将取消使用playerWoNameSet
如果您想使用两个JTextField
,那么您必须在一开始就正确地使用,并且没有任何逻辑缺陷。
详细的逻辑错误:
让我试着向您展示一下您的程序流程
public static void main(String[] args)
{
// title of frame
JFrame frame = new JFrame("Risk");
.
.
.
.
//action listener listens for enter key
textField.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
playerOneName= textField.getText();
System.out.println(playerOneName);
playerOneNameSet = true;
System.out.println(playerOneNameSet);
}
});
在这里之前,您的代码都很好。在上述行之后,会发生这种情况
之所以会发生这种情况,是因为playerNameset
是一个static
变量,其默认值为false
此行只执行一次。一旦您的GUI被创建,main()方法将不会被再次调用,直到您再次运行它。之后,控件将传递到已创建的JTextField
,在生成任何ActionEvent
时也会传递到该控件。此后,它将永远不会转到if
行
我希望我帮助过你。请对任何进一步的问题发表评论。为什么不使用两个JTextField,一个代表玩家1的名字,一个代表玩家2的名字?为什么有两个用户名?为什么没有按照上一个问题中的建议删除paintComponent()方法:。使用JOptionPane提示输入每个用户名。阅读Swing教程,了解为什么没有两个JTextField,一个代表玩家1的名字,一个代表玩家2的名字?为什么有两个用户名?为什么没有按照上一个问题中的建议删除paintComponent()方法:。使用JOptionPane提示输入每个用户名。阅读上的Swing教程