Вызов JPanel из другого JPanel

Я знаю, что это не рекомендуется, но я использую абсолютную компоновку и пытаюсь перейти от панели к панели, и мне было любопытно, как это сделать.

public class Mainscreen extends JFrame {

 private JPanel Home;

 /**
 * Launch the application.
 */ 
 public static void main(String[] args) {
 EventQueue.invokeLater(new Runnable() {
 public void run() {
 try {
     Mainscreen frame = new Mainscreen();
 frame.setVisible(true);
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 });
 }


 public Mainscreen() {
 final Dataentrylog DEL = new Dataentrylog();

 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 setResizable(false);
 setBounds(100, 100, 618, 373);
 Home = new JPanel();
 Home.setBackground(new Color(255, 250, 250));
 Home.setBorder(new LineBorder(Color.DARK_GRAY, 1, true));
 setContentPane(Home);
 Home.setLayout(null);

     JButton btnNewButton = new JButton("Data Entry login");
      btnNewButton.setFont(new Font("Tahoma", Font.PLAIN, 14));
      btnNewButton.setForeground(new Color(0, 0, 0));
      btnNewButton.setBackground(UIManager.getColor("Menu.selectionBackground"));

      btnNewButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {

        Home.setVisible(false);
        setContentPane(DEL);
        setLayout(null);     



      }
      });
      btnNewButton.setBounds(44, 214, 204, 61);
      Home.add(btnNewButton);


 }



} 

Вызов этой JPanel, которая работает

import java.awt.EventQueue;

public class Dataentrylog extends JPanel {

public Dataentrylog() {
 setBounds(100, 100, 618, 373);
 setBackground(new Color(255, 250, 250));
 setBorder(new LineBorder(Color.DARK_GRAY, 1, true));
 setLayout(null);

 DEadmin DEA = new Deadmin();

    final JButton btnSignIn = new JButton("Sign in");
    btnSignIn.setFont(new Font("Tahoma", Font.PLAIN, 14));
    btnSignIn.setBackground(UIManager.getColor("EditorPane.selectionBackground"));
    btnSignIn.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {


    }


    });
    btnSignIn.setBounds(226, 282, 153, 52);
    add(btnSignIn);
 }


} 

Хотя это работает, если я попытаюсь вызвать другую JPanel из журнала ввода данных, JFrame будет пустым. Что я могу сделать, чтобы вызвать другую JPanel? Любая помощь будет здорово. Кроме того, я знаю, что менеджеры по расположению являются нормой, но для того, что мне нужно было сделать, я не смог найти ничего, что работало бы, поэтому я предпочитаю использовать null, несмотря на свое лучшее суждение. СПАСИБО!


person Alex Miles    schedule 26.09.2013    source источник


Ответы (1)


Инициализация Dataentrylog должна быть такой

final Dataentrylog DEL = new Dataentrylog(this);

мы должны передать родительский jframe.

public class Dataentrylog extends JPanel {


    public Dataentrylog(final JFrame parent ) {
        setBounds(100, 100, 618, 373);
        setBackground(new Color(255, 250, 250));
        setBorder(new LineBorder(Color.DARK_GRAY, 1, true));
        final JButton btnSignIn = new JButton("Sign in");
        btnSignIn.setFont(new Font("Tahoma", Font.PLAIN, 14));
        btnSignIn.setBackground(UIManager.getColor("EditorPane.selectionBackground"));
        btnSignIn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
                JPanel panel = new JPanel();
                panel.add(new JButton("Solved"));
                parent.setContentPane(panel);
            }
        });
        btnSignIn.setBounds(226, 282, 153, 52);
        add(btnSignIn);
    }
}
person Rajesh Sampath    schedule 26.09.2013