Попытка изменить поле JFormattedtext ... не работает - PullRequest
3 голосов
/ 11 декабря 2011

Я пытаюсь установить все, что вводится в "titleField", чтобы оно отображалось в "artistField", передавая его через строковую переменную title

Я набираю текст в titleField, нажимаю ввод, и ничего не отображается в artistField

Может кто-нибудь сказать мне, что я делаю не так?

titleField.addPropertyChangeListener(new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent e){

        Object source = e.getSource();
        if (source == titleField) {
            title = (String)titleField.getValue();
        }
    }
});
artistField = new JFormattedTextField();
artistField.setText(title);

Ответы [ 3 ]

2 голосов
/ 11 декабря 2011

Вы уверены, что вам нужно использовать JFormattedTextField или вы можете использовать JTextField с DocumentListener, как рекомендует camickr?Что Formatter вы используете?

Это только код в методе propertyChange(), который выполняется при изменении свойства.Таким образом, вы должны обновить artistField из этого метода.Вам также следует обновить JFormattedTectFields, используя setValue() вместо setText(), поскольку setText() обновляет только текст, а не фактическое содержимое.

Попробуйте использовать этот PropertyChangeListener:

titleField.addPropertyChangeListener("value", new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent e){

        Object source = e.getSource();
        if (source == titleField) {
            String title = (String)titleField.getValue();
            artistField.setValue(title);
        }
    }
});

Ваш JFormattedTextField нуждается в Formatter, который может обрабатывать String.Вот тупой форматер, который просто возвращает ту же строку (A JTextField и DocumentListener - лучший выбор, если вам не нужен Formatter):

class StringFormatter extends AbstractFormatter {

    @Override
    public Object stringToValue(String text) throws ParseException {
        return text;
    }

    @Override
    public String valueToString(Object value) throws ParseException {
        return (String)value;
    }

}

Вы используете его, когдаВы инициализируете JFormattedTextField как:

JFormattedTextField titleField = new JFormattedTextField(new StringFormatter());
1 голос
/ 11 декабря 2011

Я набираю текст в titleField, нажимаю ввод, и ничего не появляется в artistField

Если вам требуется выполнить некоторую обработку при нажатии Enter, то вы должны использоватьActionListener.ActionListion может быть добавлен в JFormattedTextField или JTextField.Затем в коде ActionLIstener вы можете получить текст и сбросить другую переменную.

1 голос
/ 11 декабря 2011

Попробуйте вызвать commitEdit до getValue, может быть.Проверьте Java Doc здесь .

...