аналогичные входные диалоговые шаблоны создания / качели

Я создал пользовательский интерфейс в Swing с помощью NetBeans.
Есть несколько случаев использования, когда пользователь нажимает кнопки, и в результате появляется JDialog.
JDialog принимает ввод через JComboBox, по крайней мере, 4.
Например.
Пользователь нажимает "ButtonA", и появляется диалоговое окно JDialog, в котором отображается следующее:

"select X:" combo  
"select Y:" combo  
"select Z:" combo  
"select O:" combo  etc  

т.е. рядом с каждой комбо есть описательная метка. Помимо каждой комбинации в каждом JDialog есть несколько других элементов управления, например JCheckbox, JTextarea
. Если пользователь нажимает "ButtonB", появляется JDialog, отображающий следующее:

"select A:" combo  
"select B:" combo  
"select C:" combo  etc  

Таким образом, диалоги не одинаковы, но имеют некоторый шаблон в формате их представления. т.е. использование выпадающих списков.
Первоначально я хотел создать один JDialog и передать некоторые аргументы для текста, который он должен отображать на метках JDialogs, и должен ли отображаться JCheckbox или нет, должен ли JTextArea отображаться или нет и с чем текст и т. д., все зависит от параметров, переданных при инициализации JDialog, чтобы иметь один класс для всех случаев использования, но код стал очень сложным, и я отказался от этого подхода.
Что я сделал, так это создал через GUI Designer. JDialog, ровно столько, сколько необходимо для каждого нажатия кнопки, и придумал около 10-11 таких JDialogs.
Этот подход значительно упростил программирование, но я не знаю, является ли это стандартным способом справиться с этим, так как я создал 10-11 дополнительных классов для ввода.
Мой вопрос в том, разумно ли то, что я сделал, или есть лучшие способы справиться с такой ситуацией.
Спасибо!


person Cratylus    schedule 14.11.2010    source источник


Ответы (1)


Думаю, я бы написал класс DialogBuilder, который возвращает JDialog.


РЕДАКТИРОВАТЬ:

Визуальное и программное создание диалогов

Я привык генерировать диалоги, написав код. до Java я писал код в Delphi, в котором диалоги создавались с использованием графического интерфейса, поэтому поначалу я находил это раздражающим и даже утомительным. В настоящее время я скорее наслаждаюсь этим. Так что да, я бы, вероятно, выбросил (большую часть) кода диалога, созданного netbeans. Если только ваши диалоги не сложнее, чем предполагает ваш вопрос.

Сложность

Да, есть опасность, что в конечном итоге вы потратите много времени на создание довольно сложного кода. Однако, если вы похожи на меня, вы многому научитесь, делая это. Вы узнаете, как использовать различные шаблоны, чтобы избежать этой сложности. Поиск элегантного способа решения этих проблем — это то, что я нахожу довольно удовлетворительным — это один из аспектов программирования, который я нахожу самым приятным.

Параметры

Когда вы упоминаете о своем беспокойстве по поводу «if argA&& argB && !argC then display JCheckbox и т. д. для 10-11 различных jdialogs», я могу только предложить вам попытаться подойти к проблеме с другого направления. Например, вы можете передать DialogBuilder список пар меток и JComboboxes. Или, может быть, вы могли бы расширить JCombobox, чтобы у него было дополнительное поле и геттер для его метки.

e.g.

DialogBuilder builder = new DialogFactory();
builder.add("Select X:", new Xcombo(...), true);  // with checkbox
builder.add("Select Y:", new Ycombo(...), false); // without
...
builder.getDialog.setVisible(true);

or

builder.add("Select X:", new MyCombo(xList), false);
builder.add("Select Y:", new MyCombo(yList), false);

Вы видите (надеюсь), что методу DialogBuilder.add(String, JComboBox, boolean) не потребуются десятки сложных предложений if ... then ... else.

Только мои 0,02 доллара.

person RedGrittyBrick    schedule 14.11.2010
comment
Значит, визуальные диалоги нужно удалить? А jdialog нужно создать с помощью кода в классе DialogBuilder? Тем не менее, не будет ли код создания слишком сложным? Например. что-то, если argA&& argB && !argC затем отобразить JCheckbox и т.д.... для 10-11 различных jdialogs - person Cratylus; 14.11.2010
comment
Интересная идея!!! Кстати, Select X: для метки, отображаемой рядом с JCombo. - person Cratylus; 14.11.2010