Javafx — Как добавить элемент в ListView одного класса через другой


Содержание

Javafx — Как добавить элемент в ListView одного класса через другой

96 просмотра

1 ответ

5 Репутация автора

В MS Access «ListBox» может скрывать первый «столбец» из 2 столбцов ResultSet — он отлично подходит для сокрытия «идентификаторов», которые легко доступны, когда пользователь выбирает элемент из списка.

Если возможно, я хочу сделать то же самое в JavaFX с ListView, чтобы я мог заполнить второй ListView на основе выбора из первого ListView.

Вот как я заполняю ListView: menuList1.setItems(MenuUtilities.getDivisions()); из

По изображению создается впечатление, что listView не может отформатировать массив. Если так, лучше ли я использовать один столбец TableView? И если да, то как мне отобразить один строковый столбец из ObservableList и получить доступ к целочисленному идентификатору выбранного элемента в коде.

Ответы (1)

1 плюс

57172 Репутация автора

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

Поскольку вы хотите, ID чтобы они были доступны, вы должны создать пользовательский тип, содержащий значения для обеих строк (или использовать существующий класс, например Pair ), и использовать a, cellFactory чтобы выбрать данные для отображения.

Это позволяет вам получить доступ к идентификатору выбранного элемента следующим образом:

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

Перемещение выбора пользователя из одного ListView в другой FX ListView Java

Приведенный ниже код содержит два элемента управления ListView, пользователь должен выбрать имя из первого просмотра списка и когда кнопка добавления хит, он будет переместить содержимое в массив которого второй вид списка предполагается обновить и отображения, как сделаны изменения ,

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

любая обратная или помощь будет принята с благодарностью

Добавление элемента в простой список не будет вызывать обновления уволят ( ArrayList не имеет механизма для регистрации любых слушателей). Добавление элемента в ObservableList заставит слушателей быть уведомлен.

Список файлов в ListView

Есть ListView. Нужно чтобы он составлял список файлов.

есть код где берётся список из корня проекта в папке pdf. но как реализовать чтобы выводил в ListView?

И сразу такой вопрос. Когда выводит список файлов в ListView, при нажатии на определённую строку этот файл (а именно в расширении .pdf) открывался. Ну в данном случае чтобы программа просто открыла нужный файл. такое возможно?

p.s. сильно не пинайте я новичок в этом. Всех с наступающим

26.12.2020, 15:48

