이 문제를 직접 해결하는 방법을 모르는 경우가 조금 있습니다. 지금까지 웹 프로그래밍 이외의 다른 작업을 수행 한 적이 한 번도 없었지만 Java에 대한 경험이 얼마 남지 않았습니다. 자바와.Java의 기본 리스너 동작에 문제가 있습니다.
마법사를 만들고 창에 표시된 필드 만들기를 일반화하려고합니다. 따라서 실제 컴포넌트 인 JTextField를 직접 제어 할 수는 없지만 미세한 세부 사항을 처리하는 래퍼 클래스는 필요합니다. 그러나 값이 변경된시기를 알고 싶습니다. 그래서 JTextField 자체에 VetoableChangeListener를 등록 할 수있는 "addVetoableChangeListener"메서드를 추가했습니다.
메서드가 호출되고 디버그의 JTextField에 수신기가 전달되는지 확인했습니다. 그러나 아무 것도 호출되지 않습니다. 예외는 발생하지 않고 인터페이스 VetoableChangeListener를 구현하는 메서드 내 내 중단 점은 호출되지 않습니다.
내가 얻지 못하는 것이 있습니까? 청취자가 올바르게 작동하기 전에 청취자가 일종의 구성 요소 여야합니까? 아니면 단순히 인터페이스를 구현해야합니까? 아마 나는 너무 오랫동안 집중 해 왔기 때문에 분명한 오류가 간과 될 것입니다. 그리고 저는 여러분 중 한 분에게 그것이 분명해지기를 희망합니다. 내가 시도하고있는 무슨의 간단한 버전은 : 제약 속성이 JTextField의에서 변경되는 경우
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);
}
}
더 나은 도움을 받으려면 SSCCE (http://pscode.org/sscce.html)를 게시하십시오. 'WizardTextField'와 같은 타사 클래스가 아닌 표준 J2SE 클래스를 사용하는 것이 중요합니다. –
나는 WizardTextField를 제거 하겠지만, "field.addVetoableChangeListener"를 직접 호출하고 충분한 정보를 제공하지 못한다고 전화를 걸었습니다. 내가 아는 한 모두 그게 문제의 일부입니다. – Neil
sscce에서 링크를 읽는다면, 문제를 설명하지 않으면 sscce가 아님을 알 수 있습니다. andrew가 제공하는 링크를 읽으십시오. –