2016-12-18 4 views
1

이것은 스윙을 사용하여 창을 만들기위한 코드입니다.구성 요소가 보이지 않는 이유는 무엇입니까?

정의 된 크기의 창을 볼 수 있지만 창에 구성 요소가 없습니다.

왜 구성 요소가 보이지 않습니까?

나는 구성 요소를 생성, 초기화 및 추가하기위한 별도의 메소드가 있습니다. 이러한 메소드는 생성자에서 호출됩니다. 제목과 정의 된 크기가있는 창이 출력에 표시됩니다. 내가 뭘 놓치고 있니?

package swing_basics; 

import java.awt.FlowLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 

public class MySwingDemo extends JFrame { 

    JLabel lblName, lblPassword; //Declaration of variables 
    JTextField txtfName; 
    JPasswordField pwdfPassword; 
    JButton btnSubmit, btnCancel, btnReset; 

    public void createComponents(){ //method to initialise the components 

     lblName = new JLabel(); 
     lblPassword = new JLabel(); 
     txtfName = new JTextField(); 
     pwdfPassword = new JPasswordField(); 
     btnSubmit = new JButton(); 
     btnCancel = new JButton(); 
     btnReset = new JButton(); 
    } 

    public void setComponents(){ //method to set the components 
     setVisible(true); 
     setSize(400, 400); 
     setTitle("My Swing Demo"); 
     setLayout(new FlowLayout()); 

     lblName.setText("Name"); 
     lblPassword.setText("Password"); 

     txtfName.setText("Name");// try 

     pwdfPassword.setText("Password"); 

     btnSubmit.setText("Submit"); 
     btnCancel.setText("Cancel"); 
     btnReset.setText("Reset"); 
    } 

    public void addComponents(JFrame frame){ //method to add the components 
     frame.add(lblName); 
     frame.add(txtfName); 

     frame.add(lblPassword); 
     frame.add(pwdfPassword); 

     frame.add(btnSubmit); 
     frame.add(btnCancel); 
     frame.add(btnReset); 
    } 

    public static void main(String[] args) { 
     new MySwingDemo(); 
    } 

    public MySwingDemo() { //Constructor 
     createComponents(); 
     setComponents(); 
     addComponents(this); 
    } 

} 

답변

3

그것은 추가 (및 설정)하기 전에, 당신이 당신의 구성 요소를 frame 볼을 설정하는 작업의 순서입니다. 대신 후에 setVisible(true);으로 이동하면 구성 요소가 설정됩니다. 으로 전화하십시오. 전에 setComponents();으로 전화하십시오.

public MySwingDemo() { // Constructor 
    createComponents(); 
    addComponents(this); 
    setComponents(); 
} 

처럼 나 또한 기본 frame 닫기 작업을 추가

public void setComponents() { // method to set the components 
    setSize(400, 400); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    setTitle("My Swing Demo"); 
    setLayout(new FlowLayout()); 

    lblName.setText("Name"); 
    lblPassword.setText("Password"); 

    txtfName.setText("Name");// try 

    pwdfPassword.setText("Password"); 

    btnSubmit.setText("Submit"); 
    btnCancel.setText("Cancel"); 
    btnReset.setText("Reset"); 
    setVisible(true); 
} 
관련 문제