2016-12-18 10 views
1

Это мой код для создания окна с помощью swing.Почему мои компоненты невидимы?

Я вижу окно определенного размера, но ни один из компонентов не присутствует в окне.

Почему компоненты не видны?

У меня есть отдельные методы для создания, инициализации и добавления компонентов. Эти методы вызывается из конструктора. Окно с заголовком и определенным размером отображается на выходе. Что мне не хватает?

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); в после у вас есть настройка ваших компонентов. И, обязательно звоните addComponents(this);до Вы звоните 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^