2012-09-07 2 views
2

내 문제는 내 프로젝트에서 더 복잡한 그래픽 인터페이스를 만들고 싶습니다. 우선 아래 코드와 함께 전체 화면 모드를 사용하고 있습니다.전체 화면에서 GridBagLayout을 사용하여 컴포넌트 푸팅

public class MainFrame extends JFrame 
{ 
... 
private Container container; 
private GridBagLayout gbl; 

public MainFrame() 
{ 
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsDevice dev = env.getDefaultScreenDevice(); 
dev.setFullScreenWindow(this); 
setLayoutManager(); 
} 
... 
} 

모두 괜찮습니다. 다음 단계는 두 개의 JPanels를 추가하는 것입니다. 내가 사용하고자하는 레이아웃 매니저는 GridBagLayout입니다.

private void setLayoutManager() 
{ 
container = getContentPane(); 
gbl = new GridBagLayout(); 
container.setLayout(gbl); 
} 

private void addMenu() 
{ 
MenuBar menu = new MenuBar(); 
GridBagConstraints gbc = new GridBagConstraints(); 
gbc.fill = GridBagConstraints.BOTH; 
gbc.ipady = 0; 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.weightx = 1.0; 
gbc.weighty = 0.05; 
gbl.setConstraints(menu, gbc); 
container.add(menu); 
} 

private void addWorkArea() 
{ 
WorkArea area = new WorkArea(); 
GridBagConstraints gbc = new GridBagConstraints(); 
gbc.fill = GridBagConstraints.BOTH; 
gbc.gridx = 0; 
gbc.gridy = 1; 
gbc.weightx = 1.0; 
gbc.weighty = 1.0; 
gbl.setConstraints(area, gbc); 
container.add(area); 
} 

그리고 그 결과는 다음과 같습니다 여기

enter image description here

my project입니다 :

왜 상단에 스트립이 무엇입니까?

거기를 클릭하고 드래그하면 더 많은 응용 프로그램이 움직입니다. 도와주세요. JFrame을 없애고 모든 공간을 채우는 것이 중요합니다. 이 컨텐츠를 배치 할 때 당신은 내가 문제가 무엇인지 말할 때 웃을거야

+0

1) 더 나은 도움을 더 빨리 얻으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) 중첩 된 레이아웃 사용을 고려하십시오. 3) 질문에 물음표를 추가하십시오. –

+0

레이아웃을 설정 한 후 전체 화면을 설정해보십시오. 또한 프레임에 자체 레이아웃을 설정하려고하지의 contentPane –

+2

나는 양이 "그렇게하지 마십시오"하는 대답은 일반적으로 환영받지 못하는 것을 알고,하지만 ... 의 GridBagLayout은 가장 어려운 레이아웃 매니저 이해되어야한다/용도. 사용하기 쉬운 레이아웃 관리자가 많이 있습니다. 예를 들어, MigLayout을 살펴보십시오. 또는 적어도 중첩 된 BorderLayouts을 사용하십시오. – GreyBeardedGeek

답변

3

...

자바는, 이제까지 어떤 이유로 프레임 세트를 허용한다. 즉, 제목 표시 줄과 프레임 테두리가 있다고 여전히 믿습니다.

수정은

public MainFrame() { 
    setUndecorated(true); // <-- Add me 
    setFullScreen(); 
    setResizable(false); 
    setTitle("Program"); 
    setLayoutManager(); 
    addMenu(); 
    addWorkArea(); 
} 

나는 풍자를 삽입 (엄청나게 복잡, 알고 ... 당신의 MainFrame 생성자에서

, 당신은 다른 작업을 수행하기 전에 setUndecorated(true)를 호출 할 필요가 ...하지만 엄청나게 복잡하다 : P - 진지하게, 나는 그것이 작동했을 때 놀랐다.)

+0

'pack()'또는'validate()'를 호출하면 해결되지 않는다는 뜻입니까? BTW - RAR을 다운로드 했습니까? 귀하의 댓글이 다시 나타났습니다. 'compilable'.. –

+0

당신이'setUndecorated (true);가 아니라'setUndecorated (false);'를 호출해야한다는 것을 의미한다고 생각합니다 ... –

+0

고맙습니다.나도 놀랐어 :] – daniio