Java 简单的FlowLayOut帮助
我对这个程序有几个问题,我要做的第一件事就是让它可以比较,看看textfield是否等于colorValues[x]位置。第二个问题是if语句表示if inText==to colorValues.length-1,以打开一个表示Congreadurations的框,该框也不起作用。第三个问题,即使收到“抱歉”消息和/或“祝贺”消息,您如何使其不显示文本字段Java 简单的FlowLayOut帮助,java,flowlayout,Java,Flowlayout,我对这个程序有几个问题,我要做的第一件事就是让它可以比较,看看textfield是否等于colorValues[x]位置。第二个问题是if语句表示if inText==to colorValues.length-1,以打开一个表示Congreadurations的框,该框也不起作用。第三个问题,即使收到“抱歉”消息和/或“祝贺”消息,您如何使其不显示文本字段 import javax.swing.*; import java.awt.*; import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class AlbertCardonaProg7 extends JFrame
{
private static final int WIDTH = 350;
private static final int HEIGHT = 250;
private static final String[] colorValues = {"red","white",
"yellow","green","blue"};// I dentifies the colors
private JTextField nameBox;
private JLabel greeting;
private String[] message = {"Input color number 1",
"Input color number 2: ","Input color number 3: "
,"Input color number 4:","Input color number 5:"};
private JLabel namePrompt = new JLabel(this.message[0]);
public AlbertCardonaProg7()
{
setTitle("MEMORY GAME");
setSize(WIDTH, HEIGHT);
setLayout(new FlowLayout(FlowLayout.CENTER));
setDefaultCloseOperation(EXIT_ON_CLOSE);
createContents();
setVisible(true);
}// end constructor
//******************************************
private void createContents()
{
nameBox = new JTextField(15);
greeting = new JLabel();
add(namePrompt);
add(nameBox);
add(greeting);
nameBox.addActionListener(new Listener());
}//end createContents
//************************************************
private class Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int inText;
for(inText =0; inText < 5; inText++)
{
if(nameBox.getText().equals(colorValues[inText] ))
{
namePrompt.setText( message[inText]); // its not working trying
//to see if it is equal to the proper spot
//in the colorValues[array]
add(nameBox);
nameBox.setText("");
nameBox.requestFocus();
inText++;
}
if(!nameBox.getText().equals(colorValues[inText]))
{
AlbertCardonaProg7 darn = new AlbertCardonaProg7();
darn.namePrompt.setText("Sorry, drink more Ginseng ");
add(namePrompt);
break;
}
if( inText == (colorValues.length -1))
{
AlbertCardonaProg7 darn = new AlbertCardonaProg7();
darn.namePrompt.setText("Congradulations,
Your mind is Awesome!!!");
add(namePrompt);
break;
}
}// loop
}//end action performed
}// end class Listener
//**************************************
public static void main(String[] args)
{
String colors = "";
for(int i = 0; i < colorValues.length; i++)
colors += colorValues[i] + " ";
JOptionPane.showMessageDialog(null,"How good is your memory.\n
See if you can memorize this sequence.\n\n" + colors,
"Message", JOptionPane.INFORMATION_MESSAGE );
AlbertCardonaProg7 outBox = new AlbertCardonaProg7();
}// end main class
}//end Class AlberCardonaProg7
首先,我建议您学习正确地格式化代码,因为这样可以更容易地看到正在发生的事情 其次,您发布的代码在第64行和第80行出现语法错误,导致编译失败。问题是Java不允许在源代码中包含多行字符串文字,因此必须将这两个字符串连接在一起。例如:
darn.namePrompt.setText("Congradulations,
Your mind is Awesome!!!");
应该是:
darn.namePrompt.setText("Congradulations," +
" Your mind is Awesome!!!");
现在,不幸的是,您的问题没有特别清楚地说明程序的预期行为应该是什么。我对它的理解是,您希望向用户提供一个文本框,要求他们输入第一种颜色,然后显示一个对话框,根据他们得到的答案是否正确表示祝贺或抱歉。如果他们得到正确的答案,那么您需要显示第二种颜色的输入框,检查答案,等等
我的第一个建议是在实例化JFrame时创建所有控件,但只需隐藏其他控件,直到用户输入正确的值。接下来,我建议您在开始编写代码之前计划动作侦听器将要做什么
在这种情况下,程序需要存储用户当前正在处理的输入字段的数组索引。然后,侦听器需要检查此变量,并验证inputFields数组中的相应字段。侦听器需要向用户显示一个对话框,说明他们是否得到了正确答案,如果用户得到了正确答案,则启用下一个输入字段
把所有这些放在一起,你会得到:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class AlbertCardonaProg7 extends JFrame {
private static final int WIDTH = 350;
private static final int HEIGHT = 250;
private static final String[] colorValues = { "red", "white", "yellow",
"green", "blue" };
private final JLabel[] inputLabels = new JLabel[colorValues.length];
private final JTextField[] inputFields = new JTextField[colorValues.length];
private int index = 0;
public AlbertCardonaProg7() {
//Create the UI controls
for (int i = 0; i < colorValues.length; i++) {
inputLabels[i] = new JLabel("Input color number " + i + ":");
inputLabels[i].setVisible(false);
inputFields[i] = new JTextField(15);
inputFields[i].setVisible(false);
inputFields[i].addActionListener(new Listener());
add(inputLabels[i]);
add(inputFields[i]);
}
//Make the first set visible
inputLabels[0].setVisible(true);
inputFields[0].setVisible(true);
setTitle("MEMORY GAME");
setSize(WIDTH, HEIGHT);
setLayout(new FlowLayout(FlowLayout.CENTER));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (inputFields[index].getText().equals(colorValues[index])) {
JOptionPane.showMessageDialog(null, "Congratulations, you got the answer correct");
//See if there are more controls to make visible
if (++index < colorValues.length) {
inputLabels[index].setVisible(true);
inputFields[index].setVisible(true);
}
} else {
JOptionPane.showMessageDialog(null,
"Sorry, your answer is wrong", "Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
public static void main(String[] args) {
String colors = "";
for (int i = 0; i < colorValues.length; i++) {
colors += colorValues[i] + " ";
}
JOptionPane.showMessageDialog(null, "How good is your memory.\n"
+ "See if you can memorize this sequence.\n\n" + colors,
"Message", JOptionPane.INFORMATION_MESSAGE);
AlbertCardonaProg7 outBox = new AlbertCardonaProg7();
}
}
编辑:根据您下面的评论,我已修改程序以满足预期行为。主要的变化是构造函数不再隐藏其他控件,监听器现在必须在每个输入字段上循环以检查它们是否正确:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class AlbertCardonaProg7 extends JFrame {
private static final int WIDTH = 350;
private static final int HEIGHT = 250;
private static final String[] colorValues = { "red", "white", "yellow",
"green", "blue" };
private final JLabel[] inputLabels = new JLabel[colorValues.length];
private final JTextField[] inputFields = new JTextField[colorValues.length];
public AlbertCardonaProg7() {
//Create the UI controls
for (int i = 0; i < colorValues.length; i++) {
inputLabels[i] = new JLabel("Input color number " + i + ":");
inputFields[i] = new JTextField(15);
inputFields[i].addActionListener(new Listener());
add(inputLabels[i]);
add(inputFields[i]);
}
setTitle("MEMORY GAME");
setSize(WIDTH, HEIGHT);
setLayout(new FlowLayout(FlowLayout.CENTER));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// See if there are any wrong answers
boolean correct = true;
for(int i = 0; i < colorValues.length; i++) {
if (!inputFields[i].getText().equals(colorValues[i])) {
correct = false;
}
}
if(correct) {
JOptionPane.showMessageDialog(null,
"Congratulations, you got the answer correct");
} else {
JOptionPane.showMessageDialog(null,
"Sorry, your answer is wrong", "Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
public static void main(String[] args) {
String colors = "";
for (int i = 0; i < colorValues.length; i++) {
colors += colorValues[i] + " ";
}
JOptionPane.showMessageDialog(null, "How good is your memory.\n"
+ "See if you can memorize this sequence.\n\n" + colors,
"Message", JOptionPane.INFORMATION_MESSAGE);
AlbertCardonaProg7 outBox = new AlbertCardonaProg7();
}
}
我必须编辑它,这样每个人都可以看到所有的代码,并可能给我一些建议,我应该做的步骤。有人可以帮助我与我的循环吗?非常感谢,我确实了解连接,我只是这样做,因为它没有正确地显示在我的计算机上与这个网站,我有它在一行。再次感谢你的回答,我真的很感激。这就是我想要的,我希望他们记住所有的颜色,然后如果他们都正确的话,就说,你是对的,干得好!如果说错了,你错过了,但这真是太棒了。啊,我明白了。您应该能够看到需要更改的内容,尽管我将使用符合您需要的代码进行编辑。