为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Cats萌萌 2023-09-20 16:17:47
如何删除用户当前所在的卡。我知道如何使用下一个和上一个函数来完成卡片布局,但是如何删除用户所在的当前帧?例如,如果我有一个程序,当前位于 5 个面板中的第 3 个面板,我将如何删除当前的第 3 个面板。一旦删除它,下一个或上一个就会取代它。我不认为可以使用removecurrentlayout,因为我没有删除组件。例如,在代码中,如果我在卡 3 上,我将如何删除卡 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);  }}
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

如果您查看 的文档Container,您会发现它有一个remove()方法。既然JPanelextendsContainer也有这个方法。您应该熟悉这些 API 文档才能找到此类信息。



查看完整回答
反对 回复 2023-09-20
?
噜噜哒

TA贡献1784条经验 获得超7个赞

不幸的是,它CardLayout不会告诉您当前正在显示哪张卡(JPanel)。

查看Card Layout Focus中的一个扩展类CardLayout以提供此功能。

您将使用该getCurrentCard()方法访问当前正在显示的面板。

然后,一旦获得当前正在显示的卡片,您就可以使用该类的remove(...)方法将其从父面板中删除Container

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

//final CardLayout cardLayout = new CardLayout();
final RXCardLayout cardLayout = new RXCardLayout();

“删除”按钮的逻辑是:

cardPanel.remove(cardLayout.getCurrentCard());


查看完整回答
反对 回复 2023-09-20
?
当年话下

TA贡献1890条经验 获得超9个赞

当您说索引(5 个面板中的第 3 个面板)时,您指的是插入组件时的名称(字符串),对吧?我不知道有什么优雅的方法可以做到这一点,但是您可以尝试获取此容器(parentComponent)中的所有组件,并尝试找到与您的索引同名的组件。例如:


Component[] components = parentComponent.getComponents();


for(int i = 0; i < components.length; i++) {

    if(components[i].getName().equals(index)) {

        cardLayout.removeLayoutComponent(components[i]);

    }

}


查看完整回答
反对 回复 2023-09-20
  • 3 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信