java - 如何在 GridLayout 中管理多个菜单?

标签 java swing

我有 4 个不同的 View ,我希望它们具有不同的 JMenu(因为 loginPanel 根本不存在)。我添加到卡片中的所有 View 都扩展了 JPanel 并将它们添加到卡片中。将 JmenuBar 设置为特定的 JPanel 是不可能的,而只能将 JFrame 设置为特定的 JMenuBar 而我希望每张卡片都有特定的 JMenuBar

public class MainFrame extends JFrame{

    public static JPanel cards;
    public Controller controller;

    public MainFrame() {

        cards = new JPanel(new CardLayout());

        controller = new Controller();

        setJMenuBar(controller.customMenuBar);  

        cards.add(controller.loginPanel, "login");
        cards.add(controller.prisonerAdd, "add");   
        cards.add(controller.prisonerPanel, "prisoner");
        cards.add(controller.searchView, "search");

        add(cards);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setVisible(true);
    }

这是我初始化 JPanel 并将 actionListeners 添加到 JComponents 的 Controller :

public class Controller {

    public UserDatabase db = new UserDatabase();
    public LoginPanel loginPanel = new LoginPanel(); // extends JPanel
    public CustomMenuBar customMenuBar = new CustomMenuBar(); // extends JMenuBar
    public PrisonerAdd prisonerAdd = new PrisonerAdd(); // extends JPanel
    public PrisonerController prisonerController = new PrisonerController();
    public SearchView searchView = new SearchView(); //extends JPanel
    public PrisonerPanel prisonerPanel = new PrisonerPanel(); // extends JPanel

    public Controller() {

        loginPanel.addLoginListener(new LoginListener());
        customMenuBar.addLogoutListener(new LogoutListener());
        customMenuBar.addChangeViewListener(new ChangeViewListener());
        prisonerAdd.addPrisonerListener(new AddPrisonerListener());
        searchView.searchPanel.addSearchPrisonerListener(new SearchPrisonerListener());

    }

最佳答案

  1. 为每个面板添加一个 ComponentListener

  2. 处理 componentShown(...) 事件。

  3. 每当显示面板时,您都会更新相关面板的 JMenuBar。

关于java - 如何在 GridLayout 中管理多个菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483306/

相关文章:

Java Graphics2D 移动物体停在中间

java - 存储在 Canvas 上绘制的形状

java - JSplitPane 精确分割 50%

java - 需要 OOP 和继承建议

java - 对并发架构概念的困惑

java - 将空白替换为 %20

java - 如何将jasper集成到jhipster项目中

java - 组合 putIfAbsent 和替换为 ConcurrentMap 的原子性

java - 取消 showInputDialog 时出错

java - 如何在Java中使用FileDialog绘制图像