2011-12-28 2 views
10

나는 텍스트 필드와 버튼을 메인 프레임에 표시하기를 원하는 곳에서 간단한 코드를 작성했지만, 실행 한 후에는 텍스트 필드 만 보았습니다.자바 스윙 JFrame 레이아웃

텍스트 필드 다음에 버튼의 코드를 작성하면 버튼 만 표시됩니다.

왜 그런가?

JFrame mainframe=new JFrame(); 
    mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    mainframe.setBounds(0,0,200,200); 
    JButton jb=new JButton(); 
    jb.setText("Leech"); 
    mainframe.add(jb); 
    JTextField link=new JTextField(50); 
    mainframe.add(link); 
    mainframe.pack(); 
    mainframe.setVisible(true); 
+0

javadoc 클래스는 add를 호출하여 내용 창에 추가 할 수 있다고 분명히 명시합니다. 최소한 Java의 최신 버전에서는 – Robin

답변

5

으로 추가하여 구성 요소를 추가 한 다음 해당 패널을 JFrame의 내용 창에 추가하여 사용할 수 있습니다.

  
     JFrame window = new JFrame(); 
     JPanel mainframe=new JPanel(); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setBounds(0,0,200,200); 
     JButton jb=new JButton(); 
     jb.setText("Leech"); 
     mainframe.add(jb); 
     JTextField link=new JTextField(50); 
     mainframe.add(link); 
     window.getContentPane().add(mainframe); 
     window.pack(); 
     window.setVisible(true);
+3

기본적으로'JFrame'에'LayoutLayout'을'LayoutManager'로 설정하는 것과 같습니다. 이것이'JPanel'의 기본 레이아웃 형태이기 때문에 – Robin

+1

이것이 받아 들일 수있는 대답이라고 생각하지 않습니다. Robin의 답변은 정답입니다. JFrame의 기본 레이아웃 관리자와 BorderLayout이 지정되지 않은 경우 기본 위치가 무엇인지를 이해해야합니다. – Michael

+0

@Michael 의견이 무엇입니까? 이 답변이 잘못되었다고 생각하십니까? 그렇지 않으면 코딩 방법이 마음에 들지 않으십니까? – Ibrahim

9

대신 JFrame의 직접 구성 요소를 추가, 원하는 LayoutManager와 같은 JPanel의 용기를 사용한다.

Here 레이아웃 관리자에 대한 몇 가지 자습서를 찾을 수 있습니다.

기본적으로 Swing에서 LayoutManager는 하위 구성 요소 (위치 및 크기 설정)를 배치하기 때문에 응용 프로그램 내부에서 사용하는 모든 컨테이너 구성 요소는 적절한 LayoutManager로 구성되어야합니다.

+0

을 참조한 1.3 문서가되었습니다. 이제 LayoutManager의 링크가 종료되었습니다. 고쳐주세요. – Ungeheuer

11

JFrame의 기본 레이아웃은 BorderLayout입니다. 이러한 레이아웃을 사용하여 Container에서 add 메서드를 호출하면 add(..., BorderLayout.CENTER)이라는 호출과 같습니다. BorderLayout의 각 위치에는 하나의 요소 만 포함될 수 있습니다. 따라서 두 번의 전화를 걸면

mainframe.add(jb); 
mainframe.add(link); 

마지막으로 추가 한 구성 요소가 포함 된 결과가됩니다. 이를 피하려면 다른 위치에 추가하거나 다른 레이아웃 관리자 (예 : FlowLayout)를 JFrame#setLayout

0

JFrame의 기본 레이아웃 관리자는 BorderLayout입니다. 당신이 setBounds로 좌표() 메소드를 지정하려면 JFrame의에 레이아웃 매니저의 설정을 취소

mainframe.setLayout(new FlowLayout()); 

, 당신이 가지고 : 당신이 자동 레이아웃을 원하는 경우에, 당신은 FlowLayout에 사용할 수 있습니다

mainframe.setLayout(null); 
jb.setBounds(10,10,100,50); 
link.setBounds(10,70,180,100); 
+0

레이아웃을 null로 설정하는 것을 권장하지 않아야합니다. – Michael

0

BorderLayout 설명서가있는 경우 mainframe.add (jb); mainframe.add (jb, BorderLayout.CENTER)와 같습니다. mainframe.add (link); mainframe.add (jb, BorderLayout.CENTER)와 같습니다.