CardLayout-如何删除当前卡(Java Swing)

问题描述 投票:3回答:3

如何删除用户使用的当前卡。我知道如何使用下一个和上一个功能进行卡片布局,但是如何删除用户所在的当前框架?例如,如果我有一个程序,当前我位于5个面板中的第3个面板上,我将如何删除当前的第3个面板。删除它后,下一个或上一个替换它。我不认为可以使用removecurrentlayout,因为我没有删除组件。例如,在代码中,如果我在该卡上,该如何删除卡3。

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;  
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CardLayoutProg {

    public static void main(String[] args) {

        JFrame frame = new JFrame("CardLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane = frame.getContentPane();
        JPanel buttonPanel = new JPanel();
        JButton nextButton = new JButton("Next");
        buttonPanel.add(nextButton);
        contentPane.add(buttonPanel, BorderLayout.SOUTH);
        final JPanel cardPanel = new JPanel();
        final CardLayout cardLayout = new CardLayout();
        cardPanel.setLayout(cardLayout);

        for (int i = 1; i <= 5; i++) {
          JButton card = new JButton("Card " + i);
          card.setPreferredSize(new Dimension(200, 200));
          String cardName = "card" + 123123;
          cardPanel.add(card, cardName);
        }

        contentPane.add(cardPanel, BorderLayout.CENTER);
        nextButton.addActionListener(e -> cardLayout.next(cardPanel));

        frame.pack();
        frame.setVisible(true);
  }
}
java swing cardlayout
3个回答
2
投票

如果您查看Container的文档,将会看到它具有Container方法。由于remove()扩展了JPanel,因此它也具有此方法。您应该熟悉这些API文档,才能找到此类信息。


0
投票

不幸的是,JPanel不能告诉您当前正在显示哪个卡(JPanel)。

签出Container来扩展CardLayout以提供此功能的类。

您将使用Card Layout Focus方法访问当前显示的面板。

然后,一旦获得当前显示的卡,就可以使用CardLayout类的getCurrentCard()方法将其从父面板中删除。

您只需要按如下方式使用该类:

remove(...)

您的“删除”按钮的逻辑为:

Container

0
投票

当您说索引(5个面板的第3面板)时,您的意思是插入组件时的组件名称(字符串),对吗?我不知道执行此操作的任何优雅方法,但是您可以尝试获取此容器中的所有组件(parentComponent),并尝试查找与索引名称相同的组件。例如:

//final CardLayout cardLayout = new CardLayout();
final RXCardLayout cardLayout = new RXCardLayout();
© www.soinside.com 2019 - 2024. All rights reserved.