0

私は現在、学校のチーム プロジェクトに取り組んでおり、fieldMap 内の textFields で setText() に問題があります。fieldMap.get(fieldTitle.values()[i]) を使用してそれらから値を取得できますが、HashMaps と gbcs に関する理解が不足しているため、テキスト フィールドにテキストを設定する方法がわかりません。 .

class InstructorEditorPanel extends JPanel {
enum FieldTitle {
  B_NUMBER("B Number"), FIRST_NAME("First Name"), LAST_NAME("Last Name");
  private String title;

  private FieldTitle(String title) {
     this.title = title;
  }

  public String getTitle() {
     return title;
  }
};

private static final Insets WEST_INSETS = new Insets(5, 0, 5, 5);
private static final Insets EAST_INSETS = new Insets(5, 5, 5, 0);
private Map<FieldTitle, JTextField> fieldMap = new HashMap<FieldTitle, JTextField>();

public InstructorEditorPanel() {
  setLayout(new GridBagLayout());
  setBorder(BorderFactory.createCompoundBorder(
        BorderFactory.createTitledBorder("Instructor Editor"),
        BorderFactory.createEmptyBorder(5, 5, 5, 5)));
  GridBagConstraints gbc;
  for (int i = 0; i < FieldTitle.values().length; i++) {
     FieldTitle fieldTitle = FieldTitle.values()[i];
     gbc = createGbc(0, i);
     add(new JLabel(fieldTitle.getTitle() + ":", JLabel.LEFT), gbc);
     gbc = createGbc(1, i);
     JTextField textField = new JTextField(10);
     add(textField, gbc);

     fieldMap.put(fieldTitle, textField);
  }
}

private GridBagConstraints createGbc(int x, int y) {
  GridBagConstraints gbc = new GridBagConstraints();
  gbc.gridx = x;
  gbc.gridy = y;
  gbc.gridwidth = 1;
  gbc.gridheight = 1;

  gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
  gbc.fill = (x == 0) ? GridBagConstraints.BOTH
        : GridBagConstraints.HORIZONTAL;

  gbc.insets = (x == 0) ? WEST_INSETS : EAST_INSETS;
  gbc.weightx = (x == 0) ? 0.1 : 1.0;
  gbc.weighty = 1.0;
  return gbc;
}

public String getFieldText(FieldTitle fieldTitle) {
  return fieldMap.get(fieldTitle).getText();
}
4

3 に答える 3

2

テキスト フィールドにテキストを設定する必要がある場合は、その textField でsetTextメソッドを呼び出します。

呼び出して既に textField を取得しているため

fieldMap.get(fieldTitle.values()[i])

次のように setText メソッドを呼び出してテキストを設定できます。

fieldMap.get(fieldTitle.values()[i]).setText('Something');
于 2012-04-23T16:32:15.093 に答える
1

対称性の理由から推測するだけです:

public void setFieldText (FieldTitle fieldTitle, String toSet) {
   fieldMap.get (fieldTitle).setText (toSet);
}

メソッドを InstructorEditorPanel に配置します。ここに他のメソッドがあります。それを呼び出すには、そのクラスの内部列挙型にアクセスする必要があります。

public class TestFrame extends JFrame {

    public TestFrame () {
        super ("testframe");
        setSize (400, 400);
        setVisible (true);
    }

    public static void main (String [] args)
    {
        InstructorEditorPanel iep = new InstructorEditorPanel ();
        TestFrame tf = new TestFrame ();
        tf.add (iep);
        iep.setFieldText (InstructorEditorPanel.FieldTitle.FIRST_NAME, "Donald");
    }
}

テスト済み、機能しました。

于 2012-04-23T16:28:32.287 に答える
0

setText(String t)を使用

fieldMap.get(fieldTitle).setText("String to set");
于 2012-04-23T16:28:20.637 に答える