2009-11-29 125 views
0

我对这个程序有几个问题,我想要做的第一件事是让它可以比较并查看文本字段是否等于colorValues [x]位置。第二个问题是if语句说如果inText ==为colorValues.length - 1打开一个框,表示congradulations不起作用。第三个问题,即使它得到抱歉消息和或congradulations消息你如何使它的文本字段不显示?简单的FlowLayOut帮助

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 
+0

我来编辑它使每个人都可以看到所有的代码并且可以给我一些我应该做的步骤的建议。 – daddycardona 2009-11-30 00:15:24

+0

有人可以帮我用我的循环? – daddycardona 2009-11-30 01:56:30

回答

0

首先,我建议你学会正确地设置你的代码的格式,因为它可以更容易地看到发生了什么事情。

其次,您发布的代码在第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(); 

    } 
} 
+0

非常感谢你,我确实了解这个连接,因为它没有在我的电脑上用这个网站正确显示,所以我只用了一行。再次非常感谢你的回答,我真的很感激。 – daddycardona 2009-12-07 20:18:45

+0

这是关于我要去的东西,我希望他们记住所有的颜色,然后如果他们把它们都弄好,然后说,“你是正确的伟大的工作!” 如果错误的话,“你错过了,但这是非常棒的。” – daddycardona 2009-12-07 23:27:28

+0

啊我明白了。您应该很可能能够看到需要更改的内容,但我将使用您要查找的代码进行编辑。 – 2009-12-08 09:44:59