循环生成JFrame,命名问题

Generate JFrames in a loop, naming issue

初学者 Java 程序员在这里。我正在尝试创建一个纸牌游戏来了解有关 Java 的更多信息。我有一个名字数组,我从数据库中提取了这些名字。对于数组中的每个字符串,我想创建一个 JPanel 并在 JLabels 中设置名称、功率、健康等。

问题是当我在循环中创建它们时,它们都具有相同的名称并相互覆盖。由于我读到 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 {

        }

    }
}

在框架中为标准jpanel 设置一个可增长的布局,然后每次都向标准jpanel 添加一个新的jpanel。这应该可以解决命名问题。如果你需要访问每个面板,你可以将它们存储在一个数组中

覆盖所有同名面板的原因是您的这部分代码:

int i;
    for(i = 0; i != buildCards.size();) {
        String var = buildCards.get(0);

您正在将列表的第一个元素分配给每个 JLabel。这可以帮助您实现您的需求:

for(int i = 0; i < buildCards.size(); i++){
       String var = buildCards.get(i);
       // Followed by your code
}