2015-01-11 5 views
0

pack() 및 setVisible (true)을 사용한 이후로 JPanel이 표시되지 않는 이유를 모르겠습니다. 그냥 응용 프로그램을 실행해도 아무런 반응이 없습니다. 그것은 당신의 JPanel 들어 있으므로 이, 내 코드내 JPanel이 표시되지 않음 (Java)

import java.io.*; 
import java.net.*; 
import java.util.Scanner; 
import java.util.concurrent.TimeUnit; 

import javax.swing.*; 

import java.awt.event.*; 
import java.awt.*; 

import javax.swing.JFrame; 

public class TestGUI extends JFrame { 

    private JPanel _panel1 = new JPanel(); 
    private JTextArea _txtarea = new JTextArea(10, 10); 
    private JTextField _txtfield = new JTextField(); 

    public TestGUI() { 
     add(_panel1); 
     _panel1.setLayout(new BorderLayout()); 
     _panel1.add(_txtarea); 
     _panel1.add(_txtfield); 
     validate(); 
     _panel1.setVisible(true); 
     _panel1.setSize(500, 500); 
    } 

    public static void main(String[] args) { 
     new TestGUI(); 
    } 
} 
+1

setVisible() 및 setSize()는 패널이 아닌 프레임에 속합니다. '이것으로 전화 해.' 또는 무엇이든없이. 또한 패널 레이아웃을 BorderLayout으로 설정 했으므로 두 가지를 추가하면 첫 번째 것을 두 번째로 덮어 씁니다. 다른 곳에서 원하면 NORTH, EAST 등을 지정해야합니다. 자세한 내용은 BorderLayout을 사용하는 방법을 찾아보십시오. – arcy

+0

'windowClosing' 이벤트를 처리해야합니다. 그렇지 않으면 창을 닫을 수 없을 것입니다. 그래서 당신이 꾸며 넣지 않은 창을 찾아 가고 커스텀 닫기 버튼을 구현하지 않으면'windowClosing' 이벤트를 처리하는 것이 필수적입니다. –

+0

수정 : 창이 닫히지 만 창을 닫은 후에도 프로그램이 계속 실행됩니다. –

답변

0

나는뿐만 아니라 JFrame 보여주는 것을 제안합니다.

당신은 당신의 코드에서 몇 가지 문제가 당신의 main()

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     new TestGUI().setVisible(true); 
    } 
    }); 
} 
0

으로 이것을보십시오. 레이아웃을 올바르게 설정하지 않았습니다. 테두리 레이아웃에는 위치가 필요합니다.

구성 요소를 JFrame에 추가 한 후에는 크기를 설정하거나 pack() 메서드를 호출하여 JFrame이 하위 구성 요소에 맞게 필요한 크기로 설정되도록하십시오. 그것이 이벤트 발송에 의해 처리되도록

class TestGUI extends JFrame { 

     private JPanel _panel1 = new JPanel(); 
     private JTextArea _txtarea = new JTextArea(10, 10); 
     private JTextField _txtfield = new JTextField(); 

     public TestGUI() { 
      add(_panel1); 
      _panel1.setLayout(new BorderLayout()); 

      // border layout is done by positioning like center, south north etc. 
      _panel1.add(_txtarea, BorderLayout.CENTER); 
      _panel1.add(_txtfield, BorderLayout.NORTH); 

      // set the size before making it visible 
      _panel1.setSize(500, 500); 
      setVisible(true); 

      // call pack() so that the Frame assumes the needed space only 
      pack(); 

      // set a default close method so that your frame exits on close. 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 
    } 

다음은 SwingUtilities.invokeLater 또는 EventQueue.invokeLater 를 통해 JFrame의를 생성 할 수있는 좋은 연습입니다 : 여기

은 샘플입니다 스레드
은 이벤트 대기열을 처리 할 때 좋은 시간입니다.

관련 문제