setName 関数を追加するために編集されました。
私は、大学で約 6 時間の CS の後に Java の学習を支援するために、stackoverflow を 1 年以上使用しています。君たちは最高です!だからそれに到達する...
私の問題は、複数の textFields を持つ JOptionPane を持っていることです。これらのフィールドからテキストを取得するすべての例は、単一の textField のみを示しています。各ボックスを個別に処理する textField ごとに個別の DocumentListener を作成できますが、次のような DocumentListener を 1 つ作成する方法が必要なようです。
if(ネームボックスが変更されました)
名前を編集
else if(dataBox が変更されました)
データの編集
等....
元のコードは次のとおりです。
public class HumanPlayer extends Player
{
/**
* Constructor for objects of class HumanPlayer
*/
public HumanPlayer()
{
setName("Human " + getOrder());
}
@Override
public void chooseSoldiers()
{
JLabel nameLabel = new JLabel("Enter name: " );
//humans.setPreferredSize(new Dimension(100,50));
final JTextField nameBox = new JTextField();
final JTextField infantryBox = new JTextField();
final JTextField scoutBox = new JTextField();
final JTextField sniperBox = new JTextField();
JLabel infLabel = new JLabel("Infantry: " );
JLabel scLabel = new JLabel("Scouts: " );
JLabel snLabel = new JLabel("Snipers: " );
JPanel soldierPanel = new JPanel();
soldierPanel.setLayout(new GridLayout(4,2,5, 8));
soldierPanel.add(nameLabel);
soldierPanel.add(nameBox);
soldierPanel.add(infLabel);
soldierPanel.add(infantryBox);
soldierPanel.add(scLabel);
soldierPanel.add(scoutBox);
soldierPanel.add(snLabel);
soldierPanel.add(sniperBox);
nameBox.getDocument().addDocumentListener(new NameListener());
infantryBox.getDocument().addDocumentListener(new NameListener());
scoutBox.getDocument().addDocumentListener(new NameListener());
sniperBox.getDocument().addDocumentListener(new NameListener());
int ok = JOptionPane.showOptionDialog(null, soldierPanel,
"Player " + getOrder(), JOptionPane.CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null);
}
public class NameListener implements DocumentListener
{
@Override
public void changedUpdate(DocumentEvent e) {}
@Override
public void insertUpdate(DocumentEvent e) {
try {
setName(e.getDocument().getText(0,e.getDocument().getLength()));
} catch (BadLocationException e1) {e1.printStackTrace();}
}
@Override
public void removeUpdate(DocumentEvent e) {
try {
setName(e.getDocument().getText(0,e.getDocument().getLength()));
} catch (BadLocationException e1) {e1.printStackTrace();
}
}
}
}
別ファイル:
public abstract class Player
{
....
private String name;
....
public void setName(String _name)
{
name = _name;
}