2012-12-14 3 views
2

나는 이것이 매우 간단하다는 것을 알고 있지만 완전한 Java 초보자로서 나는 그것을 놓치고 있으며 그것을 지적 해주는 누군가가 무한히 도움이 될 것입니다. 나는 화면을 쳐다 보았고 주변을 움직 였고 여전히 아무것도 움직이지 않았다.Java JFrame이 표시되지 않음 (제목 표시 줄 만 해당)

스크린 샷 : http://i.imgur.com/dwH60.png 이이 실행될 때 모두가 온다.

fullGUI.java :로 ...

test.java


public class test 
{ 

    public static void main(String[] args) 
    { 

     new fullGUI(); 


    } 


} 

라는


import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JRadioButton; 
import javax.swing.JTextArea; 


public class fullGUI extends JFrame 

{ 
    JFrame frame = new JFrame(); //creates frame 

    public fullGUI() // constructor 
    { 
     //setLayout(new BorderLayout()); 
     //add(new shipGrid(), BorderLayout.NORTH); 
     //add(new shipGrid(), BorderLayout.NORTH); 
     add(new JRadioButton("Horizontal"), BorderLayout.WEST); 
     add(new JRadioButton("Vertical"), BorderLayout.WEST); 
     add(new JTextArea("Instructions to player will go here"), BorderLayout.CENTER); 
     frame.setSize(400,600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setTitle("Battleship!"); 
     frame.pack(); //sets appropriate size for frame 
     frame.setVisible(true); 
    } 

} 

...

  • FullGUI 이미 JFrame를 확장하는 자본 편지에서 자바 16,
  • 답변

    2
    1. 이름 클래스,
    2. 전화 getContentPane.add()JFrame
    3. 사용 SwingUtilities.invokeLater

    에 추가 할 그 안에 또 다른 JFrame을 만들 수 있도록 필요가 없습니다 그래서 전반적으로 이와 비슷한 것

    import java.awt.BorderLayout; 
    import javax.swing.JFrame; 
    import javax.swing.JRadioButton; 
    import javax.swing.JTextArea; 
    
    
    public class FullGUI extends JFrame 
    
    { 
        public FullGUI() // constructor 
        { 
         getContentPane().add(new JRadioButton("Horizontal"), BorderLayout.WEST); 
         getContentPane().add(new JRadioButton("Vertical"), BorderLayout.WEST); 
         getContentPane().add(new JTextArea("Instructions to player will go here"), BorderLayout.CENTER); 
         setSize(400,600); 
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         setTitle("Battleship!"); 
         pack(); //sets appropriate size for frame 
         setVisible(true); 
        } 
    
    } 
    
    public static void main(String[] args) { 
        SwingUtilities.invokeLater(new Runnable() { 
    
         @Override 
         public void run() { 
          new FillGU(); 
         } 
        }); 
    } 
    
    +0

    'getContentPane()'이 필요 없습니다; 'add()'는 전달합니다. 불필요하게'JFrame'을 확장하지 마십시오. 달리 보장된다면,'setSize()'_after_'pack()'을 호출하십시오. – trashgod

    +0

    명확한 시정을 위해 대단히 감사합니다! 당신은 아마 프로그래밍 개념 (그리고 자바)을 배우는 단계 인 "마침내 그것을 얻을 때까지 나는 여전히 벽에 맞서 싸우고 있다고 말할 수있다. –

    +0

    @BILLBONER, 나는 또한 반년 전에 SWING을 시작했습니다. 제발, trashgod의 의견을보고 내 대답을 받아 들일 것을 고려하십시오. –

    2

    클래스에서 JFrame을 확장하고 새 객체 "프레임"을 만드는 중입니다. JRadioButton 또는 JTextArea와 같은 구성 요소를 fullGUI에 추가하고 JFrame의 다른 설정을 프레임 객체에 적용 할 수 있습니다. 어떤 접근 방식을 선택할지 결정하지만 그 중 하나를 선택하십시오. JFrame을 확장하면 클래스가 JFrame의 자식이됩니다. 즉, 모든 공용 또는 보호 된 메서드를 부모 클래스에서 호출 할 수 있으므로 JFrame의 새 인스턴스를 만들 필요가 없습니다. 다른 방법은 JFrame을 확장하지 않는 것입니다. 대신 새 JFrame 객체를 만들어야합니다.

    +0

    응답 해 주셔서 감사합니다. 그것은 나를 위해 천천히 가고 있지만 설명이 도움이되었습니다! –

    1

    Nikolay Kuznetsov가 이전 답변에서 말했듯이, FullGUI의 모든 인스턴스가 새로운 프레임이되기 때문에 fullGUI에서 Jframe을 확장하므로 해당 클래스에 새 Jframe을 만들 필요가 없습니다.

    코드를 사용하여 프레임을 생성했다고 가정합니다. 예를 들어 frame1과 fullGUI의 인스턴스 (main Method에서)는 frame2라고 말하면 두 프레임입니다. 생성자에서 frame2 (add() == this.add())에 해당 컨트롤을 추가했으며 frame1.setvisible (true);

    한 프레임에 컨트롤을 추가하고 완전히 다른 프레임을 표시하는 것은 화면을 최대화했을지라도 출력 된 화면에서 아무 것도 볼 수 없었던 이유입니다.

    +0

    감사합니다 Vallabh! 마지막 메모 "한 프레임에 컨트롤을 추가하고 완전히 다른 프레임을 표시하는 것은 화면을 최대화했을지라도 출력 된 화면에서 아무 것도 볼 수 없었던 이유입니다." 이 점이 나에게 명확 해졌으며이 코드의 이전 버전이 여러 개의 창이 튀어 나오고있는 이유를 설명합니다. –

    +0

    나는 당신을 도왔다 니 기쁘다. :-) –

    2

    frame.pack()으로 인해 내용에 따라 JFrame의 크기가 조정됩니다.

    frame.setSize (400,600)가있는 경우 콘텐츠 창에 아무 것도 추가하지 않더라도 프레임의 크기는 400x600으로 표시됩니다.

    그러나 frame.pack()을 호출하면 프레임의 크기가 조정됩니다.귀하의 경우에는 프레임의 내용 창에 아무 것도 들어 있지 않습니다. 따라서 pack() 메서드는 제목 표시 줄로만 크기를 조정합니다.

    +0

    네, 크기 조정이 내용과 관련이있는 것 같아요. 확인해 주셔서 고마워요. –

    관련 문제