Java Swing - 如何在ActionListener中处理泛型

Ste*_*ier 6 java generics swing java-7

我有:

class CustomerActionListener implements ActionListener
{
  @Override
  public void actionPerformed(ActionEvent event)
  {
    JComboBox cb = (JComboBox)event.getSource();
    .. do something
  }
}
Run Code Online (Sandbox Code Playgroud)

这导致jdk7中的以下编译器警告:

JComboBox是原始类型.应参数化对泛型类型JComboBox的引用

我试图将它参数化为:

JComboBox<String> cb = (JComboBox<String>)event.getSource();
Run Code Online (Sandbox Code Playgroud)

但这仍然留下以下编译器警告:

类型安全:未选中从Object转换为JComboBox

因此我不确定如何消除编译器警告......

dan*_*iel 4

我很欣赏这种做法。它避免了任何类型转换并且易于阅读。

我改进了我的答案,现在它不会给你编译器警告。JComboBox 的类型现在设置为 String。要获取选定的 Item,您必须通过 ComboBoxModel。

class CustomerActionListener implements ActionListener
{
  private JComboBox<String> comboBox;
  public CustomerActionListener(JComboBox<String> comboBox){
    this.comboBox = comboBox;
  }
  @Override
  public void actionPerformed(ActionEvent event)
  {
    // Just use the comboBox
    ComboBoxModel<String> model = comboBox.getModel();
    int index = comboBox.getSelectedIndex();
    String choosen = model.getElementAt(index);
    System.out.println("Hey you choose "+choosen);
  }
}
Run Code Online (Sandbox Code Playgroud)