2016-12-13 54 views
0

我沒有經歷過,只有14歲的老淚!上一課在打電話給下一班時被稱爲

我做了一個小應用程序,這將測驗我。基本上,我會投入的問題和答案在這樣的記事本:

H 
Hydrogen 
O 
Oxygen 
K 
Potassium 

該計劃將像這樣↓排序的話,並在TextAreaScrollPane

H = Hydrogen 
O = Oxygen 
K = Potassium 

在底部顯示它們theres,a JButton("Start Test"), and it would ask you the questions in order. E.g. ``H means?O Means?K Means?然後它會給你反饋Eg Wrong! H means HydrogenCorrect!

這裏是兩個類! GUI只是簡單的GUI。而test是類負責測試

import javax.swing.*; 
import javax.swing.border.LineBorder; 

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Scanner; 

public class GUI extends JFrame 
{ 
     //JFrame components 
     public static JButton btn = new JButton("Start Test"); 
     public static JPanel panelBtn = new JPanel(); 
     public static JPanel panelTxt = new JPanel(); 
     public static JTextArea txt = new JTextArea(); 
     public static JScrollPane scroll = new JScrollPane(txt); 

     static String[] words; 

     static String link = "words.txt"; 

     //constructor 
     public GUI() 
     { 

      //title 
     setTitle("Test"); 
     //size 
     setSize(400,400); 

      //layout 
     setLayout(new BorderLayout()); 

     //on close 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //OTHER 
     txt.setLineWrap(true); 
     txt.setWrapStyleWord(true); 
     txt.setEditable(false); 
     txt.setBackground(Color.white); 
     btn.setEnabled(false); 
     //border for panelTxt 
     LineBorder b1 = new LineBorder(Color.BLACK); 
     LineBorder b2 = new LineBorder(panelBtn.getBackground() ,5); 
     txt.setBorder(BorderFactory.createCompoundBorder(b2,b1)); 
     //actionListnere 
     btn.addActionListener(new lst()); 

     //add 
     add(scroll, BorderLayout.CENTER); 
     panelBtn.add(btn); 
     add(panelBtn, BorderLayout.SOUTH); 

     //visible 
      setVisible(true); 
    } 

    //action listener for btn 
    private class lst implements ActionListener 
    { 
      public void actionPerformed(ActionEvent e) 
    { 
     new test(words); 
        GUI g = new GUI() ; 
        g.setVisible(false);  

      } 
} 

//main 
public static void main(String[] args) throws IOException 
{ 
    new GUI(); 
    final int ARRAY_LEN = getArrayLength();   
    words = makeArray(ARRAY_LEN); 
    displayArray(words); 

    btn.setEnabled(true); 

} 


//get the length of the array, using hasNext from Scanner class 
private static int getArrayLength() throws IOException 
{ 
    File file = new File(link); 
    Scanner scanner = new Scanner(file); 

    int len = 0; 
    while(scanner.hasNext()) 
    { 
     scanner.nextLine(); 
     len++; 
    } 

    final int ARRAY_LEN = len +1; 

    return ARRAY_LEN; 
} 

//declares and initializes String array, with length of ARRAY_LEN 
private static String[] makeArray(final int ARRAY_LEN) throws  FileNotFoundException 
{ 
    String[] words = new String[ARRAY_LEN]; 

    int value = 0; 
    int count = ARRAY_LEN; 

    words[value] = null; 
    count--; 
    value++; 

    File file = new File(link); 
    Scanner scanner = new Scanner(file); 

    do 
    { 
     words[value] = scanner.nextLine(); 
     count--; 
     value++; 
    }while(count != 0); 

    return words; 
} 

//displays the array in text area 
private static void displayArray(String[] words) 
{ 

    int len = words.length - 1; 

    int i = 0; 
    i++; 
    txt.setText(words[i]); 
    i++; 
    txt.setText(txt.getText() + "\t="); 
    txt.setText(txt.getText() + "\t" + words[i]); 
    do 
    { 
    i ++; 
    txt.setText(txt.getText() + "\n\n" + words[i]); 
    i++; 
    txt.setText(txt.getText() + "\t="); 
    txt.setText(txt.getText() + "\t" + words[i]); 


    }while(i != len); 

} 
} 

2級

import javax.swing.*; 
    import java.util.Random; 

public class test extends GUI 
{ 
public static String[] words; 

//constructor 
public test(String[] word) 
{ 
    words = word; 
    main(word); 

} 
public static void main(String[] args) 
{ 

    int len = words.length; 

    boolean first = true; 
    for(int i = 0; i != len; i++) 
    { 
     if(first == true) //to skip null 
     { 
      i++; 
      first = false; 
     } 

     String question = words[i]; 
     i++; 
     String answer = JOptionPane.showInputDialog(question+ " is?"); 
     String rightAnswer = words[i]; 

     if(answer.equals(rightAnswer)) 
      JOptionPane.showMessageDialog(null, "Correct!"); 
     else 
     { 
      JOptionPane.showMessageDialog(null, "Wrong! " + question +" means " + rightAnswer); 
     } 
    } 
} 

} 

因此,這裏是

每當我按下按鈕,就開始測試的問題,而是一個從GUI類創建新窗口,並且setVisible(false)實際上不做任何事情。

所以有2個問題; 不起作用。 2在ButtonClikced()創建一個新窗口,所以有2個相同的窗口,關閉一個,關閉另一個窗口。

請幫助,因爲我不知道該怎麼辦

+0

你的代碼看起來像你可能把諺語本末倒置。 –

+0

@HovercraftFullOfEels ?? – Eddie

+1

這裏有一段免費的建議,「永遠不會有靜態字段給可變對象」。 –

回答

0

從主要方法取出new GUI();。 在您的代碼中,按鈕在操作執行時不可見。但在這個時間GUI對象也被創建。當創建GUI對象時,將執行main方法。你會看到按鈕。 因此,將 btn.setEnabled(true);更改爲所需的另一種方法。

試試這個下面的代碼,

//main 
public static void main(String[] args) throws IOException 
{ 
    final int ARRAY_LEN = getArrayLength();   
    words = makeArray(ARRAY_LEN); 
    displayArray(words); 

    // btn.setEnabled(true); 

} 
相關問題