亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號