Является ли это правильным подходом для расширения всего Java Swing GUI с функцией проверки - PullRequest
2 голосов
/ 11 июля 2011

Когда я пишу приложение Swing GUI довольно давно, я создал 18 классов.Каждый расширяет класс свинга (JTextField, JList, JTable, JTextArea и т. Д.), И каждый реализует аналогичный интерфейс для доступа к данным и проверки.

У меня проблема с строками кода, так как он слишком длинный для обслуживания;и отчасти это объясняется тем, что многие коды либо дублируются, либо имеют много глупых состояний, таких как «if» Textbox или «else if» JList в классе валидации.

Интересно, есть ли какой-либо объектно-ориентированный способ помочь структурировать проверочные коды в абстрактном классе, это будет хорошо.все мои 18 классов уже расширяют свой собственный класс свинга, что означает, что я не могу расширить другой абстрактный класс в том же файле.

В конечном счете, я хочу сохранить простоту, краткие строки кодов, простоту понимания и попытки без использования сторонних фреймворков (так как это может вызвать проблемы в будущем).

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

У нас не так уж много контекста, и, честно говоря, может показаться, что у вас могут быть общие проблемы с дизайном, но есть пара методов, которые вы можете использовать для очистки «параллельных классов», подобных этой.Одним из них является сохранение сопоставления одного с другим изолированным для одной области и создание конкретных классов валидаторов на основе типа поля.

Другим вариантом является шаблон посетителя.У вас может быть интерфейс ValidationVisitable, который реализует каждый из ваших подклассов:

public interface ValidationVisitable {
    public void acceptVisitor(ValidationVisitor visitor);
}


//... in your concrete subclass:
public void acceptVisitor(ValidationVisitor visitor) {
    visitor.visit(this);
}

Тогда ваш класс посетителя будет иметь перегрузки для каждого конкретного типа компонента:

public class ValidationVisitor {
    public void visit(MyTextField field) {
        //validate MyTextField
    }

    public void visit(MyCheckBox cb) {
        //validate MyCheckBox
    }
}
1 голос
/ 11 июля 2011

Я не уверен, что вы пробовали, но InputVerifier был разработан для этого. Это не панацея с точки зрения человеческого фактора, но она может помочь при разумном применении и надежной обратной связи с пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...