Как сделать таблицу в java
Как/что мне нужно сделать, чтобы java-ascii-table отображала значения поля testObject в заданном контексте?
Задний план:
В этой текущей итерации я использую java-ascii-table. Эта небольшая тестовая программа воссоздает мою основную потребность: создать таблицу, отображающую значения полей (идентификатор, имя, категория, цена) объектов, содержащихся в ArrayList.
Информацию о java-ascii-table можно найти здесь:
Это пример, на котором я основываю свой код (это 5-й пример по первой ссылке):
Мой код:
создать экземпляр ArrayListMaker, вызывать методы в Displayz
Это метод, о котором идет речь:
Каждый экземпляр ArrayListMaker имеет свой собственный ArrayList, testObjectsList. testObjectsList — это ArrayList экземпляров TestObject.
ПОЖО. Поля для: ID, имени, категории, цены. установщиков, геттеров и т.д.
Это метод, который мне нужен для создания таблицы. Я написал некоторый код на основе приведенного выше примера. Но так как это новое для меня, я мог бы быть далеко.
В этой главе объясняется, как создать электронную таблицу и управлять ею с помощью Java. Электронная таблица — это страница в файле Excel; он содержит строки и столбцы с конкретными именами.
После прочтения этой главы вы сможете создать электронную таблицу и выполнить операции чтения с ней.
Создать электронную таблицу
Прежде всего, давайте создадим электронную таблицу, используя ссылочные классы, которые обсуждались в предыдущих главах. Следуя предыдущей главе, сначала создайте рабочую книгу, а затем мы можем продолжить и создать лист.
Следующий фрагмент кода используется для создания электронной таблицы.
Строки в таблице
Электронные таблицы имеют сетку. Строки и столбцы обозначены конкретными именами. Столбцы обозначены алфавитами, а строки — номерами.
Следующий фрагмент кода используется для создания строки.
Написать в электронную таблицу
Давайте рассмотрим пример данных о сотрудниках. Здесь данные о сотрудниках приведены в табличной форме.
Следующий код используется для записи вышеуказанных данных в электронную таблицу.
Сохраните приведенный выше Java-код как Writesheet.java , а затем скомпилируйте и запустите его из командной строки следующим образом:
Он скомпилируется и выполнится для создания файла Excel с именем Writesheet.xlsx в вашем текущем каталоге, и вы получите следующий вывод в командной строке.
Файл Writesheet.xlsx выглядит следующим образом.
Читать из таблицы
Давайте рассмотрим вышеупомянутый файл Excel с именем Writesheet.xslx в качестве входных данных. Соблюдайте следующий код; он используется для чтения данных из электронной таблицы.
Давайте сохраним приведенный выше код в файле Readsheet.java , а затем скомпилируем и запустим его из командной строки следующим образом:
Если ваша системная среда сконфигурирована с библиотекой POI, она будет скомпилирована и выполнена для генерации следующего вывода в командной строке.
Основным элементом управления для создания типовых приложений является jtable – таблица. В отличии от того подхода, который мы использовали в mfc с классом clistview (всмомните, что таблица являлась по сути отдельной разновидностью такого элемента как clistview, но с назначенным стилем отображения REPORT).
Так вот, в библиотеке swing класс Jtable служит только для представления табличных данных.
Простейший пример создания таблицы будет выглядеть так:
Примечания: в примере создается вектор с именами колонок, а также вектор, каждый элемент которого является еще одним вектором представляющим отдельную запись и состоит из объектов (полей записи).
Важно при работе с таблицами всегда помещать таблицу внутрь обертки JscrollPane. Все дело в том, что именно в этом режиме обеспечивается корректное отображение заголовков таблицы.
Недостатоком данного примера является то, что все колонки таблицы представляются в виде строк и доступны для редактирования. А самое главное то, что все данные, которые должны быть представлены в таблице, должны быть заранее помещены в контейнер Vector, что в случае работы с базами данных часто составляет сложности. Другой вариант конструктора Jtable приводящий к аналогичным результатам:
Если сильно хочется, то можно отдельно получить доступ к элементу управления - заголовок таблицы - и разместить его отдельно от, собственно области таблицы для отображения данных, например, следующий код создает таблицу у которой заголовки расположены ниже ее основной части:
Следующий способ создания таблицы покажет все приемы использования концепции моделей и рендереров, которые мы узнали при работе со списками. В следующем примере создается таблица, отображающая файлы картинок в заданном каталоге. Разные колонки отображают имя файла, размер и окно-preview.
Данный пример можно развить: прежде всего сделаем так, чтобы переход к режиму редактирования осуществлялся только при двойном нажатии мыши. Метод IsCellEditable должен вернуть true в том случае, если событие произошедшее с ячейкой, должно активировать редактор ячейки. Объект события передается внутри anEvent, и имеет тип EventObject. Этот тип является базовым для множества объектов событий более конкретных (работа с мышью, клавиатура . ). В примере ниже я проверяю относится ли данное событие к категории "события с мышью" и если так, то дополнительно проверяю, чтобы количество кликов мыши было двойным. Только тогда возвращается значение true из метода isCellEditable, а значит выполняется переход в режим редактора.
Работа с моделью выделения
Также как для списка Jlist или JcomboBox, для таблицы есть связанная модель, управляющая тем, какие элементы были выделены. Она позволяет проверить какие строки таблицы выделены, также можно программно изменить выделение. В примере ниже создается таблица, заполненная случайными числами. Внизу формы расположена Jlabel, в которую выводится сумма элементов для выделенного диапазона таблицы (по умолчанию вы выделяете всю строку целиком).
Обнаружение изменений в таблице
В большинстве случаев вам не нужно заботиться об таких изменениях. Дело в том, что и модель и таблица автоматически обнаруживают изменения данных: если меняется модель, то таблица перестраивается. При редактировании ячейки таблицы изменения вносятся в модель также с минимальным нашим участием. Попробуйте в примере выше удалить фрагмент кода с использованием массива случайных чисел, и в методе getValue возвращать случайное число.
Однако в случае, если вы хотите явно известить таблицу о том, что произошли изменения следует использовать вызовы:
Еще раз про render-ы и editor-ы
- Boolean — отрисовыывается с помощью check box.
- Number — с помощью Jlabel содержимое которой выравнено по правому краю
- Double, Float — аналогично но при этом используется объект форматирования NumberFormat (локаль по умолчанию).
- Date — с помощью Jlabel содержимое которой форматируется с помощью DateFormat (короткий стиль).
- ImageIcon, Icon — Jlabel с выравненой по цетру картинкой.
- Object — Jlabel – используется в качестве надписи значение которое вернул метод toString.
В данном примере нехватает последней мелочи – наличия перекрытого метода setValue. Мы можем выбирать в падающем списке новые значения, но значение столбца не изменится. Именно метод setValue ответственен за сохранение изменнение из редактора ячейки в модель данных таблицы.
Основное применение для использования редакторов – ограничение ввода значений в поля таблицы. Основной принцип избежать ошибки ввода - запретить вводить все, кроме предопределенного набора значений. И здесь нам помогают падающие поля, текстовые поля с маской).
В примере, где использовался редактор для имени файла, я создал собственный класс редактора как реализующий интерфейс от TableCellEditor . Для демонстрации внутреннего устройства любого редактора, в некоторых ситуациях имеет смысл использовать класс javax.swing.DefaultCellEditor, который является наследником от TableCellEditor и реализует часть рутинных методов (ту же генерацию событий). Например, ниже приводится прием с созданием редактора для поля представляющего собой цвет. Редактором ячейки является кнопка, при нажатии на которую появляется окно выбора цвета JcolorChooser:
Всплывающие подсказки
Также как и для любого другого элемента управления swing, вы можете задавать и управлять подсказкой (tooltip), используя метод setTooltip (String). Однако есть возможность управлять подсказками более детально (setTooltip задает глобальную подсказку не зависящую от того на какую именно ячейку таблицы была наведена мышь). Например, начнем мы с того что, что создадим подсказку для каждой отдельной ячейки отдельно подсказку для заголовка таблицы.
необходимо сделать возможность редактирования таблицы таким образом, что бы в первом столбце имелся выбор из JComboBox, а остальные заполнялись JTextfield.
1 ответ 1
Задание типов полей, необходимо переопределить метод свою задачу
Возможность редактирования поля контролируется методом, его надо переопределить под свою задачу
Using a Combo Box as an Editor
Setting up a combo box as an editor is simple, as the following example shows. The bold line of code sets up the combo box as the editor for a specific column.
Читайте также: