繁体   English   中英

如何使CardLayout可以处理任意数量的卡片?

[英]How do I make a CardLayout work with an arbitrary amount of cards?

我正在尝试使cardLayout可以处理任意数量的卡,这意味着我将需要某种遍历我拥有的所有对象的循环。 现在,我尝试了一下,并使其与手动创建的JPanels一起使用,但是一旦将其放入循环中就无法使用。

@SuppressWarnings("serial")

public class ClassCardLayoutPane extends JPanel{

JPanel cards;

public ClassCardLayoutPane() {
    initialiseGUI();
}

private void initialiseGUI() {
    String[] listElements = {"A2", "C3"};
    cards = new JPanel(new CardLayout());


    JLabel label = new JLabel("Update");
    add(label);

    JList selectionList = new JList(listElements);
    selectionList.addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent evt) {

            if (!evt.getValueIsAdjusting()) {
                label.setText(selectionList.getSelectedValue().toString());
                CardLayout cl = (CardLayout)(cards.getLayout());
                cl.show(cards, label.getText());


            }
        }

    });

    // The panels created by this loop don't work, the cards get stuck on the first one

    /*
    for (int i = 0; i < listElements.length-1; i ++) {

        JPanel temp = new JPanel();
        temp.add(new JLabel(i+""));
        cards.add(temp, listElements[i]);

    }*/


    JPanel card1 = new JPanel();
    card1.add(new JTable(20,20));

    JPanel card2 = new JPanel();
    card2.add(new JTable(10,20));

    cards.add(card1, listElements[0]);
    cards.add(card2, listElements[1]);

    //the panels here do work. I don't know what I'm doing wrong

    add(selectionList);
    add(cards);
}

public static void main(String[] args) {
    JFrame main = new JFrame("Win");
    main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    main.setPreferredSize(new Dimension(1366, 768));
    main.getContentPane().add(new ClassCardLayoutPane());
    main.pack();
    main.setVisible(true);
}

}

好的,因此注释掉的for loop对我不起作用,这让我真的感到困惑吗? 有人可以向我解释为什么它不起作用以及如何使它起作用吗? 顺便说一句,listElements可以是不同的大小,这就是我要尝试使用的大小,因为最终,listElements将从LinkedList开始,所以当我为ListItems创建数组时,每次都会有不同的大小,因为我不知道会有多少个项目。 有人可以帮我做这个工作吗? 所谓“不起作用”,是指在使用循环时,JPanel卡在第一张卡上,不再切换到下一张卡! 没有错误消息,程序可以正常运行,但是没有完成交换卡的含义! 请注意,当我单独进行操作时,该程序可以正常运行! 谢谢。

好的,因此注释掉的for loop对我不起作用,这让我真的感到困惑吗?

好吧,您应该做的第一件事是将调试代码添加到循环中,以查看是否使用了唯一的卡名称。

如果这样做,您将注意到以下问题:

for (int i = 0; i < listElements.length-1; i ++) {

为什么要从列表长度中减去1? 您只能将一个面板添加到CardLayout中。

代码应为:

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

如果您认为代码没有执行,则需要添加调试代码或使用调试器逐步检查代码,以查看代码是否按预期执行。

您不能总是盯着代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM