Немного стыдно, что я не знаю, как это исправить самостоятельно, видя, что у меня есть небольшой опыт работы с Java, однако до сих пор я никогда не делал ничего, кроме веб-программирования на Java.
Я пытаюсь создать мастер и пытаюсь обобщить создание полей, представленных в окне. Таким образом, у меня нет прямого контроля над самим компонентом JTextField, но есть класс-оболочка, который обрабатывает более мелкие детали. Однако я хотел бы знать, когда значение изменилось, поэтому я добавил метод «addVetoableChangeListener», который позволяет мне зарегистрировать VetoableChangeListener в самом JTextField.
Я проверил, что метод вызывается и что он передает слушателя в JTextField при отладке. Тем не менее, ничего не называется. Никаких исключений не запускается, и моя точка останова внутри метода, который реализует интерфейс VetoableChangeListener, никогда не вызывается.
Есть что-то, чего я не получаю? Должен ли слушатель быть своего рода компонентом, прежде чем он будет работать правильно, или он просто должен реализовать интерфейс? Возможно, я упускаю из виду очевидную ошибку, потому что слишком долго концентрировался на ней, и я надеюсь, что она станет очевидной для одного из вас. Более простая версия того, что я пытаюсь сделать, это:
public class TomcatConfigPanel extends WizardKeyValuePanel implements VetoableChangeListener {
protected void initPanel(JPanel mainPanel) {
addField("port", "8080");
IWizardField portField = getField("port");
portField.addVetoableChangeListener(this);
}
public void vetoableChange(PropertyChangeEvent evt)
throws PropertyVetoException {
// Stuff that would drive you Lovecraft insane if you saw what was written here
}
}
public class WizardTextField implements IWizardField {
private JLabel label;
private JTextField field;
public WizardTextField() {
// some initialization stuff ...
}
public void addVetoableChangeListener(VetoableChangeListener listener) {
field.addVetoableChangeListener(listener);
}
}