2012-04-23 3 views
0

В настоящее время я работаю над проектом команды для школы, и у меня возникают трудности с setText() на текстовых полях в полевой карте. Я могу получить значения от них, используя fieldMap.get (fieldTitle.values ​​() [i]), но я не могу понять, как я собирался установить текст в текстовые поля из-за моего непонимания в отношении HashMaps и gbcs ,Попытка setText для текстовых полей

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(); 
} 
+0

Покажите нам ваши попытки вызова SetText() –

ответ

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"); 
    } 
} 

Протестировано, сработало.

+0

Это то, что я первоначально но переменная fieldTitle не может использоваться из другого класса. Это дает мне не найти ошибку символа. –

+0

@ShaneKelsey: Посмотрите, как получить доступ к нему в моем примере кода. –

+0

Спасибо, что работает –

2

Если вам нужно установить текст в текстовое поле, вы вызываете метод setText на этом текстовом поле.

Поскольку вы уже получение TextField по телефону

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

вы можете установить текст с помощью вызова метода SetText как:

fieldMap.get(fieldTitle.values()[i]).setText('Something'); 
+0

Это то, что я пытался сделать; однако я пытаюсь установить текст текстовых полей из другого класса. Поэтому я не могу прочитать информацию fieldTitle из перечисления. Я получаю не могу найти ошибку Symbol/ –

+0

При доступе к перечислению вам нужно сделать что-то вроде этого: InstructorEditorPanel.FieldTitle.values ​​() – mprabhat

Смежные вопросы