JComboBox — выпадающий список Java Swing

JComboBox - выпадающий список Java Swing JComboBox — это компонент Java Swing, который представляет собой выпадающий список. Есть две формы выпадающего списка JComboBox: редактируемый и нередактируемый. Первый тип выпадающего списка позволяет ввести необходимое значение, как в текстовое поле или выбрать интересуемое из списка, если оно там имеется. При работе со вторым типом JComboBox пользователь имеет возможность только выбрать значение из выпадающего списка. JComboBox занимает на форме меньше места по сравнению с другими компонентами, позволяющими осуществить выбор из нескольких альтернативных вариантов. К примеру, radio группа или список JList с 10-ю элементами занимают гораздо больше места, чем JComboBox. Давайте посмотрим, как создать выпадающий список JComboBox, заполнить его необходимыми данными, добавить на форму, а затем обработать выбор пользователем элемента из списка.

Для начала создадим простой JComboBox и заполним его данными. Сделать это можно так, как показано ниже:

String[] items = {
	"Элемент списка 1",
	"Элемент списка 2",
	"Элемент списка 3"
};
JComboBox comboBox = new JComboBox(items);

Сначала создается массив с элементами, которые мы хотим увидеть в будущем выпадающем списке, а затем передаем ссылку на этот массив создаваемому JComboBox в конструктор.

Как было упомянуто выше, есть два типа JComboBox — редактируемый и нередактируемый. По умолчанию комбобокс нередактируемый. Для того, чтобы сделать его редактируемым необходимо вызвать метод setEditable и передать туда true в качестве параметра.

String[] items = {
	"Элемент списка 1",
	"Элемент списка 2",
	"Элемент списка 3"
};
JComboBox editComboBox = new JComboBox(items);
editComboBox.setEditable(true);

Выпадающий список JComboBox создан. Теперь необходимо обеспечить возможность выполнения определенных действий при выборе пользователем какого-либо элемента из списка. Сделать это можно при помощи ActionListener. Для начала создаем слушателя — либо анонимный класс, либо какой-то другой вариант реализации интерфейса ActionListener. Затем добавляем слушателя при помощи метода addActionListener.

ActionListener actionListener = new ActionListener() {
	public void actionPerformed(ActionEvent e) {
            /*
             * Действия, которые необходимо выполнить.
             */
	}
};
comboBox.addActionListener(actionListener);

Давайте теперь посмотрим на тестовый пример. Здесь у нас имеется два JComboBox: редактируемый и нередактируемый. В верхней части окна приложения отображается текстовая метка, текст которой будет соответствовать элементу списка, который был последним выбран. Кроме того, если поместить курсор в редактируемый JComboBox, набрать требуемое значение с клавиатуры, а затем нажать Enter, то содержимой текстовой метки также обновится — ActionListener сработает.

Давайте посмотрим на то, как выглядит тестовое приложение и на его исходный код.

Использование JComboBox

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class TestFrame extends JFrame {

	public TestFrame() {
		
		super("Тестовое окно");
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		Font font = new Font("Verdana", Font.PLAIN, 18); 

		String[] items = {
			"Элемент списка 1",
			"Элемент списка 2",
			"Элемент списка 3"
		};

		Container content = getContentPane();

		content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
		
		final JLabel label = new JLabel(" ");
		label.setAlignmentX(LEFT_ALIGNMENT);
		label.setFont(font);
		content.add(label);

		ActionListener actionListener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox box = (JComboBox)e.getSource();
		                String item = (String)box.getSelectedItem();
		                label.setText(item);
			}
		};
		
		JComboBox comboBox = new JComboBox(items);
		comboBox.setFont(font);
		comboBox.setAlignmentX(LEFT_ALIGNMENT);
		comboBox.addActionListener(actionListener);
		content.add(comboBox);

		JComboBox editComboBox = new JComboBox(items);
		editComboBox.setEditable(true);
		editComboBox.setAlignmentX(LEFT_ALIGNMENT);
		editComboBox.setFont(font);
		editComboBox.addActionListener(actionListener);
		content.add(editComboBox);

		setPreferredSize(new Dimension(240, 130));
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				new TestFrame();
			}
		});
	}
}

8 Responses to JComboBox — выпадающий список Java Swing

  1. ildar:

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

  2. aika:

    Как организовать поиск по существующим items? Как организовать поиск через autocomplete?

  3. Женя:

    А как сделать чтобы после выбора значения в одном комбобоксе, менялся список в другом комбобоксе в зависимости от выбора?

    • Игорь:

      Своевременный ответ. Ну да ладно. Вот вариант, первый пришедший в голову; хоть и извратный, но работающий.

      String[] streets = {«ул. Васи», «ул. Пети», «б-р Банановый»};
      final String[] housesVasya = {«1», «2», «3»};
      final String[] housesPetya = {«4», «8»};
      final String[] housesBanana = {«Красивый», «Желтый», «Воображаемый»};

      final JComboBox comboBoxHouse = new JComboBox(housesVasya);
      comboBoxHouse.setBounds(20, 116, 130, 20);
      frame.getContentPane().add(comboBoxHouse);

      final JComboBox comboBoxStreet = new JComboBox(streets);
      comboBoxStreet.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
      try {
      switch (comboBoxStreet.getSelectedIndex()) {
      case 0: comboBoxHouse.setModel(new DefaultComboBoxModel(housesVasya));
      break;
      case 1: comboBoxHouse.setModel(new DefaultComboBoxModel(housesPetya));
      break;
      case 2: comboBoxHouse.setModel(new DefaultComboBoxModel(housesBanana));
      break;

      default: System.out.println(«Лажа какая-то вышла»);
      break;
      }
      } catch (Exception e) {
      e.printStackTrace();
      }
      }
      });
      comboBoxStreet.setBounds(20, 56, 130, 20);
      frame.getContentPane().add(comboBoxStreet);

  4. Ivan:

    Help me!*
    Как сохранить данные (items) в текстовый файл? Иможно ли вообще так сделать?)

  5. Андрей:

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

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: