2014-01-17 28 views
0

我正在爲我的ap comp sci項目創建一個小組合框菜單。這是我第一次使用GUI,所以我仍然熟悉它。我有一個菜單類和一些其他類,主要運行無效的方法來做簡單的事情,如計算GPA等。我的菜單工作正常(至少我認爲是這樣)。然而,當我在菜單中選擇我的第一個項目時(我現在只有一個actionlistener,但我會在後面添加更多),actionlistener運行void方法(run())並打開窗口。但之後沒有任何反應。我有在該方法中的用戶輸入鍵入百分比等,並且它在我直接從類運行該方法時工作。但是當actionlistener運行它時,我無法輸入或似乎沒有任何輸入。感謝您的時間和幫助!使用actionlistener爲我的菜單組合框運行不同類的void方法。

package First_Semester_Project; 
import java.awt.Color; 
import javax.swing.*; 
    import java.awt.*; 
import java.awt.event.*; 

public class Menu extends GradeCalculator 
{ 
String [] info = {"Grade Calculator", "Spanish Conjugator", "Period Table of Elements", "Sentence Compiler"}; 
JLabel l= new JLabel("Welcome to the Resource Library!"); 
JComboBox c = new JComboBox(info); 
JButton b = new JButton ("Select Resource"); 

public Menu() 
{ 
    frame(); 
} 

public void frame() 
{ 
    JFrame f = new JFrame ("Resource Library"); 
    l.setForeground(Color.white); 
    l.setFont(new Font("Arial", Font.BOLD, 16)); 


    f.setSize(600,90); 
    f.setVisible(true); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel p = new JPanel(); 
    p.setBackground(Color.gray); 
    p.add(c); 
    p.add(b); 
    p.add(l); 
    f.add(p); 

      b.addActionListener(new ActionListener() 
      { 
      public void actionPerformed (ActionEvent e){ 
       String s = c.getSelectedItem().toString(); 
       //l.setText(s); 
       if (s.equals("Grade Calculator")) 
       { 
        run(); 
       } 
       else if (s.equals("travel time")) 
       { 
        l.setText(s); 
       } 

      } 

      }); 
    } 

回答

0

我將假設可以從類中調用run方法作爲其超類GradeCalculator具有run()方法。

我喜歡做的一件事是創建我自己的actionlistener類,這樣我就可以輕鬆地遵循我的代碼並查看誰有權訪問什麼,這將是我的解決方案。

b.addActionListener(new myCustomActionListener(this)); //replaces b.actionlistener 

現在我會myCustomActionListener要麼添加到同一文件的末尾,或在不同的類文件產品總數 - 真的取決於你的抽象水平。

這裏是參考類:

public class myCustomActionListener implements ActionListener 
{ 

    Menu menu = null; 

    public myCustomActionListener(Menu menu) 
    { 
     this.menu = menu; 
    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     String s = menu.c.getSelectedItem().toString(); 
     //l.setText(s); 
     if (s.equals("Grade Calculator")) 
     { 
      menu.run(); 
     } 
     else if (s.equals("travel time")) 
     { 
      menu.l.setText(s); 
     } 
    } 

} 
+0

好,所以我嘗試過了,空隙的方法還是不接受任何用戶輸入。而且我還得到一個編譯器警告,說它使用不安全的操作。 – user3204894

+0

對不起,關於最近的回覆,你能否提供更多的代碼或鏈接到您的項目,以便我可以看到什麼是錯的? – Sowry

相關問題