Как составить список с флажками в Java Swing?

Как лучше всего иметь список элементов с 9X_core-java флажком для каждого в Java Swing?

т.е. JList 9X_javax.swing с элементами, у каждого из которых есть 9X_java-libraries текст и флажок?

33
0
7
Общее количество ответов: 7

Ответ #1

Ответ на вопрос: Как составить список с флажками в Java Swing?

Замечательный ответ - это CheckBoxList. Он реализует 9X_java ответ Telcontar (хотя 3 года назад :) ... Я 9X_jcheckbox использую его в Java 1.6 без проблем. Я 9X_java также добавил такой метод addCheckbox (конечно, мог 9X_.java бы быть короче, давно не использовал Java):

public void addCheckbox(JCheckBox checkBox) { ListModel currentList = this.getModel(); JCheckBox[] newList = new JCheckBox[currentList.getSize() + 1]; for (int i = 0; i < currentList.getSize(); i++) { newList[i] = (JCheckBox) currentList.getElementAt(i); } newList[newList.length - 1] = checkBox; setListData(newList); } 

Я 9X_java-api опробовал демонстрацию материалов Jidesoft, играя 9X_openjdk с CheckBoxList. Я столкнулся с некоторыми проблемами 9X_javax.swing (поведение, которое не работало). Я изменю 9X_java-swing этот ответ, если обнаружу проблемы с CheckBoxList, на 9X_oraclejdk который я ссылаюсь.

24
2

  • @HiradRoshandel создает метод, который просматривает все строки и возвращает те, которые выбраны. См. Http://docs.oracle.com/javase/7/ ...

Ответ #2

Ответ на вопрос: Как составить список с флажками в Java Swing?

Создайте пользовательский ListCellRenderer и назначьте его 9X_java-swing JList.

Этот пользовательский ListCellRenderer должен возвращать 9X_java-swing JCheckbox в реализации метода getListCellRendererComponent(...).

Но это JCheckbox не будет редактируемым, это 9X_javax простая краска на экране, вы сами выбираете, когда 9X_java-api это JCheckbox должно быть «отмечено» или нет,

Например, показать 9X_javax.swing его отмеченным при выборе строки (параметр 9X_core-java isSelected), но таким образом статус проверки не будет 9X_jre поддерживаться при изменении выбора. Лучше 9X_j2se показать, что он проверен, сверяясь с данными 9X_java-api ниже ListModel, но тогда вам решать, как реализовать 9X_java-se метод, который изменяет статус проверки 9X_swing данных, и уведомляет об изменении JList для перерисовки.

Я 9X_openjdk опубликую пример кода позже, если он вам 9X_java-se понадобится

ListCellRenderer

16
0

Ответ #3

Ответ на вопрос: Как составить список с флажками в Java Swing?

Просто реализуйте ListCellRenderer

public class CheckboxListCellRenderer extends JCheckBox implements ListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setComponentOrientation(list.getComponentOrientation()); setFont(list.getFont()); setBackground(list.getBackground()); setForeground(list.getForeground()); setSelected(isSelected); setEnabled(list.isEnabled()); setText(value == null ? "" : value.toString()); return this; } } 

и установите средство 9X_jdk визуализации

JList list = new JList(); list.setCellRenderer(new CheckboxListCellRenderer()); 

это приведет к

9X_Как составить список с флажками в Java Swing?_javax.swing

Подробности на 9X_j2se Custom swing component renderers.

PS: если вам нужны радиоэлементы, просто 9X_j2se замените extends JCheckbox на extends JRadioButton.

13
0

Ответ #4

Ответ на вопрос: Как составить список с флажками в Java Swing?

Вероятно, я бы хотел использовать JTable, а не 9X_java-swing JList, и, поскольку рендеринг флажка по умолчанию 9X_jdk довольно уродлив, я, вероятно, хотел бы 9X_core-java добавить пользовательский TableModel, CellRenderer и CellEditor для представления 9X_.java логического значения. Конечно, я полагаю, что 9X_java-se это уже было сделано баджиллион раз. У Солнца 9X_openjdk good examples.

11
0

Ответ #5

Ответ на вопрос: Как составить список с флажками в Java Swing?

Лучшее решение для Java 7 и новее

Я наткнулся на этот вопрос и понял, что 9X_javax некоторые ответы довольно старые и устаревшие. В 9X_swing настоящее время JList является универсальным, поэтому 9X_jre есть более эффективные решения.

Мое решение 9X_java-se общего JCheckBoxList:

import java.awt.Component; import javax.swing.*; import javax.swing.border.*; import java.awt.event.*; @SuppressWarnings("serial") public class JCheckBoxList extends JList { protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); public JCheckBoxList() { setCellRenderer(new CellRenderer()); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { int index = locationToIndex(e.getPoint()); if (index != -1) { JCheckBox checkbox = (JCheckBox) getModel().getElementAt(index); checkbox.setSelected(!checkbox.isSelected()); repaint(); } } }); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } public JCheckBoxList(ListModel model){ this(); setModel(model); } protected class CellRenderer implements ListCellRenderer { public Component getListCellRendererComponent( JList
 list, JCheckBox value, int index, boolean isSelected, boolean cellHasFocus) { JCheckBox checkbox = value; //Drawing checkbox, change the appearance here checkbox.setBackground(isSelected ? getSelectionBackground() : getBackground()); checkbox.setForeground(isSelected ? getSelectionForeground() : getForeground()); checkbox.setEnabled(isEnabled()); checkbox.setFont(getFont()); checkbox.setFocusPainted(false); checkbox.setBorderPainted(true); checkbox.setBorder(isSelected ? UIManager .getBorder("List.focusCellHighlightBorder") : noFocusBorder); return checkbox; } } } 

Для динамического добавления 9X_java списков JCheckBox вам необходимо создать 9X_j2se свой собственный ListModel или добавить 9X_java-swing DefaultListModel.

DefaultListModel model = new DefaultListModel(); JCheckBoxList checkBoxList = new JCheckBoxList(model); 

DefaultListModel являются общими, поэтому 9X_swing вы можете использовать методы, указанные 9X_java-se в JAVA 7 API here следующим образом:

model.addElement(new JCheckBox("Checkbox1")); model.addElement(new JCheckBox("Checkbox2")); model.addElement(new JCheckBox("Checkbox3")); 
8
0

Ответ #6

Ответ на вопрос: Как составить список с флажками в Java Swing?

С Java велики шансы, что кто-то уже реализовал 9X_jcheckbox нужный вам виджет или утилиту. Часть преимуществ 9X_openjdk большого сообщества OSS. Не нужно изобретать 9X_javax велосипед, если вы действительно не хотите 9X_core-java делать это самостоятельно. В этом случае 9X_openjdk это было бы хорошим упражнением для изучения 9X_swing CellRenderers и Editors.

Мой проект с JIDE 9X_java-api имел большой успех. Компонент, который вам 9X_swing нужен, список флажков, находится на общем 9X_.java уровне JIDE (который является OSS и размещен 9X_j2se на java.net). Коммерческие вещи тоже хороши, но 9X_.java они вам не нужны.

http://www.jidesoft.com/products/oss.htm https://jide-oss.dev.java.net/

3
0

Ответ #7

Ответ на вопрос: Как составить список с флажками в Java Swing?

Я рекомендую вам использовать JPanel с GridLayout 9X_java-api из 1 столбца. Добавьте флажки в JPanel и 9X_java установите JPanel в качестве источника данных 9X_oraclejdk для JScrollPane. А чтобы получить выбранные 9X_j2se флажки, просто вызовите getComponents() панели 9X_j2se JPanel, чтобы получить флажки.

3
0