Как составить список с флажками в 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