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