Home

5 Апр, 2007

cat

{java, swing} Записки новичга: календарик

В качестве календарика в нашем проекте используется jCalendar.
Компонент нареканий не вызывает, все хорошо в стандартной комплектации, кроме одного:
Невозможно установить дату программным путём, при создании компонента текущей устанавливается сегодняшняя дата (как минимум, это верно для используемой у нас версии 0.1, самой последней на данный момент).

Понятно, что это не в какие ворота :)
Поразглядывал исходники, никакой too much magic не обнаружил, добавил в итоге к публичному интерфейсу jCalendar метод void setDate(Date newDate).

Исходники прилагаются (никакого rocket science, просто выкладываю для сокращения времени другим).
diff пакета com.greef.ui.calendar под катом )

27 Мар, 2007

cat

{java, swing} Записки новичга: продолжительные задачи

Интересный подпроект SwingWorker у SwingLabs.
Процитирую описание:

«
When writing a multi-threaded application using Swing, there are two constraints to keep in mind: (refer to How to Use Threads for more details):
  • Time-consuming tasks should not be run on the Event Dispatch Thread. Otherwise the application becomes unresponsive.
  • Swing components should be accessed on the Event Dispatch Thread only.

These constraints mean that a GUI application with time intensive computing needs at least two threads: 1) a thread to perform the lengthy task and 2) the Event Dispatch Thread (EDT) for all GUI-related activities. This involves inter-thread communication which can be tricky to implement.
SwingWorker is designed for situations where you need to have a long running task run in a background thread and provide updates to the UI either when done, or while processing.
»


Link: SwingWorker @ SwingLabs

Прост, юзабелен, нареканий пока нет.

20 Мар, 2007

cat

{java} Записки новичга: и ещё о всплывающих подсказках

В догонку к предыдущей записи — о странном поведении всплывающих подсказок (в swing за это отвечает ToolTip) в таблицах.

Есть у нас MyField, наследник от JPanel, содержащий в себе текст о статусе (JLabel) и три кнопки, тот самый из предыдущего поста, который отображается с помощью CellRenderer. У кнопок этих прописывается при создании ToolTip.

Как выяснилось, если мы специально не выделяем кликом ячейку с этим jpanel, то tooltip будет браться именно у MyField (в котором, очевидно, ничего нет).
Иначе getToolTipText сам вызовется у нужной кнопки.
Значит, придется писать "прокси".

тривиальное решение вопроса )
cat

{java} Записки новичга: о странностях с JTable и CellRenderer

Наткнулся на занимательный баг в JTable или его наследниках, точно не отследил.
Потрачено было дня три, так что стоит записать конечный результат.

В проекте используется компонент JXTreeTable из пакета swingx. [обратите внимание на проекты этой SwingLabs. Вполне возможно, эти компоненты сильно облегчат вам жизнь при разработке клиентских приложений...]

подробнее о баге, как мы дошли до жизни такой и решении проблемы )
Автор для RTFM использовал:
1. JavaDoc для swing и расширения swingx [и результаты их дебага, благо большая часть исходников есть и того, и другого :)]
2. Matthew Robinsin, Pavel Vorobiev, Java Swing, 2nd Edition, 2004 [ближе к учебнику, много примеров с объяснениями "на пальцах"]
3. O'Reilly, Robert Ecksetin, Marc Loyd, Dave Wood, Java Swing, 1998 [краткий курс]

2 Мар, 2007

cat

{java} Записки новичга: JavaHelp

Дано: нужно создать справочную систему для клиентской программы на java.

Судя по гуглу, широко известный ответ: JavaHelp.
Опять же, других распространенных вариантов вроде нет. (Ошибаюсь?)
В дистриб входят и примеры, и большая справка — гуд, я пока отмечу вещи, которые мне пришлось сделать (jfyi: у меня версия 2.0.2)

0. Текст для помощи сохраняется в html файлах.
Различные параметры поисковой системы (кол-во окон, их типы, местоположения, используемые кнопки и функции, замены стандартных иконок) указываются в так называемом help set. Там же прописываются, как html разбиваются на темы в поисковой системе.

Read more... )

P.S.: Под тегом "Записки новичга" буду публиковаться какие-то странности и вещи, из-за которых было потеряно время — чтобы не терять время на следующих проектах.

Если для кого-то это будет полезная информация — я рад.
Если укажет, на более удобные (правильные) варианты решения проблем — буду благодарен.