2013-07-21 3 views
1

간단한 질문 - Java 기반 MMORPG 게임을 편집 중이며 게임 프레임에 메뉴 모음을 추가하려고합니다. 그래서 그렇게했는데, 메뉴 바는 게임에 들어가서 내용 중 일부를 차단하여 메뉴 바 뒤에 숨어있는 것처럼 보입니다. 가 바로 여기에 예제 사진입니다 :Java MenuBar가 내 애플릿을 자름

example picture

는 그리고 여기 내 코드의 사진입니다 :이 문제를 해결, 정도 약간의 여분의 공간까지 정상을 만드는 방법에 대한

public GameFrame(GameWindow gameWindow, int width, int height, String title, boolean resizable, boolean flag1) { 
    frameOffset = 28; 
    frameWidth = width; 
    frameHeight = height - 1; 
    aGameWindow = gameWindow; 
    addListeners(this, gameWindow); 
    if (flag1) 
     frameOffset = 48; 
    else 
     frameOffset = 28; 
    setTitle(title); 
    setResizable(resizable); 

    menubar = new MenuBar(); 
    menu = new java.awt.Menu("Menu"); 
    submenu = new java.awt.Menu("Sub Menu"); 

    m1 = new MenuItem("Menu Item 1"); 
    m2 = new MenuItem("Menu Item 2"); 
    m3 = new MenuItem("Menu Item 3"); 
    m4 = new MenuItem("Menu Item 4"); 
    m5 = new MenuItem("Menu Item 5"); 

    menu.add(m1); 
    menu.add(m2); 
    menu.add(m3); 

    submenu.add(m4); 
    submenu.add(m5); 

    menu.add(submenu); 
    menubar.add(menu); 

    setMenuBar(menubar); 

    this.addWindowListener(new WindowListener() { 
     @Override 
     public void windowActivated(WindowEvent arg0) {} 

     @Override 
     public void windowClosed(WindowEvent arg0) { 
      System.exit(-1);    
     } 

     @Override 
     public void windowClosing(WindowEvent arg0) { 
      System.exit(-1);     
     } 

     @Override 
     public void windowDeactivated(WindowEvent arg0) {} 
     @Override 
     public void windowDeiconified(WindowEvent arg0) {} 
     @Override 
     public void windowIconified(WindowEvent arg0) {} 
     @Override 
     public void windowOpened(WindowEvent arg0) {} 
    }); 
    show(); 
    toFront(); 
    resize(frameWidth, frameHeight); 
    aGraphics49 = getGraphics(); 
} 

모든 아이디어 게임에 방해가되지 않습니까?

감사합니다.

+0

메뉴와 게임 영역을 모두 포함하는 레이아웃 코드를 보여줄 수 있습니까? – hexafraction

+0

GUI를 잘못 작성한 것 같습니다. 'frame.setJMenuBar()'메서드를 사용하여 프레임에 JMenuBar를 추가했는지 확인하십시오. 그리고'frame.add (yourGamePanel);을 사용하여 프레임의 내용 창에 게임 패널을 추가했는지 확인하십시오. 추가 도움이 필요하면 잘못 처리 한 내용을 추측 할 시간이 없기 때문에 문제를 시연하는 [SSCCE] (http://sscce.org/)를 게시하십시오. – camickr

+0

코드를 추가했습니다. 또한, Swing이 아닌 AWT를 사용하는 메신저 –

답변

0

대신 MenuBar를 사용하십시오. 그것은

MenuBar mB = new MenuBar(); 
Menu menu = new Menu("Menu"); 
MenuItem mI1 = new MenuItem("Menu Item 1"); 

// setting the bar 
this.setMenuBar(mB); 

//adding the menu onto the bar 
mB.addMenu(menu); 

// adding the menu item into the menu 
menu.addMenuItem(mI1); 

//adding action listener 
mI1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     // do whatever 
    } 
}); 

당신은 더 많은 것을 여기 볼 수 있습니다 ..이 모든면에서의 JMenuBar의 역할을 ... GUI를 위하고 GUI의 전체 화면을 표시 할 수있는 메뉴 표시 줄을 표시합니다 :

MenuBar, Menu, and MenuItem help

+0

AWT MenuBar는 도움이되지 않습니다. 중량 구성 요소 만 있으면 다른 요소를 방해 할 수는 없습니다.하지만 여전히 렌더링됩니다. –

+0

그는 AWT를 사용하고 있다고 말했기 때문에 AWT 내부에서 Swing 대신 적절한 객체를 사용해야한다고 생각했습니다. – user2277872

+0

재미있는 코드를 붙여서 이미 AWT를 붙여 놓았습니다. –

0

당신은 인 JPanel를 사용하여 일시 정지 메뉴를 만드는 시도 할 수 있습니다. 모든 좋은 게임에는 일시 중지 메뉴가 필요합니다. :)

이 경로로 이동하면 JPanel에 keyListener를 지정하여 결정된 키를 누를 때 setVisible을 설정할 수 있는지 확인하십시오.

0

게임 패널이 인세 트를 준수하지 않는 것처럼 보입니다. GameBrame 자체에 메뉴 바를 추가하는 대신 최상위 패널을 만듭니다. GameFrame을 BorderLayout.CENTER에 넣고 최상위 패널에 메뉴 모음을 추가합니다. 그런 다음 GameFrame을 직접 추가하는 대신 해당 패널을 애플릿에 추가하십시오.