2016-11-11 3 views
0

初級Javaプログラマー。私はJavaについてもっと学ぶためにカードゲームを作ろうとしています。私はデータベースを引き出した名前の配列を持っています。配列内の各Stringについて、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 { 

     } 

    } 
} 
+1

この場合の問題点は、あなたがそれを 'BorderLayout.WEST'の現在の内容を上書きするように、' JFrame'に 'JPanel'を追加することですエリア。レイアウト・マネージャの詳細は、https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.htmlを参照してください。私は、GUIの開発を通じてJavaを学ぶことはおそらく最良の方法ではないと言います。基本的な概念は、問題自体のモデルを開発することによって学ぶことができます。これは、ユーザー入力の有無にかかわらずテストすることができます。次に、信頼が増すにつれて、ビューを作成してビルドすることができます。 –

答えて

0

配列に格納することができます要素をそれぞれJLabelに追加します。これは、あなたが必要なものを達成するのを助けることができます:

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

は、フレーム内の標準のJPanelのための拡張可能なレイアウトを設定して、標準のJPanelに毎回新しいJPanelのを追加します。これは命名の問題を解決するはずです。

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

あなたが最初に割り当てている:uは、各パネルにアクセスする必要がある場合は、同じ名前を持つすべてのパネルを上書きするための理由は、あなたのコードのこの部分によるものである

関連する問題