Сортировка listView. Как узнать длину listview?
Есть listview состоящий из чисел(только числа в string). Как их сортировать по возрастанию? (т.е.

Получить список файлов и папок в ListView
День добрый! Это, наверное, уже крик души. Есть задание — создать FTP-клиент. До самого FTP ещё.

Как занести список файлов в ListView?
Как занести список файлов в ListView? Например, мне нужно занести файлы определенным расширением.

Добавить список существующих файлов и папок в listview
здраствуйте.пишу файл-менеджер.вопрос:как добавить список существующих файлов и папок в listview.

Как сделать так, чтобы в списке файлов в ListView отображались иконки этих файлов?
Как сделать так, чтобы в списке файлов в ListView отображались иконки этих файлов?

Как я могу заполнить ListView в JavaFX с помощью пользовательских объектов?

Я немного новичок в Java, JavaFX и программировании в целом, и у меня есть проблема, которая ломает мне голову.

В большинстве уроков, которые я посмотрел, касалось заполнения ListView (в частности, с помощью ObservableArrayList), самый простой способ сделать это — создать его из ObservableList of Strings, например, так:

Но я не хочу использовать строки. Я хотел бы использовать созданный мной объект под названием Words:

Каждый объект Word имеет только 2 свойства: wordString (строка слова) и определение (еще одна строка, которая является определением слова). У меня есть геттеры и сеттеры для обоих.

Вы можете видеть, куда это идет — код компилируется и работает, но когда я отображаю его в своем приложении, а не отображает заголовки каждого слова в ListView, он отображает сам объект Word в виде строки!

Цукерберг рекомендует:  Wireshark - Как запустить Wireshark не из-под рута

Мой вопрос здесь, в частности, есть ли простой способ переписать это:

Таким образом, что вместо того, чтобы брать слова непосредственно из wordsList, он обращается к свойству wordString в каждом Word моего observableArrayList?

Просто чтобы быть понятным, это не для Android, и список слов будет изменен, сохранен и загружен в конце концов, поэтому я не могу просто создать другой массив для хранения wordStrings. Я провел небольшое исследование в сети, и, кажется, есть такая вещь, как «Сотовые фабрики», но она кажется излишне сложной для того, что кажется такой простой проблемой, и, как я уже говорил, я немного новичок, когда дело доходит до программирования.

Кто-нибудь может помочь? Это мой первый раз здесь, так что извините, если я не включил достаточно моего кода, или я сделал что-то не так.

3 ответа

Я советую использовать фабрику клеток для решения этой проблемы.

Замечания по реализации

Хотя вы можете переопределить toString в своем классе Word, чтобы обеспечить строковое представление слова, предназначенного для представления в вашем ListView, я бы рекомендовал предоставить фабрику ячеек в ListView для извлечения данных представления из объекта word и представления его в вашем Посмотреть список. Используя этот подход, вы получаете разделение задач, поскольку вы не связываете графическое представление вашего объекта Word с его текстовым методом toString; поэтому toString может по-прежнему иметь различный вывод (например, полную информацию о полях Word с именем слова и описанием для целей отладки). Кроме того, фабрика ячеек более гибкая, поскольку вы можете применять различные графические узлы для создания визуального представления ваших данных, кроме простой текстовой строки (если вы хотите это сделать).

Кроме того, в дополнение, я рекомендую сделать ваши объекты Word неизменяемыми, удалив их установщики. Если вам действительно нужно изменить текстовые объекты сами по себе, то лучший способ справиться с этим — предоставить видимые свойства для полей объекта. Если вы также хотите, чтобы ваш пользовательский интерфейс обновлялся по мере изменения наблюдаемых свойств ваших объектов, то вам необходимо информировать ячейки списка об изменениях в связанных элементах, прислушиваясь к их изменениям (что в этом случае немного сложнее). дело). Обратите внимание, что список, содержащий слова, уже доступен для наблюдения, и ListView позаботится об обработке изменений в этом списке, но если вы изменили определение слова, например, в отображаемом объекте word, то ваше представление списка не будет воспринимать изменения в определение без соответствующей логики слушателя в фабрике ячеек ListView.

Добавление данных в listView основываясь на классе (java, mysql, javafx, listview)

Пытаюсь реализовать заполнение listView основываясь на данных полученных из БД.

Знаю, что можно выполнить заполнение как примитивно listView.getItems().add()

Так и через ObservableList.

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

Требуется, чтобы я поместил в listView этот массив, отображалось только поле name этого класса, а когда вызывалось событие selection(ну или как оно там) я мог обратиться к другому полю этого класс, к примеру id, чтобы построить следующий sql запрос.

JavaFX-элемент ListView с кнопкой изображения

Я хотел бы знать, есть ли возможность добавить кнопку изображения после каждого элемента ListView. Например:

где эти красные квадраты должны иметь вместо кнопки. Если это возможно, как я могу обработать событие нажатия кнопки элемента?

РЕДАКТИРОВАТЬ: если есть другой элемент управления, который может это сделать, пожалуйста, дайте мне знать. Я тестирую TableView.

Я тестировал это недавно. Мое решение:

Клетки будут выглядеть так:

Соответствующей частью является метод setGraphic вызов setGraphic . С setGraphic() обычно для ярлыка должен быть установлен значок, но он одинаково хорошо работает для установки сложного узла — в этом случае HBox с меткой и кнопкой.

Вы должны убедиться, что обработчик события Button ссылается на правильный элемент в списке. В первой ссылке ниже упоминается, что текущего выбранного элемента может быть достаточно на данный момент. Так что выбирайте текущий выбранный индекс в списке при обработке события кнопки.

Вы можете посмотреть на это:

Вы также можете использовать Список пользовательских объектов HBox. В приведенном ниже примере показано использование такого пользовательского внутреннего класса HBox и процесс вложения списка таких объектов в элемент управления ListView.

