我试图使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卡在第一张卡上,不再切换到下一张卡!没有错误消息,程序可以正常运行,但是没有完成交换卡的含义!请注意,当我单独进行操作时,该程序可以正常运行!谢谢。
答案 0 :(得分:1)
好的,所以注释掉的for loop是什么对我不起作用,这让我真的感到困惑吗?
您应该做的第一件事是将调试代码添加到循环中,以查看是否使用了唯一的卡名。
如果您这样做,则会发现以下问题:
for (int i = 0; i < listElements.length-1; i ++) {
为什么要从列表长度中减去1?您只能将一个面板添加到CardLayout。
代码应为:
for (int i = 0; i < listElements.length; i ++) {
当代码没有按照您认为的那样执行时,您需要添加调试代码或使用调试器逐步查看代码,以查看代码是否按预期执行。
您不能总是盯着代码看。