📜  带有枚举的 jcombobox (1)

📅  最后修改于: 2023-12-03 15:09:44.152000             🧑  作者: Mango

带有枚举的 JComboBox

JComboBox 是一个常见的 Swing 组件,它提供了下拉菜单的功能。通常情况下,我们使用 JComboBox 来提供一组选项供用户选择。但是在某些情况下,我们需要 JComboBox 的选项是有限的且固定的。在这种情况下,使用 Java 枚举类型就可以方便地为 JComboBox 提供选项。

本文将介绍如何使用枚举类型创建 JComboBox,以及如何使用 JComboBox 中的枚举值。

1. 创建具有枚举类型的 JComboBox

在使用 JComboBox 和枚举类型之前,我们需要先定义一个枚举类型的选项列表。例如:

public enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

接下来,我们可以使用 JComboBox 类的一个构造函数来创建一个 JComboBox,并将枚举类型的值传递给它:

JComboBox<DayOfWeek> comboBox = new JComboBox<>(DayOfWeek.values());

这行代码创建了一个 JComboBox,并将 DayOfWeek.values() 的返回值作为选项列表。这个方法返回一个表示枚举常量的数组。

2. 使用 JComboBox 中的枚举值

当用户从下拉菜单中选择了一个枚举值时,我们需要使用 getSelectedItem() 方法获取被选中的项。但是,由于我们使用了泛型,所以这个方法返回的是一个枚举类型的实例,而不是一个字符串。

DayOfWeek selectedDay = (DayOfWeek) comboBox.getSelectedItem();

这行代码将返回被选中的枚举值,并使用 (DayOfWeek) 将其转换成正确的类型。

3. 实际例子

这里提供一个简单的例子,在这个例子中,我们创建了一个 JFrame 和一个 JComboBox,下拉菜单的选项是我们在第 1 步中创建的 DayOfWeek 枚举类型。

import javax.swing.*;
import java.awt.*;

public class EnumJComboBoxExample {
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());

    JComboBox<DayOfWeek> comboBox = new JComboBox<>(DayOfWeek.values());
    comboBox.addActionListener(e -> {
      DayOfWeek selectedDay = (DayOfWeek) comboBox.getSelectedItem();
      JOptionPane.showMessageDialog(null, selectedDay + " was selected.");
    });

    panel.add(comboBox, BorderLayout.CENTER);
    frame.add(panel);
    frame.setVisible(true);
  }
}

enum DayOfWeek {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
}

这个例子创建了一个 JFrame、一个 JPanel 和一个 JComboBox。当用户选择一个选项时,一个对话框会弹出,显示用户选择的选项。可对转换枚举这里的部分进行修改,来完成相应的需求。