Результат этой реализации будет выглядеть так:

Однако, чтобы эффективно управлять событиями Buttons, следует рассмотреть возможность добавления дополнительного пользовательского объекта Button в метод конструктора HBoxCustom и создать правильный метод, который позволит вам управлять событиями нажатия кнопок.

Предыдущее решение работало хорошо, когда мой список был невелик, и я не добавил больше элементов управления, делающих узел более сложным. Когда я добавил больше элементов управления, я обнаружил проблему с параллелизмом, возможно, это также связано с тем, что я рисую карты, которые содержат более 12000 объектов (линий и полигонов). Проблема (что я мог видеть) состояла в том, что некоторые элементы в ListView будут повторяться внутри, что означает, что cellfactory будет создан дважды и / или не будет создан. Кажется, «updateItem» является последним в очереди потока. Поэтому, чтобы обойти проблему, я должен создать узел перед созданием ListView. Что-то вроде этого:

Вызов класса на основе выбранного элемента в ListView в JavaFX

December 2020

296 раз

У меня есть ListView и каждый раз , когда выбор изменяется, я хочу , чтобы вызвать класс с этим именем. Например, если элемент называется «Text String» , то класс должен быть текстовую строку называется. Код , который я в настоящее время дает мне ошибку говоря The method insert(ArrayList ) is undefined for the type Object . Eclipse , дает мне предложение , чтобы бросить объект как элемент, но ничего не делает. Класс Element представляет собой суперкласс и текстовая строка будет осуществлять этот класс.

Вот код, который я до сих пор:

Как я могу бросить объект на любой объект, выбранный в ListView?

4 ответы

  1. Вы должны использовать явное приведение.
  2. Используйте clazz.getMethod(. ) вместо clazz.getClass().getMethod(. )
  3. Watchout objects быть ArrayList примером, а не List .
Цукерберг рекомендует:  Управление контактами с использованием фреймворка Contacts

Ваш код должен нравится следующий:

Совет . Я бы предложил изменить тип параметра ArrayList в методе вставки в списке. А также , чтобы поймать только один общий исключение, а не кучки одной конкретной.

Дайте мне знать, если вы какие-либо дополнительные проблемы с этим.

Существует еще один способ справиться с этим, использовать HashMap для хранения всех реализаций следующим образом (это можно сделать при запуске вашего приложения, производительность будет лучше).

А метод ручка становится ..

Это будет более понятным и чистым , так как мы не используем Отражение .

Что вам нужно сделать, это просто интерфейс MyElement методом выполнения, реализация которых будет вызывать все, что нужно внутри «выполнить ()»

в основном я предлагаю команду, которая является основой для всех операций интерфейса пользователя при выполнении BE

мои 2 цента, пример implemntation из моего старого старого проекта

и пример реализации

Я считаю, что вы более усложняя все, пытаясь использовать отражение. Это является оптимальным, но иногда я обычно просто достаточно сделать вещи проще.

Почему бы вам не сделать заводскую помощнику, который будет импортировать все классы, которые могут понадобиться, а затем использовать переключатель, чтобы вернуть экземпляр, что вам нужно?

Полный список

— используем ListView для построения списка

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

При создании ListView создавать пункты за нас будет адаптер. Адаптеру нужны от нас данные и layout-ресурс пункта списка. Далее мы присваиваем адаптер списку ListView. Список при построении запрашивает у адаптера пункты, адаптер их создает (используя данные и layout) и возвращает списку. В итоге мы видим готовый список.

Есть различные типы списков и адаптеров. Мы пока что рассмотрим простейший вариант.

Project name: P0421_SimpleList
Build Target: Android 2.3.3
Application name: SimpleList
Package name: ru.startandroid.develop.p0421simplelist
Create Activity: MainActivity

Открываем main.xml и добавим на экран компонент ListView (вкладка Composite):

ListView – это и есть компонент списка.

Теперь надо создать адаптер. Открываем MainActivity.java и пишем:

Вы не поверите, но это весь код, необходимый для создания списка )

