初学Java程序员在这里。我正在尝试创建一个纸牌游戏来学习更多关于Java的知识。我有一个名字数组,我拿出一个数据库。对于数组中的每个字符串,我想创建一个JPanel,并在JLabels中设置名称,权力,健康等。在循环中生成JFrames,命名问题
问题是当我在循环中创建它们时,它们都具有相同的名称并覆盖彼此。自从我读取Java没有动态变量名称,我该如何解决这个问题?
public void loadDatabaseCardElements(ArrayList cards) {
ArrayList<String> buildCards = cards;
int i;
for(i = 0; i != buildCards.size();) {
String var = buildCards.get(0);
//create the Panel etc
JPanel mainHolder = new JPanel();
mainHolder.setLayout(new BoxLayout(mainHolder, BoxLayout.PAGE_AXIS));
JLabel name = new JLabel("Name: " + var);
JLabel powerLabel = new JLabel("Power: ");
JLabel healthLabel = new JLabel("Health: ");
JLabel armorLabel = new JLabel("Armor: ");
JLabel type1Label = new JLabel("Type1");
JLabel type2Label = new JLabel("Type2: ");
JLabel ability1Label = new JLabel("Ability1: ");
JLabel ability2Label = new JLabel("Ability2: ");
JLabel ability3Label = new JLabel("Ability3: ");
JButton card1 = new JButton("Add to deck");
mainHolder.add(name);
mainHolder.add(powerLabel);
mainHolder.add(healthLabel);
mainHolder.add(armorLabel);
mainHolder.add(type1Label);
mainHolder.add(type2Label);
mainHolder.add(ability1Label);
mainHolder.add(ability2Label);
mainHolder.add(ability3Label);
mainHolder.add(card1);
mainHolder.setBorder(BorderFactory.createLineBorder(Color.black));
mainHolder.setPreferredSize(new Dimension(130, 200));
frame1.add(mainHolder, BorderLayout.WEST);
SwingUtilities.updateComponentTreeUI(frame1);
card1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
preDeck.add(var); //add to another array when clicked
}
});
if (buildCards.size() != 0) {
buildCards.remove(0);
} else {
}
}
}
在这种情况下的问题是,你以这样的方式,将覆盖'BorderLayout.WEST'的当前内容添加'JPanel'到'JFrame'区。查看https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html了解布局管理器的信息。我会说,通过GUI开发学习Java可能不是最好的方法。通过开发问题本身的模型可以学习基本概念。这可以在用户输入或不用用户输入的情况下进行测试,然后您可以尝试建立一个视图,以增加信心。 –