2011-12-06 3 views
2

저는 Java에 비교적 익숙하지 않았습니다. 지난 2 일간 Java 프로그램을 올바로 배치하려고 노력하면서 지난 두 시간을 보냈습니다. 누군가 나를 위해 몇 가지 사항을 해결할 수 있기를 바랍니다. .Swing을 사용하여 기본 응용 프로그램에서 레이아웃이 어려웠습니다.

JMenuBar를 사용하여 응용 프로그램에 메뉴 표시 줄을 추가하기로 결정할 때까지 레이아웃이 모두 잘 진행되고 있었고 이제는 응용 프로그램의 메뉴 표시 줄이 사라지고 파일 메뉴의 너비가 창 중앙에 연결됩니다 바, 또는 완벽하게 작동하지만 아래 버튼을 숨 깁니다.

내 최근의 시도가 조금 더 가깝지만, 메뉴 막대 컨테이너를 BorderLayout으로 설정할 때 메뉴 막대의 높이가 어지럽게 보이는 것 같습니다.

누구나 내가 잘못 가고있는 곳으로 올바른 방향으로 나를 가리킬 수 있습니까?

JPanel mainPane = new JPanel(); 
BoxLayout progLayout = new BoxLayout(mainPane, BoxLayout.Y_AXIS); 

mainPane.setLayout(progLayout); 
setContentPane(mainPane); 

JMenuBar menuBar = new JMenuBar(); 

JMenu file = new JMenu("File"); 
menuBar.add(file); 

JMenuItem project = new JMenuItem("New Project"); 
JMenuItem exit = new JMenuItem("Exit"); 
file.add(project); 
file.add(exit); 

JPanel row0 = new JPanel(); 
BorderLayout menuBarLayout = new BorderLayout(); 
row0.setLayout(menuBarLayout); 
row0.add(menuBar); 
add(row0); 


JPanel row1 = new JPanel(); 
row1.setOpaque(false); 
row1.add(domainLabel); 
row1.add(projectNameInput); 
row1.add(userSubmit); 
row1.add(userClear); 
add(row1); 

감사합니다.

* 편집 : 나는 마침내 아래 답변 덕분에 그것을 얻을 수있었습니다. 솔루션에 대한 아래 주석을보십시오.

+1


보통 나는 그것의'으로 setJMenuBar (...)'방식을 통해 JFrame의 자체로의 JMenuBar를 추가했습니다. 이 메소드는 BorderLayout.NORTH 형식으로 contentPane 바로 위에 추가합니다. 내 JFrame을 다른 곳에서 만든 경우, 때로는 공개 된'getJMenuBar()'메소드 위에 클래스를 제공하여 다른 클래스가 여기에서 생성 된 메뉴 막대를 추출 할 수 있도록합니다. –

+0

우선 이것은 매우 부적합합니다 :) "File.add (exit);" 자바 변수의 경우 소문자로 시작하고 다른 단어는 낙타의 경우로 시작해야합니다. LOL 나는 File 클래스에서 .add()와 같은 정적 메소드를 본 적이 없다고 생각했다. (나쁜 연습 – doNotCheckMyBlog

+1

@Brogrammer 그 점을 지적 해 주셔서 감사합니다. 나머지 코드에서 알 수 있듯이, 당신이 언급 한 컨벤션, 나는 그것에 대해 생각하지 않고 대문자를 입력 했음에 틀림 없다. 이것은 다른 사람들이 혼란스럽게하는 것을 막기 위해 편집되었다;) –

답변

5

다시 말해 : 일반적으로 setJMenuBar(...) 메서드를 통해 JMenuBar를 JFrame에 추가했습니다. 이렇게하면 BorderLayout.NORTH 형식으로 contentPane 바로 위에 추가됩니다. 내 JFrame이 다른 곳에 생성되면, 때로 공개 getJMenuBar() 메소드보다 높은 클래스를 제공하여 다른 클래스가 여기에서 생성 된 메뉴 막대를 추출 할 수있게합니다.

JPanel에 JMenuBar를 절대적으로 추가해야한다면 JPanel에 BorderLayout을 지정하고 JMenuBar를 BorderLayout.NORTH 위치에 추가하십시오. BoxLayout을 통해 추가 된 다른 구성 요소가 필요한 경우 기본 JPanel의 BorderLayout.CENTER 위치에 JPanel을 사용하여 BoxLayout을 추가하고 BoxLayout에 JPanel을 사용하여 다른 하위 구성 요소를 추가합니다.

자습서는 다음과 같습니다 Using Top-Level Containers
Using Menus

+0

추가 :이 웹 사이트에서 좋은 튜토리얼이있다. , 당신을 통해 안내 할 수 ... http : //www.roseindia.net/java/java-get-example/menu-bar-java.shtml – doNotCheckMyBlog

+2

@Brogrammer : 정보 주셔서 감사합니다. 나는 단지 내가 틀린 많은 추천을 보았 기 때문에 나는 장미india 사이트를 추천하기를 꺼린다 고 말할 필요가있다. 위의 대답에 링크 된 표준 오라클 스윙 튜토리얼을 추천하는 것을 선호합니다. –

+0

죄송합니다. 나는 너무주의해야합니다! 감사합니다. 또 다른 리소스는 http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html입니다.하지만 약간 복잡합니다. :) 희망 사항으로 OP가이 oracle 링크를 확인합니다. – doNotCheckMyBlog

관련 문제