java - 使用卡片布局,卡片不交换?

标签 java swing awt layout-manager cardlayout

我想将我的 Controller 面板保持为 JPanel 类型,因为我稍后将合并到选项卡中,我想使用这些特定屏幕上的按钮在 Main 和 NextPage 之间交换,我不想在底部有一致的按钮对于在卡片之间切换的两个屏幕(即我不想在两个屏幕上都出现添加和返回),我试图让 Main 中的添加按钮转到 NextPage,并让 NextPage 中的后退按钮转到 Main 。这是我到目前为止所拥有的:

对于 Controller :

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

public class Controller extends JPanel {

    private static Controller instance = new Controller();

    JPanel cards;
    Main mainPanel;
    NextPage nextPage;

    public Controller() {
        setLayout(new BorderLayout());
        setSize(810, 510);
        cards = new JPanel(new CardLayout());

        mainPanel = new Main();
        nextPage = new NextPage();
        cards.add(mainPanel, "Main");
        cards.add(nextPage, "Next");
        add(cards);
        setVisible(true);
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("MainPanel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Controller con = new Controller();
        frame.getContentPane().add(con);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }


    public void changeCard(String card) {
        CardLayout cl = (CardLayout) (cards.getLayout());
        cl.show(cards, card);
    }

    public static Controller getInstance() {
        return instance;
    }
}

对于主要部分:

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

public class Main extends JPanel implements ActionListener {

    private JButton search, add, delete;
    private JTextField textField;

    public Main() {

        search = new JButton("Search");
        add = new JButton("Add");
        delete = new JButton("Delete");
        textField = new JTextField(20);
        add.addActionListener(this);
        delete.addActionListener(this);
        setLayout(new BorderLayout());
        JPanel top = new JPanel();
        top.add(search);
        add(top, BorderLayout.NORTH);
        JPanel bottom = new JPanel();
        bottom.add(add);
        bottom.add(delete);
        add(bottom, BorderLayout.SOUTH);
        setVisible(true);
        setSize(400, 500);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == add) {
            Controller.getInstance().changeCard("Next");
        } else if (e.getSource() == delete) {
           System.out.println("do something");
        }
    }

}

对于下一页:

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

public class NextPage extends JPanel implements ActionListener {

    private JButton back;
    private JTextField textField;

    public NextPage() {
        back = new JButton("Back");
        textField = new JTextField(20);
        back.addActionListener(this);
        setLayout(new BorderLayout());
        add(back);
        setVisible(true);
        setSize(400, 500);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == back) {
            Controller.getInstance().changeCard("Next");
        }

    }
}

最佳答案

查看Card Layout Actions

它是 CardLayout 的扩展,为您提供上一个/下一个按钮,您可以轻松地将这些按钮添加到与 CardLayout 分开的面板中。

关于java - 使用卡片布局,卡片不交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29118516/

相关文章:

java - KeyListener 在我的 JTextField 收到 "key-hit"之前接收到 ..?

Java GPA计算(如何设置无限数组?)

java - 使用 Nifi 预处理大文件

java - 使用 Java 安全提供程序分离摘要和签名

java - 在 Eclipse 中设置新项目

java - 在多级继承的情况下如何在java中覆盖具有通用返回类型的方法

java - 使用 JFrame 和布局的 GUI 计算器

java - 将 Jlabel 添加到扩展类的面板中

java - 如何将 “Default Button” 功能添加到 Swing 中的两个按钮?

java - 如何在 Java AWT ScrollPane 中使用我的触控板进行水平鼠标滚轮滚动