Как составить список с флажками в Java Swing?
Как лучше всего иметь список элементов с 9X_core-java флажком для каждого в Java Swing?
т.е. JList 9X_javax.swing с элементами, у каждого из которых есть 9X_java-libraries текст и флажок?
Ответ #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 который я ссылаюсь.
- @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
Ответ #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_j2se Custom swing component renderers.
PS: если вам нужны радиоэлементы, просто 9X_j2se замените extends JCheckbox
на extends JRadioButton
.
Ответ #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.
Ответ #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 extends JCheckBox>
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"));
Ответ #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/
Ответ #7
Ответ на вопрос: Как составить список с флажками в Java Swing?
Я рекомендую вам использовать JPanel с GridLayout 9X_java-api из 1 столбца. Добавьте флажки в JPanel и 9X_java установите JPanel в качестве источника данных 9X_oraclejdk для JScrollPane. А чтобы получить выбранные 9X_j2se флажки, просто вызовите getComponents() панели 9X_j2se JPanel, чтобы получить флажки.
-
2
-
4
-
1
-
3
-
5
-
3
-
2
-
6
-
5
-
28
-
8
-
13
-
3
-
13
-
5
-
8
-
5
-
11
-
7
-
4
-
3
-
3
-
7
-
2
-
14
-
10
-
2
-
8
-
3
-
6
-
4
-
8
-
6
-
5
-
6
-
7
-
11
-
4
-
3
-
5
-
9
-
4
-
5
-
4
-
6
-
4
-
6
-
5
-
5
-
10