2014-01-17 1 views
0

내 ap comp sci 프로젝트를위한 약간의 콤보 박스 메뉴를 만들고 있습니다. 이것은 GUI로 작업 한 처음이므로 아직 익숙해 져 있습니다. 메뉴 클래스와 GPA 계산 등의 간단한 작업을 수행하는 대부분의 void 메서드를 실행하는 몇 가지 다른 클래스가 있습니다. 내 메뉴가 잘 작동하고 있습니다 (적어도 그렇게 생각합니다). 그러나, 메뉴에서 첫 번째 항목을 선택하면 (현재 한 개의 actionlistener 만 있지만 나중에 추가 할 것입니다.) actionlistener는 void 메서드 (run())를 실행하고 창을 엽니 다. 그러나 그 후에는 아무 일도 일어나지 않습니다. 클래스 백분율 등을 입력하는 해당 메서드에서 사용자 입력이 있고 클래스에서 직접 메서드를 실행할 때 작동합니다. 하지만 actionlistener가 실행될 때 입력 할 수 없거나 입력 할 수 없습니다. 시간을내어 도와 주셔서 감사합니다! 임 실행 방법은 슈퍼 클래스 GradeCalculator 같은 클래스에서 호출 할 수 있다고 가정하는 것내 메뉴 콤보 상자에 대한 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() 메소드가 있습니다.

내가 좋아하는 공통점은 내 자신의 actionlistener 클래스를 만드는 것입니다. 따라서 내 코드를 쉽게 따라갈 수 있으며 누가 내 액세스 권한을 갖고 있는지 확인할 수 있습니다.

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

는 지금은 같은 파일의 끝에 myCustomActionListener 중 하나를 추가하거나 alltogether 다른 클래스 파일에 - 정말 추상화 수준에 따라 달라집니다. 난이 상기 공극에있어서 여전히 사용자 입력을 접수되지 않도록 시도

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

관련 문제