2013-07-20 4 views
0

JApplet 및 응용 프로그램으로 실행할 수있는 계산기에서 작업 중입니다. 코드를 응용 프로그램으로 실행하면 메뉴 모음이 나타납니다. 하지만 JApplet으로 실행하면 그렇지 않습니다.Java - JMenuBar가 JApplet에 표시되지 않지만 응용 프로그램으로 실행될 때 수행됩니다.

JApplet의 제한 사항입니까? 왜냐하면 나는 계산기 클래스에 모든 코드 (새로운 JMenuBar, 버튼 추가 등)를 넣기 때문에 작동한다. 그러나 같은 일을하고 JMenuBar를 반환하는 내 정적 메서드 MenuBar.create()를 사용하면 작동하지 않습니다.

여기 코드가 있습니다. 어쩌면 메뉴 바가 애플릿에 나타나지 않는 것을 잊어 버렸을 수 있습니까?

계산기

private void BuildGui() { 
//MenuBar.create() returns an JMenuBar filled with menus/items. 
    menuBar = MenuBar.create(); 
    panel.add(new JButton("test")); 
} 

private void Go() { 
// NOTE: this.isApplet works, it's a boolean i set during init() or main() 
    if (this.isApplet == true) { 
     setJMenuBar(menuBar); 
     setSize(500,600); 
     add(panel); 
    } else { 
     JFrame frame = new JFrame(); 
     frame.setJMenuBar(menuBar); 
     frame.getContentPane().add(BorderLayout.CENTER, panel); 
     frame.setSize(500,600); 
     frame.setVisible(true); 
    } 
} 
+1

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

내 문제에 대한 해결책을 찾았습니다. 가능한 경우 답변을 게시합니다. (새로운 사용자로서 나는 8 시간을 기다려야한다.) –

답변

0

나는 시간 동안 실험 한 후 문제를 알아 냈어.

public class MenuBar { 
private static JMenu[] menu = {new JMenu("Edit"), new JMenu("View") }; 

public static JMenuBar create() { 
    JMenuBar menuBar = new JMenuBar(); 
    for (JMenu m : menu) { 
     menuBar.add(m); 
    } 
    return menuBar 
} 

같은 클래스의 정적 JMenu를/JMenuItem를 선언하는 것은 표시하지 않는 도구 모음을 일으키는 것으로 보인다. 조금 실험 한 결과, JApplet으로 실행될 때 JApplet이 void init()를 두 번 실행한다는 것을 알았습니다! 내 init 메소드를 수정 한 후에 다른 모든 코드가 작동했습니다.

// I declared an boolean runOnce = false; 
public void init() { 
    if (runOnce) { 
    new Calculator(); 
    } 
runOnce = true 
}