2013-06-05 3 views
0

입력란에 무언가를 입력하면 애플리케이션이 멈추고 Enter 키를 누르면 응답이 중지됩니다. 1에서 100 사이의 숫자를 얻으려고하는 게임입니다. 입력 버튼에 제출 버튼이나 ActionListener가 필요하다고 생각합니다. 누군가가 이걸 도와 줄 수 있어요. 또한 FlowLayout에서 선을 끊는 방법이 있습니까? 아니면 다른 레이아웃이 더 좋습니까? 내 코드는 다음과 같습니다.Java Actionlistener 제출 버튼

import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 


public class game extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private Random rand = new Random(); 
    private int number = rand.nextInt(101); 
    private JLabel result, prompt; 
    private JTextField input; 


    game() { 
     super("Numbers"); 
     setSize(500, 500); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLayout(new FlowLayout()); 

     prompt = new JLabel("Enter a number between 1 and 100"); 
     add(prompt); 

     input = new JTextField(3); 
     add(input); 

     result = new JLabel(""); 
     add(result); 



     event a = new event(); 
     input.addActionListener(a); 

    } 

    public class event implements ActionListener { 
     public void actionPerformed(ActionEvent a) { 
      int guess = 0; 

      try { 
       guess = Integer.parseInt(input.getText()); 
      } catch(NumberFormatException e) { 
       result.setText("Error - Illegal Data Entered"); 
       result.setForeground(Color.RED); 
      } 


      while(guess!=number) { 
       if(guess>number) { 
        result.setText("Guess Too High. Try Again."); 
        result.setForeground(Color.CYAN); 
       } else if(guess<number) { 
        result.setText("Guess Too Low. Try Again."); 
        result.setForeground(Color.CYAN); 
       } else { 
        result.setText("Unknown Error"); 
        result.setForeground(Color.RED); 
       } 
      } 
      if(guess==number){ 
       result.setText("Right the number was "+number); 
       result.setForeground(Color.GREEN); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     new game().setVisible(true); 

    } 

} 

미리 감사드립니다.

업데이트

그래서 While 루프를 제거하고 모든 것이 정상적으로 작동했습니다. 맞았나요?

답변

1

귀하의 문제가 여기에 프로그램이 응답 할 것입니다, guess 또는 number의 값은, 당신 만이

while(guess!=number) { 
        if(guess>number) { 
         result.setText("Guess Too High. Try Again."); 
         result.setForeground(Color.CYAN); 
        } else if(guess<number) { 
         result.setText("Guess Too Low. Try Again."); 
         result.setForeground(Color.CYAN); 
        } else { 
         result.setText("Unknown Error"); 
         result.setForeground(Color.RED); 
        } 
       } 

무한 루프를 절대 변경 그동안을 삭제, unnecesary입니다

그래서 UR 내부 클래스는 내가 노력이

public class MyEvent implements ActionListener { 
     public void actionPerformed(ActionEvent a) { 
      int guess = 0; 

      try { 

       guess = Integer.parseInt(input.getText()); 
         if(guess>number) { 
          result.setText("Guess Too High. Try Again."); 
          result.setForeground(Color.CYAN); 
         } else if(guess<number) { 
          result.setText("Guess Too Low. Try Again."); 
          result.setForeground(Color.CYAN); 
         } else { 
          result.setText("Right the number was "+number); 
          result.setForeground(Color.GREEN);      
         } 

      }catch(NumberFormatException nfe){ 
       result.setText("Error - Illegal Data Entered"); 
       result.setForeground(Color.RED);    
      } 

    } 
} 

같은 것 그 정수 u는 이벤트 우르 실행을 종료해야 실패 할 때,

참고 팔로우 규칙 .. 모든 블록의 원인을 잡아 대문자

+0

그래서'if (guess == number) {break;}'를 추가하면 그것을 고칠 수 있을까? – Col1107

+0

고마워요. – Col1107

+0

시계를 잡아 먹으십시오. try & catch와 다른 잠재적 인 오류가 있습니다. 문자열을 삽입하면 실행이 끝납니다. 블록의 끝에 붙이면 코드 실행이 끝납니다. – nachokk

1

당신은 깨진 꿀벌 않을 수 while-loop와 이벤트 발송 쓰레드를 차단하고 ... 업데이트

while(guess!=number) {...} 

... 대신

...

while(guess!=number) { 
    if(guess>number) { 
     result.setText("Guess Too High. Try Again."); 
     result.setForeground(Color.CYAN); 
    } else if(guess<number) { 
     result.setText("Guess Too Low. Try Again."); 
     result.setForeground(Color.CYAN); 
    } else { 
     result.setText("Unknown Error"); 
     result.setForeground(Color.RED); 
    } 
} 

시도

if(guess>number) { 
    result.setText("Guess Too High. Try Again."); 
    result.setForeground(Color.CYAN); 
} else if(guess<number) { 
    result.setText("Guess Too Low. Try Again."); 
    result.setForeground(Color.CYAN); 
} else { 
    result.setText("Unknown Error"); 
    result.setForeground(Color.RED); 
} 

스윙은 이벤트 기반 환경입니다. 즉, 사용자가 무언가를 할 때까지 프로그램 (자동) 대기하고

+0

미안하지만 나는 여전히 Java에별로 좋지 않습니다. 어떻게 해결할 수 있습니까? – Col1107

+0

글쎄, 그것은 당신이 달성하기를 원하는 것에 달려 있습니다. 그걸 없애고 (코드를 그 안에 넣고) 무슨 일이 일어나는지 살펴 보자. – MadProgrammer

0

당신은 무한 루프를 시작해야 선언적 이름과 클래스를 넣어. guess은 반복 구문의 본문에서 업데이트되지 않으므로 반복 할 때마다 항상 조건이 false가됩니다.

+0

그래서 나는 '휴식'을 추가해야만한다. – Col1107