문제

이 프로그램에 대해 몇 가지 질문이 있습니다. 제가 하려는 첫 번째 일은 텍스트 필드가 colorValues[x] 위치와 같은지 비교하고 확인할 수 있도록 만드는 것입니다.두 번째 문제는 if 문에서 if inText == to colorValues.length - 1로 작동하지 않는 축하 메시지가 표시된 상자를 열라는 것입니다.세 번째 문제 죄송합니다 메시지나 축하 메시지를 받았는데도 텍스트 필드가 표시되지 않도록 하려면 어떻게 해야 합니까?

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

    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top