2012-06-12 1 views
2

모든 것을 올바르게 수행 한 것 같습니다. 난 그냥 JMenuBar 간단한 구현해야하지만 작동하지 않는 것 같습니다. 누군가 나를 도울 수 있습니까?JMenuBar가 보이지 않습니다.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 

public class swing { 
    public static void main (String[] args) { 
     JFrame frame = new JFrame ("menu"); 
     frame.setVisible (true); 
     frame.setSize (400, 400); 
     frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     JMenuBar bar = new JMenuBar(); 
     frame.setJMenuBar (bar); 
     bar.setVisible (true); 
     JMenu file = new JMenu ("File"); 
     bar.add (file); 
     JMenuItem open = new JMenuItem ("open"); 
     file.add(open); 
    } 
} 

답변

6

프레임을 먼저 표시 한 다음 메뉴 막대를 추가하는 것입니다. 이거 작동 안 할거야. 반대로해야합니다. 끝 또는 적어도 메뉴 모음을 설정 한 후에 frame.setVisible (true); 라인을 시프트하십시오. 모든 구성 요소를 추가 한 후 항상 프레임을 표시해야합니다. 그렇지 않으면 프레임을 표시 한 후 추가 된 구성 요소는 repaint()이 완료 될 때까지 표시되지 않습니다. 주석에서


@sjr의 :

때때로 revalidate가 표시되어 컨테이너 후 (구성 요소의 크기를 조정/추가/제거)를 컨테이너를 변경으로 (뿐만 아니라 repaint을)가 필요합니다.

+0

+1 이것은 아마도 적절할 것입니다. 컨테이너를 표시 한 후에 컨테이너를 변경 (구성 요소 추가/제거/크기 조정) 할 때 revalidate가 필요할 수도 있습니다 (다시 칠할뿐만 아니라). 컨테이너에서 revalidate를 호출해야합니다. – sjr

+0

업데이트 된 답변 :) –

+0

@sjr 감사합니다. 방금 시험을 저장해 줘서 고마워요. – user1450466

3

시도해보십시오.

프레임에 구성 요소를 추가하는 작업은 해당 invisible state에서 발생하며 모든 구성 요소가 설정되면 표시되도록 설정합니다.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 

public class swing extends JFrame { 
    public swing(){ 
     this.setSize(400,400); 
     this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     this.setComponent(); 
    } 

    public void setComponent(){ 
     JMenuBar bar = new JMenuBar(); 
     JMenu menu = new JMenu("Menu"); 
     this.setJMenuBar(bar); 
     bar.add(menu); 
    } 

    public static void main (String[] args) { 
     EventQueue.invokeLater(new Runnable(){ 
     public void run(){ 
      swing s = new swing(); 
      s.setVisible(true); 
     } 
     }); 
    } 
}