나는 Random 클래스를 사용하여 Java에서 기본 'guess my number'게임을 사용하고 있지만 첫 번째 GUI에 둘 이상의 창을 만들려고했습니다. 나는 내가 볼 수없는 몇 가지 문제를 가지고 있었고, 스스로 알아 내기 위해 여기 도움의 손길에 왔습니다. 여기다중 클래스 GUI
그가 메인 클래스입니다 :
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class GuessMyNumber extends JFrame
{
private JLabel lblIntro;
private JLabel lblPrompt;
private JTextField txtInput;
private JButton btnSend;
private JButton btnCustomize;
private JTextField txtMin;
private JTextField txtMax;
private JButton btnSet;
private ButtonListener btnListener;
private boolean customize;
private boolean game;
private int min;
private int max;
private int dif;
private int magicNum;
private int num;
private int guesses = 1;
public GuessMyNumber()
{
super("Guess My Number");
Container cp = getContentPane();
setLayout(new FlowLayout());
lblIntro = new JLabel("Welcome to Guess My Number");
lblPrompt = new JLabel("Please enter your guess:");
txtInput = new JTextField(15);
btnSend = new JButton("Send");
btnSend.addActionListener(new ButtonListener());
btnCustomize = new JButton("Customize Range");
btnCustomize.addActionListener(new ButtonListener());
cp.add(lblIntro);
cp.add(lblPrompt);
cp.add(txtInput);
cp.add(btnSend);
cp.add(btnCustomize);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 100);
setVisible(true);
}
public static void main(String[]args)
{
GuessMyNumber foo = new GuessMyNumber();
}
public int getMagicNum(int min, int max)
{
Random g = new Random();
if(customize)
{
dif = max - min;
magicNum = g.nextInt(dif) + min + 1;
}
else
{
magicNum = g.nextInt(100) + 1;
}
return magicNum;
}
public String getFeedback(int guesses)
{
String feedback;
if(guesses < 4 && guesses > 0)
feedback = "Superstar";
else if(guesses < 7 && guesses > 3)
feedback = "Pretty Good";
else if(guesses < 10 && guesses > 6)
feedback = "Mediocre";
else
feedback = "Pathetic";
return feedback;
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object clicked = e.getSource();
if(clicked == btnCustomize)
{
customize = true;
game = false;
GUIUtil gui = new GUIUtil();
min = gui.getMin();
max = gui.getMax();
}
if(clicked == btnSend)
{
String feedback;
if(!(customize))
{
min = 1;
max = 100;
if(!(game))
magicNum = getMagicNum(min, max);
game = true;
num = Integer.parseInt(txtInput.getText());
if(num < magicNum)
JOptionPane.showMessageDialog(null, "Too low!");
else if(num > magicNum)
JOptionPane.showMessageDialog(null, "Too high!");
else
{
feedback = getFeedback(guesses);
JOptionPane.showMessageDialog(null, "Correct!!!\nYou guessed my number in " + guesses + " guesses!\n" + feedback);
guesses = 0;
game = false;
}
guesses++;
}
else
{
if(!(game))
magicNum = getMagicNum(min, max);
game = true;
num = Integer.parseInt(txtInput.getText());;
if(num < magicNum)
JOptionPane.showMessageDialog(null, "Too low!");
else if(num > magicNum)
JOptionPane.showMessageDialog(null, "Too high!");
else
{
feedback = getFeedback(guesses);
JOptionPane.showMessageDialog(null, "Correct!!!\nYou guessed my number in " + guesses + " guesses!\n" + feedback);
guesses = 0;
game = false;
}
guesses++;
}
}
}
}
}
그리고 여기에 두 번째 클래스 : 그래서 열 개체를 두 번째 창을 남기면서
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GUIUtil extends JFrame
{
private JTextField txtMin;
private JTextField txtMax;
private JButton btnSet;
private ButtonListener btnListener;
private int min;
private int max;
private boolean set = false;
public GUIUtil()
{
super("Customization");
Container cp = getContentPane();
setLayout(new FlowLayout());
txtMin = new JTextField("Min", 15);
txtMax = new JTextField("Max", 15);
btnSet = new JButton("Set");
btnSet.addActionListener(new ButtonListener());
cp.add(txtMin);
cp.add(txtMax);
cp.add(btnSet);
setSize(190,125);
setVisible(true);
}
public int getMin()
{
if(set = true)
{
set = false;
return min;
}
else
{
min = 0;
return min;
}
}
public int getMax()
{
if(set = true)
{
set = false;
return max;
}
else
{
max = 100;
return max;
}
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
min = Integer.parseInt(txtMin.getText());
max = Integer.parseInt(txtMax.getText());
set = true;
}
}
}
오류가 나는 범위를 정의하려고 시도하고 추측 활성 상태는 다음과 같습니다.
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: n mus
t be positive
at java.util.Random.nextInt(Unknown Source)
at GuessMyNumber.getMagicNum(GuessMyNumber.java:66)
at GuessMyNumber$ButtonListener.actionPerformed(GuessMyNumber.java:127)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
무엇이 문제입니까? –
추측 할 필요가없는 문제를 열거 할 수 있습니다. –
죄송합니다. 늦었으므로 그렇게 기억하지는 않습니다. 범위를 사용자 정의한 다음 추측을 시도하면 일련의 예외가 발생합니다. – Andrew