1
過去幾周我已經完成了其他幾個簡單的GUI項目,沒有任何問題,但現在我無法在編譯後顯示程序。我無法弄清楚什麼可能是錯誤的,因爲沒有錯誤被拋出,並且與我上學的其他項目格式幾乎相同。Java - 編譯後不會運行GUI
上哪裏找得到屏幕上的圖形用戶界面的任何指導,將不勝感激,這樣我可能會通過和tweek的事情,我想我把這個之前。
import java.util.Random;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/***********************************************************************
Program Name: ProgramName.java
Programmer's Name: Student Name
Program Description: Describe here what this program will do
***********************************************************************/
public class GuessGame extends JFrame{
//Declare GUI components
private JFrame mainFrame;
private JButton guessButton;
private JButton exitButton;
private JTextField guessField;
private JTextField answerField;
private JLabel directionsLabel;
private JLabel guessLabel;
private JLabel answerLabel;
public GuessGame(){
//Initialize window components
mainFrame = new JFrame("Number Guessing Game");
exitButton = new JButton("Exit");
guessButton = new JButton("Try your luck");
guessField = new JTextField(4);
answerField = new JTextField(50);
guessLabel = new JLabel("What is your guess?");
answerLabel = new JLabel("Now it is/isn't");
directionsLabel = new JLabel("Enter a number and then press the" +
"guess button until you are correct");
//Build the GUI
Container c = mainFrame.getContentPane();
c.setLayout(new FlowLayout());
c.add(directionsLabel);
c.add(guessLabel);
c.add(guessField);
c.add(answerLabel);
c.add(answerField);
c.add(guessButton);
c.add(exitButton);
//Set Mnemonics
guessButton.setMnemonic('G');
exitButton.setMnemonic('E');
mainFrame.setSize(450, 300);
mainFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//Call the handler methods for specific functions
GuessButtonHandler ghandler = new GuessButtonHandler();
guessButton.addActionListener(ghandler);
ExitButtonHandler ehandler = new ExitButtonHandler();
exitButton.addActionListener(ehandler);
FocusHandler fhandler = new FocusHandler();
guessField.addFocusListener(fhandler);
answerField.addFocusListener(fhandler);
}
//Implement actionListener for the Guess button
class GuessButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
String instring;
int counter = 0;
int guess;
Random rand = new Random();
int numberToGuess = rand.nextInt(1000);
instring = guessField.getText();
guess = Integer.parseInt(instring);
counter++;
if (guess == numberToGuess){
answerLabel = new JLabel("You win! " +
"\nThe number was: " + numberToGuess +
"\nIt took you " + counter + " tries");
}
else if (guess < numberToGuess){
answerLabel = new JLabel("Too low");
}
else if (guess > numberToGuess){
answerLabel = new JLabel("Too high");
}
}
}
//Implement ActionListener for the exit button
class ExitButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
//Implement focus listener
class FocusHandler implements FocusListener{
public void focusGained(FocusEvent e){
if (e.getSource()== guessField){
answerField.setText("");
}
else if (e.getSource() == answerField){
guessButton.requestFocus();
}
}
public void focusLost(FocusEvent arg0) {
}
}
//Main to run program, call GuessGame method
public static void main(String[] args) {
new GuessGame();
}
}
知道這是如此簡單。我可以發誓它在那裏,但沒有意識到它並沒有在整個過程中。萬分感謝。就擴展的JFrame而言,並不清楚該部分。猜猜這是我認爲需要的東西,因爲它與我們已經完成的其他實驗一樣,儘管其中有其他JFrame。我會用這個改變來解決它,謝謝。 – user1174357 2013-02-09 04:55:13
@ user1174357:當我運行你的代碼時,沒有錯誤,但它只是運行並退出,就是這樣,一個症狀表明Swing線程從未啓動。那時我知道要查找你對'setVisible(...)'的調用。接下來,我們將討論如何使用佈局管理器,以便最終可以在JFrame上調用'pack()'並獲得體面的GUI。 – 2013-02-09 04:57:06