Java 强制转换对象时,event.getItem()和comboBox.getSelectedItem()之间有什么区别

Java 强制转换对象时,event.getItem()和comboBox.getSelectedItem()之间有什么区别,java,swing,events,numbers,jcombobox,Java,Swing,Events,Numbers,Jcombobox,我有一个带组合框的面板。我正在将id号添加到组合框中。但是在添加任何id之前,我添加了一个空字符串,以知道没有选择任何id JComboBox jcPatientIds; JPanel patientPanel; public void updateIdsInComboBoxes(ArrayList<Integer> items) { getJcPatientIds().addItem(""); if (items.size() > 0) {

我有一个带组合框的面板。我正在将id号添加到组合框中。但是在添加任何id之前,我添加了一个空字符串,以知道没有选择任何id

JComboBox jcPatientIds;
JPanel patientPanel;

public void updateIdsInComboBoxes(ArrayList<Integer> items)
{
    getJcPatientIds().addItem("");
    if (items.size() > 0)
    {
        for (Integer item : items)
        {
            getJcPatientIds().addItem(item);
        }
    }
    getPatientPanel().add(getJcPatientIds());
}

public JComboBox getJcPatientIds()
{
    if(jcPatientIds == null)
    {
    jcPatientIds = new JComboBox();
    jcPatientIds.setBounds(250, 20, 100, 20);
    }
    return jcPatientIds;
}

public JPanel getPatientPanel()
{
    if(patientPanel == null)
    {
        patientPanel = new JPanel();
    }
    return patientPanel;
}
但是,如果我在Combobox上使用getSelectedItem。我受到了同学们的尊敬。这里有什么问题

@Override
public void itemStateChanged(ItemEvent e)
{
        if (getJcPatientIds.getSelectedItem().equals(""))
        {
            // Some stuff
        }
        else
        {
        System.out.println((int) getJcPatientIds.getSelectedItem()); // Here I am getting ClassCastException
            // Some other stuff
        }
    }
}
错误


您不能像
(int)(String\u val)

像这样改变

Integer.parseInt(getJcPatientIds.getSelectedItem());

同样,我会避免用int和字符串填充组合框。坚持使用Integer,事实上,将JComboBox声明为使用Integer作为其泛型类型的泛型对象:
JComboBox
。为空元素添加null,然后检查null:

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

public class Foo2 extends JPanel {
   DefaultComboBoxModel<Integer> jcPtIdModel = new DefaultComboBoxModel<>();
   JComboBox<Integer> jcPtIdCombo = new JComboBox<>(jcPtIdModel);

   public Foo2(List<Integer> ids) {
      if (ids != null) {
         updateIds(ids);
      }
      add(jcPtIdCombo);

      jcPtIdCombo.addItemListener(new MyItemListener());
   }

   public void updateIds(List<Integer> ids) {
      jcPtIdModel.removeAllElements();
      jcPtIdModel.addElement(null);
      for (Integer id : ids) {
         jcPtIdModel.addElement(id);
      }
   }

   private class MyItemListener implements ItemListener {
      @Override
      public void itemStateChanged(ItemEvent e) {
         //!! if (jcPatientIds.getSelectedItem().equals("")) {
         if (jcPtIdCombo.getSelectedItem() == null) {
            // Some stuff
         } else {
            // Here I am getting ClassCastException
            System.out.println((int) jcPtIdCombo.getSelectedItem());
            // Some other stuff
         }         
      }
   }

   private static void createAndShowGui() {
      ArrayList<Integer> items = new ArrayList<>();
      for (int i = 0; i < 10; i++) {
         items.add(i);
      }

      Foo2 mainPanel = new Foo2(items);

      JFrame frame = new JFrame("Foo2");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
import java.awt.event.ItemEvent;
导入java.awt.event.ItemListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.*;
公共类Foo2扩展了JPanel{
DefaultComboxModel jcPtIdModel=新的DefaultComboxModel();
JCOMBOX jcPtIdCombo=新的JCOMBOX(jcPtIdModel);
公共文件2(列表ID){
如果(id!=null){
更新ID(ID);
}
新增(jcPtIdCombo);
addItemListener(新的MyItemListener());
}
公共无效更新ID(列表ID){
jcPtIdModel.removeAllElements();
jcPtIdModel.addElement(空);
用于(整数id:ids){
jcPtIdModel.addElement(id);
}
}
私有类MyItemListener实现ItemListener{
@凌驾
公共无效itemStateChanged(ItemEvent e){
//!!如果(jcPatientIds.getSelectedItem().equals(“”){
如果(jcPtIdCombo.getSelectedItem()==null){
//一些东西
}否则{
//在这里我得到了ClassCastException
System.out.println((int)jcpticombo.getSelectedItem());
//一些其他的东西
}         
}
}
私有静态void createAndShowGui(){
ArrayList items=新建ArrayList();
对于(int i=0;i<10;i++){
项目.添加(i);
}
Foo2主面板=新的Foo2(项目);
JFrame=新JFrame(“Foo2”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(主面板);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
createAndShowGui();
}
});
}
}

我还看到您在使用
setBounds(…)
我强烈建议您不要这样做可能会让新手喜欢创建复杂GUI的最简单和最好的方法,您创建的Swing GUI越多,在使用它们时会遇到更严重的困难。当GUI调整大小时,它们不会调整您的组件大小,它们是需要增强或维护的皇家巫婆,当放置在滚动窗格中时,它们会完全失败在所有平台或屏幕分辨率与原始分辨率不同的情况下查看时,gawd非常糟糕。

请显示完整的错误消息。您不应该在同一组合框中混合整数和字符串。相反,请声明它并将其初始化为
JComboBox
及其模型的类似项,并且只放置整数或
null
。@HovercraftFullOfEels但如果我将null添加到组合框中,当我选择该值时,它会给我NullPointerException,而不是你先检查它。请查看答案。好的,我知道了,thanq非常@hovercraftfullofeelshm是的,请提供一些链接,我可以在哪里完全了解所有内容layouts@SaikiranGosikonda:请退房。
 System.out.println((int) getJcPatientIds.getSelectedItem());
Integer.parseInt(getJcPatientIds.getSelectedItem());
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

public class Foo2 extends JPanel {
   DefaultComboBoxModel<Integer> jcPtIdModel = new DefaultComboBoxModel<>();
   JComboBox<Integer> jcPtIdCombo = new JComboBox<>(jcPtIdModel);

   public Foo2(List<Integer> ids) {
      if (ids != null) {
         updateIds(ids);
      }
      add(jcPtIdCombo);

      jcPtIdCombo.addItemListener(new MyItemListener());
   }

   public void updateIds(List<Integer> ids) {
      jcPtIdModel.removeAllElements();
      jcPtIdModel.addElement(null);
      for (Integer id : ids) {
         jcPtIdModel.addElement(id);
      }
   }

   private class MyItemListener implements ItemListener {
      @Override
      public void itemStateChanged(ItemEvent e) {
         //!! if (jcPatientIds.getSelectedItem().equals("")) {
         if (jcPtIdCombo.getSelectedItem() == null) {
            // Some stuff
         } else {
            // Here I am getting ClassCastException
            System.out.println((int) jcPtIdCombo.getSelectedItem());
            // Some other stuff
         }         
      }
   }

   private static void createAndShowGui() {
      ArrayList<Integer> items = new ArrayList<>();
      for (int i = 0; i < 10; i++) {
         items.add(i);
      }

      Foo2 mainPanel = new Foo2(items);

      JFrame frame = new JFrame("Foo2");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}