В Java Swing как вы можете управлять списком панелей, позволяющих выбрать несколько панелей? - PullRequest
3 голосов
/ 18 декабря 2008

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

Что я по сути пытаюсь сделать, так это показать что-то похожее на окно загрузки Firefox, окно загрузки I-Tunes, и я могу назвать больше, но все они выглядят в основном одинаково. В каждом из этих приложений выбирается каждая из «панелей прогресса». Поэтому, чтобы реализовать это, я подумал, что было бы просто использовать список JPanels, каждый с JProgressBar и JLabel, каждый из которых может просто принять фокус, чтобы определить, выбраны ли он и другие. Я думал, что это будет легкой задачей, но если я использую JList, он просто отображает текст. Затем я решил, что покажу все панели задач на большей панели, но не могу заставить внутренние панели распознавать фокус.

Есть шаблон для этого? Есть ли стандартное решение, которое я просто не нашел? Или есть лучший способ сделать это? Я не хочу заново изобретать колесо, но я подумал, что это будет просто.

Ответы [ 3 ]

8 голосов
/ 18 декабря 2008

Звучит так, как будто вы ищете JList.

Вы можете добавить свои элементы в JList, сначала добавив свою «задачу» в ListModel объекта JList (см. Раздел Создание модели из Java Tutorials), а затем вам нужно будет назначить пользовательский ListCellRenderer, который будет принимать вашу «задачу» и отображать на JList как JPanel в самом списке. Ключевым моментом здесь является то, чтобы ваш пользовательский ListCellRenderer мог отображать ваше «задание» в JList так, как вы хотите, чтобы оно отображалось на JList.

Посмотрите на Написание пользовательского средства визуализации ячеек со страницы Как использовать списки на странице Учебников по Java. В нем будет описано, как сделать пользовательский ListCellRenderer, чтобы вы могли представлять свою «задачу» как угодно.

Короче говоря, вы реализуете интерфейс ListCellRenderer, реализуя getListCellRendererComponent, который будет возвращать Component, который является представление вашей задачи в JList. Возможно, вы захотите либо создать или создать экземпляр JPanel в этом методе и вернуть его как Component.

1 голос
/ 18 декабря 2008

Стандартный способ сделать это - использовать JTable (или JList) в качестве контейнера.

Вам не нужно использовать рендеринг по умолчанию для ячеек таблицы, но вы можете указать свой рендер для определенных ячеек. Взгляните на CellRenderer

0 голосов
/ 18 декабря 2008

Как насчет JTable (который можно установить для выбора нескольких строк) с внутренним JPanel, занимающим одну ячейку в каждой строке, которая содержит JProgressBar и JLabel. Или вы можете использовать JList с такой же структурой, как я только что описал.

...