У меня есть унаследованный код и по причинам, чтобы объяснить это, я должен использовать нулевой макет. Я пытаюсь взять то, что у них есть, между JPanels. Я не мог понять, как это сделать. Это то, что у меня есть сейчас, который компилируется в SSCCE ниже. То, что я пытаюсь сделать, это добавить JPanels в ArrayList, который содержит ссылку на предыдущие JPanels. Таким образом, я могу назвать «домашний» JPanel из текущего JPanel, в котором находится пользователь. На данный момент он переходит к предыдущей JPanel, но содержимое пуст. Любая помощь будет отличной, СПАСИБО!Вернуться к предыдущему JPanel
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Mainscreen extends JFrame {
public JPanel Home;
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() {
ArrayList <JPanel> jpLayout = new ArrayList();
final Dataentrylog DEL = new Dataentrylog(this, jpLayout);
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));
Home.setVisible(true);
setContentPane(Home);
Home.setLayout(null);
JButton delLog = new JButton("Next JPanel");
delLog.setFont(new Font("Tahoma", Font.PLAIN, 14));
delLog.setForeground(new Color(0, 0, 0));
delLog.setBackground(UIManager.getColor("Menu.selectionBackground"));
Home.add(delLog);
jpLayout.add(Home);
delLog.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Home.setVisible(false);
setContentPane(DEL);
getContentPane().setLayout(null);
}
});
delLog.setBounds(44, 214, 213, 61);
}
}
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Dataentrylog extends JPanel {
public Dataentrylog(final JFrame parent, final ArrayList <JPanel> jpLayout) {
setBounds(100, 100, 618, 373);
setBackground(new Color(255, 250, 250));
setBorder(new LineBorder(Color.DARK_GRAY, 1, true));
setLayout(null);
final JButton btnSignIn = new JButton("Go Back");
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);
parent.setContentPane(jpLayout.get(0));
setLayout(null);
}
});
btnSignIn.setBounds(226, 282, 153, 52);
add(btnSignIn);
}
}
Спасибо за ваша помощь, но это не школа. Я знаком с CardLayout, поэтому я создал ArrayList, пытаясь подражать ему в меру своих возможностей. Я думал об использовании стека, но беспокоился о ограничениях памяти. –
мы не должны, однако, изобретать колесо. Однако, если вы намеревались написать собственный менеджер макетов или понять, как работает менеджер макетов, тогда в интерактивном учебном курсе есть [раздел] (http://docs.oracle.com/javase/tutorial/uiswing/layout/custom. html). – Sage