java - 回到之前的 JPanel

标签 java swing user-interface jpanel windowbuilder

我继承了代码,由于需要很长时间才能解释的原因,我需要使用空布局。我一直在尝试利用他们在 JPanel 之间的导航。我一直无法弄清楚如何。这就是我现在所拥有的,它被分解成下面的 SSCCE。我想要做的是将 JPanel 添加到包含对先前 JPanel 的引用的 ArrayList。这样我就可以从用户所在的当前 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);

 }
} 

最佳答案

I am required to use a null layout.

如果一些导师要求您使用null 布局 在面板之间进行导航,您需要执行以下操作:

  • 首先,离开导师。
  • 其次,使用CardLayout。

查看教程:How to use CardLayout

工作示例:

这是一个书面的 CardLayoutDemo,它使用按钮点击操作在 10 个面板 中导航,包括主页面板:

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);
            }
        });
    }

}

关于java - 回到之前的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577104/

相关文章:

javascript - 《金融时报》如何在粘贴文本时添加免责声明?

java - 在 swing 中撤消 JTable

java - Android:资源中的翻译

java - 编写 Java 教科书中的程序作为练习。我的内容和书上的一模一样,但它一直给我 "Cannot find symbol errors"

Java:如何将文件从 JTable 拖到 native 文件系统?

jquery - Contenteditable ="true"无法与 jQuery UI 选项卡正常工作

java - Eclipse插件开发: Vertically scrolling table?

javascript - Doppio:多线程如何工作?有什么限制吗?

java - 是否可以在查询中添加数据?

java - 当项目添加到 JList 时更新 JTabbedPane