В качестве данных используем массив имен. В onCreate мы находим список, создаем адаптер и присваиваем адаптер списку. Давайте разберемся, как создали адаптер.

и передали ему следующие параметры:

this – контекст
android.R.layout.simple_list_item_1 – это системный layout-файл, который представляет собой TextView
names – массив данных, которые мы хотим вывести в список

Мы можем посмотреть содержимое использованного simple_list_item_1. Для этого в вашем проекте найдите пункт Android 2.3.3., раскройте его, и раскройте android.jar

Проматывайте в самый низ и открывайте res.layout.


И внутри находим используемый нами simple_list_item_1

Двойной клик на него и смотрим содержимое:

Обычный TextView с набором параметров.

Когда список при формировании запрашивает очередной пункт, адаптер берет этот Layout-ресурс simple_list_item_1, прогоняет его через LayoutInflater и получает View, преобразует View к TextView, присваивает ему текст из массива данных и отдает списку.

Все сохраним и запустим. Видим список из наших данных.

Использование системного layout-ресурса simple_list_item_1 хорошо тем, что нам не надо самим layout рисовать. Однако, если нас не устраивает то, как выглядит список с использованием simple_list_item_1 в качестве пункта списка, мы можем создать свой layout-ресурс.

Создадим layout-файл my_list_item.xml в папке res/layout нашего проекта:

TextView с указанием цвета и размера шрифта, выравнивания текста и отступов.

Изменим существующий код, укажем адаптеру наш созданный layout-ресурс my_list_item:

Теперь адаптер будет использовать его при создании пунктов списка.

Все сохраним и запустим. Видим наш зеленый список:

В layout-ресурсе для пункта списка вместо TextView вы можете использовать какой-нибудь его производный класс – например Button. Главное, чтобы объект прошел преобразование к TextView. Адаптер присвоит ему текст методом setText и отдаст списку.

Немного про Context

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

ArrаyAdapter использует LayoutInflater, чтобы конвертнуть layout-ресурс в View. Но получение объекта LayoutInflater – это одна из базовых функций и она недоступна для класса ArrаyAdapter. Поэтому мы в ArrаyAdapter в качестве контекста передаем ссылку на Activity (Activity имеет доступ к базовым функциям через восходящую иерархию классов). А класс ArrayAdapter внутри себя использует переданный ему контекст, чтобы вызвать LayoutInflater. Без контекста он не смог бы это сделать.

На следующем уроке:

— используем список ListView для одиночного и множественного выбора элементов

public ArrayAdapter (Context context, int textViewResourceId, T[] objects)

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Добавление данных в listView основываясь на классе (java, mysql, javafx, listview)

Пытаюсь реализовать заполнение listView основываясь на данных полученных из БД.

Знаю, что можно выполнить заполнение как примитивно listView.getItems().add()

Так и через ObservableList.

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

Требуется, чтобы я поместил в listView этот массив, отображалось только поле name этого класса, а когда вызывалось событие selection(ну или как оно там) я мог обратиться к другому полю этого класс, к примеру id, чтобы построить следующий sql запрос.

Release: JavaFX 2.2

Last Updated: September 2013

[+] Show/H style=’display:none;’>

About This Tutorial

1 JavaFX UI Controls

2 Label

3 Button

4 Radio Button

5 Toggle Button

6 Checkbox

7 Choice Box

8 Text Field

9 Scroll Bar

10 Scroll Pane

11 List View

12 Table View

13 Tree View

14 Combo Box

15 Separator

16 Sl >17 Progress Bar and Progress Indicator

19 HTML Editor

20 Tooltip

21 Titled Pane and Accordion

22 Menu

23 Password Field

24 Color Picker

25 Pagination Control

26 File Chooser

27 Customization of UI Controls

[+] Show/H style=’display:none;’>

View Source Code

Download Source Code

Profiles

Alla Redko

Technical Writer, Oracle

Alla is a technical writer for Oracle. She lives in St. Petersburg, Russia, and develops tutorials and technical articles for Java and JavaFX technologies. Prior to her assignment at Oracle, she worked as a technical writer in different IT companies.

Цукерберг рекомендует:  Движок - Движок для интернет магазина

