2014-02-27 3 views
1

나는 "The JFC Swing Tutorial (Second Edition)"이라는 책을 통해 다음과 같이하고 있으며이 코드를 따라하기 시작했고 버튼을 표시해야합니다. 콘텐츠 창에 레이블이 있지만 모든 메신저는 빈 화면이됩니다. 어떤 아이디어? 감사합니다. .Java 스윙 빈 창이 대신 표시되는 창

import java.awt.GridLayout; 
import javax.swing.*; 

public class m extends JFrame 
{ 
    void UserFrame() 
    { 
     //JFrame.setDefaultLookAndFeelDecorated(true); 
     JFrame frame = new JFrame("Hellow You"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel jp = new JPanel(new GridLayout(0,1)); 

     //makes label 
     JLabel label = new JLabel("Sup "); 
     //adds to the frames content pane a label 
     frame.getContentPane().add(label); 

     JButton button = new JButton("Hai"); 
     frame.getContentPane().add(button); 


     jp.add(button); 
     jp.add(label); 

     jp.setBorder(BorderFactory.createEmptyBorder(30,30,10,30)); 

     //pack set the window to what it needs AKA to display all components 
     frame.pack(); 
     //frame.setSize(250, 250); 
     //shows window 
     frame.setVisible(true);  
    } 



    public static void main(String[] args) 
    { 
     final m window = new m(); 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       window.UserFrame(); 
      } 
     }); 
    } 

} 
+0

은 적어도 적절한 크기의 빈 화면입니까? –

+0

아니요, 최소 크기는 – Definity

+1

일 수 있습니다. m.setVisible (true)과 같이 첫 번째 창을 표시하지 않으 셨습니다. –

답변

4

간단하게 여기 무슨 일이야

frame.add(jp); 

단지

frame.pack(); 

전에 추가? 모든 위젯을 JPane에 올바르게 추가했지만 기본적으로 JPane을 버리고 어디에서도 사용하지 않았습니다.

제대로 작동하려면 충분할 것입니다.

올바르게 처리하려면 frame.getContentPane().add(label);frame.getContentPane().add(button);을 삭제해야합니다. (이 점에 대해 알고 있으니 @dic19 감사합니다.) 이것들은 당신이 사용했던 방식대로 작동하지 않습니다.

+1

+1'frame.getContentPane(). add (label)'과'frame.getContentPane(). add (button)'도 제거하십시오. – dic19

+1

@ dic19 전적으로 동의합니다. 그 점을 지적 해 주셔서 감사합니다. 저는 이것을 제 답변에 추가했습니다. 이 진술은 OP가 그들을 사용하는 방식에서 상당히 쓸모가 없습니다. –

+1

나는 이미 대답을 upvoted 그래서 다시 할 수 없어. 감사! – dic19

관련 문제