2009-11-29 2 views
0

У меня есть несколько вопросов для этой программы, одна из первых, что я пытаюсь сделать, это сделать так, чтобы она могла сравнивать и видеть, равно ли текстовое поле положению colorValues ​​[x]. Вторая проблема - это утверждение if, если inText == - colorValues.length - 1, чтобы открыть поле, в котором говорится о несогласованности. 3-й вопрос, даже если он получил сообщение «Извините» и/или сообщение congradulations, как вы его делаете, чтобы текстовое поле не отображалось?Simple FlowLayOut Help

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

+0

Может ли кто-нибудь помочь мне с моими петлями? – daddycardona

ответ

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

    } 
} 

Edit: основанных на ваш комментарий ниже, я изменил программу для удовлетворения ожидаемого поведения. Основные изменения не конструктор больше не скрывает другие элементы управления, и слушатель теперь должен цикл по каждому полю ввода, чтобы проверить все они правильно:

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

+0

Это было о том, что я собираюсь, я хотел, чтобы они помнили все цвета, а затем, если они все поняли, тогда скажите: «Вы - отличная работа!» , и если не так, скажите, «вы пропустили это, но это довольно удивительно». – daddycardona

+0

А я вижу. Вы должны иметь возможность увидеть, что нужно изменить, хотя я отредактирую код, который сделает то, что вы ищете. –