2014-01-06 3 views
0

Возможно ли получить родительский объект JFrame от JPanel класс ??
На самом деле я пытаюсь создать графический интерфейс с помощью NetBeans. Графический интерфейс имеет панель и две панели.
1) Войти Panel (имеющие два текстовых поля и кнопки)
2) Вторая панель
Когда JFrame загружен, я добавляю LoginPanel в нем изначально.
Получить объект родительской рамки от объекта JPanel

public ParentJFrame() { //in constructor 
     initComponents(); 
     this.setLayout(new BorderLayout()); 
     this.setBounds(300,300, 300, 300); 
     this.getContentPane().add(new LoginPanel()); 

    } 

После нажатия на кнопку (в LoginPanel), я пытаюсь удалить LoginPanel из JFrame и добавления SecondPanel.
Теперь я удаляю LoginPanel и добавляю SecondPanel в класс LoginPanel, где я могу получить доступ к полям username , password, но здесь я не могу получить объект JFrame, из которого я должен удалить этот компонент.
Если я попробую это в ParentJFrameClass, то я не могу получить доступ к значению поля username , password. (Поскольку это структура, предоставляемая netbeans)
Так что же мне теперь делать? Что было бы решением в этом случае
я надеюсь, что я объяснил проблему в деталях, но в случае, если что-то не ясно, пожалуйста, дайте мне знать
Экспертов Пожалуйста, помогите

+1

[SwingUtilities.windowForComponent (..)] (http://docs.oracle.com/javase/7/docs/api/javax /swing/SwingUtilities.html#windowForComponent(java.awt.Component)) – nachokk

+0

вы можете подробно рассказать .. – Despicable

+0

Вы должны использовать 'CardLayout' больше в [CardLayoutManager] (http: //docs.oracl e.com/javase/tutorial/uiswing/layout/card.html) – nachokk

ответ

1

Чтобы использовать CardLayout для переключения между панелями, как follwing код может помочь вам, вам необходимо изменить его, чтобы удовлетворить ваши потребности:

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

/** 
* replace the real panel of yours 
* do the right process 
*/ 

public class CardLayoutLoginDemo { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       JFrame frame = new LoginFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
class LoginFrame extends JFrame { 
    public LoginFrame() { 
     super("CardLayout Demo"); 

     //Create the panel that contains the "cards". 
     mainPanel = new JPanel(new CardLayout()); 
     mainPanel.add(getFirstPanel(), FIRST); 
     mainPanel.add(getSecondPanel(), SECOND); 
     this.setContentPane(mainPanel); 
     this.pack(); 
    } 
    //use your first panel 
    private JPanel getFirstPanel() { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(3,2)); 
     panel.add(new JLabel("Username: ")); 
     panel.add(new JTextField(10)); 
     panel.add(new JLabel("password: ")); 
     panel.add(new JTextField(10)); 
     JButton btnLogin = new JButton("Login"); 
     JButton btnCancel = new JButton("Cancel"); 
     btnLogin.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 
       CardLayout cl = (CardLayout)(mainPanel.getLayout()); 
       cl.show(mainPanel, SECOND); 
     } 
     }); 
     btnCancel.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     panel.add(btnLogin); 
     panel.add(btnCancel); 
     return panel; 
    } 
    //use the second panel 
    private JPanel getSecondPanel() { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(2,2)); 
     panel.add(new JLabel("Second panel")); 
     panel.add(new JLabel("other processs")); 
     JButton btnOther = new JButton("Ok"); 
     JButton btnBack = new JButton("Back"); 
     panel.add(btnOther); 
     panel.add(btnBack); 
     btnBack.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       // TODO Auto-generated method stub 
       CardLayout cl = (CardLayout)(mainPanel.getLayout()); 
       cl.show(mainPanel, FIRST); 
      } 
     }); 
     return panel; 
    } 
    private final String FIRST = "First panel"; 
    private final String SECOND = "Second panel"; 
    private static final long serialVersionUID = 1L; 
    private JPanel mainPanel; 
} 
Смежные вопросы