2013-10-24 1 views
1

У меня есть унаследованный код и по причинам, чтобы объяснить это, я должен использовать нулевой макет. Я пытаюсь взять то, что у них есть, между 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); 

} 
} 

ответ

5

Я должен использовать нулевой макет.

Если вас просят каким-то наставником для выполнения навигации между панелями с помощью null layout, вот что вам нужно сделать:

  • Первый, оставить наставника.
  • Второй, использование CardLayout.

Отъезд учебника: How to use CardLayout

Рабочий пример:

здесь письменное CardLayoutDemo, который перемещается между 10 panels в том числе домашней панели с помощью кнопки нажмите действия:

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

class CardLayoutDemo1 extends JFrame { 

    private JPanel jPanel1; 
    private JButton navHomeButt; 
    private JButton navNextButt; 
    private JButton navPreviousButt; 
    private JPanel panelContainer; 

    public CardLayoutDemo1() { 
     initComponents(); 


     panelContainer.add(createSamplePanel("Home Panel "), ""+0); 
     for(int i=1; i < 10; i++) 
     { 
      panelContainer.add(createSamplePanel("Panel "+i), ""+i); 
     } 
    } 

    private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 
     navPreviousButt = new JButton(); 
     navNextButt = new JButton(); 
     navHomeButt = new JButton(); 
     panelContainer = new JPanel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jPanel1.setBackground(new java.awt.Color(255, 255, 255)); 

     navPreviousButt.setText("Previous"); 
     navPreviousButt.setPreferredSize(new Dimension(90, 23)); 
     jPanel1.add(navPreviousButt); 

     navNextButt.setText("next"); 
     navNextButt.setPreferredSize(new Dimension(90, 23)); 
     jPanel1.add(navNextButt); 

     navHomeButt.setText("Back to Home"); 
     jPanel1.add(navHomeButt); 



     panelContainer.setPreferredSize(new Dimension(400, 300)); 
     panelContainer.setLayout(new CardLayout()); 
     // setting the card layout 

     getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END); 
     getContentPane().add(panelContainer, BorderLayout.CENTER); 




     navNextButt.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       CardLayout cardLayout = (CardLayout) panelContainer.getLayout(); 
       cardLayout.next(panelContainer); 
       // using cardLayout next() to go to next panel 
      } 
     }); 
     navHomeButt.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       CardLayout cardLayout = (CardLayout) panelContainer.getLayout(); 
       cardLayout.first(panelContainer); 
       // suing first to get to the home panel 
      } 
     }); 
     navPreviousButt.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       CardLayout cardLayout = (CardLayout) panelContainer.getLayout(); 
       cardLayout.previous(panelContainer); 

       // using previous to get to previous(left)panel 
      } 
     }); 

     pack(); 
    }     

    public JPanel createSamplePanel(String panelTitle) 
    { 
     JPanel samplePanel = new JPanel(); 
     samplePanel.add(new JLabel(panelTitle)); 

     return samplePanel; 

    }           


    public static void main(String args[]) { 

     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new CardLayoutDemo1().setVisible(true); 
      } 
     }); 
    } 

} 
+0

Спасибо за ваша помощь, но это не школа. Я знаком с CardLayout, поэтому я создал ArrayList, пытаясь подражать ему в меру своих возможностей. Я думал об использовании стека, но беспокоился о ограничениях памяти. –

+0

мы не должны, однако, изобретать колесо. Однако, если вы намеревались написать собственный менеджер макетов или понять, как работает менеджер макетов, тогда в интерактивном учебном курсе есть [раздел] (http://docs.oracle.com/javase/tutorial/uiswing/layout/custom. html). – Sage