Как составить список с флажками в 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 понадобится
Ответ #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