2014-02-15 4 views
0

Первый проект Java - решение головоломки Sudoku. Используется SDK для создания первого графического интерфейса (плохая идея?). GUI имеет 9x9 сетку квадратов JButtons. Добавлены обработчики (81!), Для которых «щелчок» циклически меняет значения «_», «1», «9». Именованные кнопки в сетке отражают позицию (также больно). Для решения головоломки реализован массив 9x9 объектов Tile. Плитки для отображения состояния соответствующих JButtons (текстовое значение и т. Д.). Хотите использовать массив Tiles для решения головоломки. Чтобы использовать методы get/setText для r/w из массива в/из JButtons. Хит-стрит !! Невозможно найти способ ссылки на JButtons. Hoped для создания String, представляющего имя переменной JButton (достаточно просто), а затем магическое преобразование (тип casting?) Для ссылки на объект JButton. Невозможно? Строка - это строка ...? У меня есть объект в памяти (JButton) Я не могу ссылаться динамически? Подходы (tic-tac-toe и т. Д.) Создают массив JButtons для доступа по индексу. Не хочу этого делать, поскольку это избавляет от простоты использования качелей. Созданный исходный код SDK - это уже 2000 строк! Использовать хэш для сопоставления объектов объектам? В идеале каждый объект Tile будет отображаться на соответствующий JButton при его создании. Надеюсь, здесь достаточно подробностей, чтобы объяснить, что я пытаюсь сделать. Это тот случай, когда указатели были бы хороши? Является ли это падением использования SDK для графического интерфейса? Недостаток в Java? Может ли кто-нибудь рекомендовать подход к этому (трюки или подсказки)? Благодаря!!Динамическая ссылка на JComponents?

+2

Вы должны использовать массив кнопок вместо 81 переменных. Это унифицирует ваш доступ к кнопкам и значительно уменьшит ваши 2000 строк кода. Кроме того, вы можете использовать один ActionHandler и присоединить его ко всем кнопкам: 'ActionEvent.getSource()' сообщает вам, какая кнопка была нажата. – Thomas

+0

Вы * можете * создать «Map ', заполнить его «map.put» («button00», новый JButton()) »и получить доступ к кнопкам с помощью' map.get («button00») '. Но описание звучит так, как будто есть некоторые проблемы с вашим подходом. Когда вы говорите, что вы «использовали SDK для создания графического интерфейса», вы имеете в виду, что вы использовали какой-то GUI-строитель, где вы визуализируете свои компоненты (а не по-настоящему писать * код *)? Этот автоматически сгенерированный код часто ужасен и, конечно же, не лучшая основа для изучения Java .... – Marco13

+0

Я думаю, что я пробовал универсальный обработчик событий и «это», или без него, но без компиляции. Я написал код, поэтому мне пришлось только изменить суффикс двух имен переменных для каждой вставки (get/set). Этот труд в стороне, кажется, я застрял с предложением массива JButtons. Есть ли способ ссылаться на мой массив JButtons через интерфейс swing (для упрощения дизайна пользовательского интерфейса) или теперь у меня есть собственные объекты JButton, к которым SDK не может получить доступ? Напротив того, что у меня было. Печаль во благо. Возможно, я начинаю ценить C/C++ все больше и больше. – Lester

ответ

0

Массив объектов, расширяющих JButton - путь. Выучил много здесь и много спасибо всем, кто внес свой вклад! Для новичка Java, чтобы думать, что обширный пользовательский интерфейс swing - это простой подход, это глупо. Мне потребовалось несколько недель, чтобы изучить основы JComponents. Я все еще использую «Window Builder», но только для самого базового интерфейса. Хотите бросить вызов новому ученику? Пусть он попытается решить Судоку как первый проект! Теперь, когда я победил в этом интерфейсе, я чувствую себя на вершине мира, и никакая проблема не в моих силах! ЕЩЕ РАЗ СПАСИБО!!

Смежные вопросы