We Welcome Your Comments

If you have questions about JavaFX, please go to the forum.

Using JavaFX UI Controls

11 List View

In this chapter, you learn how to create lists in your JavaFX applications.

The ListView class represents a scrollable list of items. Figure 11-1 shows the list of available accommodation types in a hotel reservation system.

Figure 11-1 Simple List View

You can populate the list by defining its items with the setItems method. You can also create a view for the items in the list by applying the setCellFactory method.

Creating a List View

The code fragment in Example 11-1 implements the list with the String items shown in Figure 11-1.

Example 11-1 Creating a List View Control

To alter the size and height of the list view control, use the setPrefHeight and setPrefWidth methods. Example 11-2 constrains the vertical list to 100 pixels wide by 70 pixels high, which results in the list shown in Figure 11-2.

Example 11-2 Setting Height and Width for a List View

Figure 11-2 Resized Vertical List

You can orient a ListView object horizontally by setting the orientation property to Orientation.HORIZONTAL . This can be done as follows: list.setOrientation(Orientation.HORIZONTAL) . The horizontal list with the same items as in Figure 11-1 is shown in Figure 11-3.

Figure 11-3 Horizontal List View Control

At any time, you can track the selection and focus of the ListView object with the SelectionModel and FocusModel classes. To obtain the current state of each item, use a combination of the following methods:

getSelectionModel().getSelectedIndex() – Returns the index of the currently selected items in a single-selection mode

getSelectionModel().getSelectedItem() – Returns the currently selected item

getFocusModel().getFocusedIndex() – Returns the index of the currently focused item

getFocusModel().getFocusedItem() – Returns the currently focused item

The default SelectionModel used when instantiating a ListView is an implementation of the MultipleSelectionModel abstract class. However, the default value of the selectionMode property is SelectionMode.SINGLE . To enable multiple selection in a default ListView instance, use the following sequence of calls:

Also note that MultipleSelectionModel has the selectedItems and selectedIndices properties, which are both observable lists that can be monitored to detect any multiple selections.

Populating a List View with Data

Example 11-1 shows the simplest way to populate a list view. To enhance your list, you can add data of various types by using the specific extensions of the ListCell class, such as CheckBoxListCell , ChoiceBoxListCell , ComboBoxListCell , and TextFieldListCell . These classes bring additional functionality to the basic list cell. Implementing cell factories for such classes enables developers to change data directly in the list view.

For example, the content of a list cell is not editable by default. However, the ComboBoxListCell class draws a combo box inside the list cell. This modification enables users to build a list of names by selecting them from a combo box, as shown in Example 11-3.

Example 11-3 Adding ComboBoxListCell Items to a List View

The bold line in the example, calls the setCellFactory method to redefine the implementation of the list cell. When you compile and run this example, it produces the application window shown in Figure 11-4.

Figure 11-4 List View with the Combo Box Cells

Not only the cell factory mechanism enables you to apply the alternative implementations of the list cells, it can help you to totally customize the appearance of the cells.

Customizing the Content of a List View

Study the following application to learn how to generate the list items by using the cell factory. The application shown in Example 11-4 creates a list of color patterns.

Example 11-4 Creating a Cell Factory

The cell factory produces ListCell objects. Every cell is associated with a single data item and renders a single «row» of the list view. The content that the cell represents through the setGraphic method can include other controls, text, shapes, or images. In this application, the list cell shows rectangles.

Compiling and running the application produces the window shown in Figure 11-5.

Figure 11-5 List of Color Patterns

You can scroll through the list, selecting and deselecting any of its items. You can also extend this application to fill the text label with the color pattern as shown in the next section.

Processing the List Item Selection

Modify the application code as shown in Example 11-5 to enable processing of the event when a particular list item is selected.

Example 11-5 Processing Events for a List Item

The addListener method called for the selectedItemProperty creates a new ChangeListener object to handle changes of the selected item. If, for instance, the dark orchid item is selected, the label receives the «darkorchid» caption and is filled with the corresponding color. The output of the modified application is shown in Figure 11-6.

Figure 11-6 Selecting a Dark Orchid Color Pattern

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих