Swing JTable пользовательский рендеринг - PullRequest
2 голосов
/ 19 января 2012

У меня есть такая задача программирования без JavaFx, вместо этого это Java Swing. Я понял, что мои знания все еще ограничены.

У меня есть один JTable. Но в этом JTable мне нужен обычный Cell Renderer. Цель состоит в том, чтобы сделать этот вид JTable: Пример изображения

Мои текущие решения: Пример изображения

  1. Создать одну JTable:
    • получить каждый столбец и установить его CellRenderer с помощью специального Renderer (ниже).
  2. Создание нового класса реализует TableCellRenderer:
    • вернуть разные JPanel внутри getTableCellRendererComponent метод с использованием регистра переключателя (по столбцам).

После нескольких часов и часов я думаю, что мои текущие решения - это довольно сложные задачи. Таким образом, мой вопрос:

Каков самый простой способ создания этой пользовательской таблицы JTable для достижения главной цели, упомянутой выше?

Ответы [ 4 ]

3 голосов
/ 19 января 2012

у вас есть два варианта

1) JPanel вложил еще один JComponents и решил, что с помощью стандартного LayoutManagers заметка прокрутки не естественна и не хороша

2) JTable с JPanel может решить эту проблему, заметьте прокрутку внутренней JScrollPane внутри другой JScrollPane

2 голосов
/ 21 февраля 2012

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

Я работаю над этим проектом под названием SUMI .

Содержит Java-пакет ( ar.com.tellapic.sumi.treetable ), который является расширением JXTreeTable из SwingLabs .

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

Если вы решите использовать его и вам нужна помощь, напишите мне, я помогу вам без проблем.

Или вы можете прочитать источник самостоятельно.

С уважением,

РЕДАКТИРОВАНИЕ (еще раз):

Чтобы немного прояснить этот ответ, я только что создал вики-страницу в проекте wiki и поместил туда соответствующий код. Если кто-то считает, что код должен быть вставлен здесь, пожалуйста, дайте мне знать.

В основном, я пытаюсь объяснить, как найти прямое решение проблем рендерера / редактора, которые вы можете найти, используя JTable с вашими специфическими потребностями, используя часть моего проекта, чтобы получить что-то вроде этого:

image

Обратите внимание, что снимок экрана был сделан после нажатия соответствующей кнопки.

2 голосов
/ 19 января 2012

Как только вы создадите вложенную панель для одной строки, как предлагает @mKorbel, вы можете добавить любое их количество к GridLayout(0, 1) в JScrollPane.Если рендеринг множества строк становится проблемой, вы можете применить тот же подход, который использовался JTable, здесь показано .

0 голосов
/ 19 января 2012

Несмотря на то, что JTable может быть настроен на все, что вы пожелаете, через средство визуализации ячеек и редакторы ячеек, оно никогда не будет предпочтительным, потому что для этого вам нужно сделать много грязных кодировок. Вместо этого, для вашей проблемы, я предлагаю использовать JScrollPane и добавить ваш компонент (панель просмотра как образец jTable) в его viewPort.

Для этой реализации представьте каждую строку с помощью пользовательского класса, расширяющего JPanel. И добавьте в него обязательные компоненты строки (это могут быть любые компоненты, такие как jlabel, jtextfields или даже jpanel). Для простоты вы можете использовать нулевую разметку для панели строк и добавлять компоненты в любом месте, которое вы хотите.

Надеюсь, это поможет вам решить вашу проблему. Если у вас возникли проблемы в этой реализации, не стесняйтесь спрашивать снова.

...