Java 为什么列表值保持不变?

Java 为什么列表值保持不变?,java,list,Java,List,我想根据JComboBox的索引动态更改列表的值。我有JComboBox,在那里我获取索引并返回它以在类中的某个地方重用 查看 public class Frame extends JFrame { JComboBox firstCombo; public Frame() { addComponents(getContentPane()); setVisible(true); pack(); } public void addComponents(Container p

我想根据
JComboBox
的索引动态更改列表的值。我有
JComboBox
,在那里我获取索引并返回它以在类中的某个地方重用

查看

public class Frame extends JFrame
{
JComboBox firstCombo;
public Frame()
{
    addComponents(getContentPane());
    setVisible(true);
    pack();
}

public void addComponents(Container pane)
{
    firstCombo = new JComboBox();
    firstCombo.addActionListener(listener);
    add(firstCombo);

    DefaultComboBoxModel cbModel = new DefaultComboBoxModel(setGender());
    firstCombo.setModel(cbModel);

    int i = 0;
    Model m = new Model(i);

    List list = m.getName();

    for(Object s : list)
    {
        System.out.println(s);
    }
}

ActionListener listener = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource() == firstCombo)
        {
            int i = firstCombo.getSelectedIndex();
            Model model = new Model(i);
            model.setIndex(i);
        }
    }
};
}
型号

public class Model 
{
int a;

public Model(int a)
{
    this.a = a;
}

public static String[] setGender()
{
    return new String[] {"Male", "Female"};
}

public void setIndex(int i)
{
    this.a = i;
}

public int getIndex()
{
    return a;
}

public List getName()
{
    List list = new ArrayList();

    if(getIndex() == 0)
    {
        list.add("Male");
    }
    else if(getIndex() == 1)
    {
        list.add("Female");
    }
    return list;
}

}

public class Jcombo {


public static void main(String[] args) {
    Frame frame = new Frame();
}

}
但当我在视图中调用此方法时,返回列表(
returnlist
)保持不变。有什么原因吗

ActionListener listener = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource() == firstCombo)
        {
            int i = firstCombo.getSelectedIndex();
            Model model = new Model(i);
            model.setIndex(i);
        }
    }
};
您正在每个操作上重新创建一个
Model
的新实例,更新索引后什么都不做,因此
Model
将丢失,垃圾收集器将处理它。保留
模型
实例,以便以后重用


注意:
getName
返回一个列表,但在其中,您总是创建一个新实例并添加一个值。不知道为什么

你试过做一个测试吗?非常肯定你会通过这样做发现问题:@AxelH仍然没有尝试。但是在调试器中看到流会给我正确的值。@NicolasFilotto对此表示感谢。我正确地检索了我的数据。我的列表中有一个问题。你没有尝试什么?你的密码?好吧,提供一个MCVE,因为我只看到可调用语句上的游标和打印的返回列表(但不是他的内容)。所以现在,我无能为力,我只能做建议,我不想;)我刚刚找到了解决办法。我在ActionListener
List List List=Model.getName()下创建了一个从模型类返回的列表引用@francisunox您需要记住您构建的实例的范围。这就是这里的问题是的,我刚刚删除了在
addComponents()
方法中创建的实例。我所做的只是重复使用了
模型
实例,正如您所说:)@Francis这是一个解决方案,我建议您按照一些教程了解如何使用MVC来分离视图和模型(数据,而不是您的类名;))。这会更容易让你有一个好的结构。我在那部分感到困惑。我会听从你的建议。我感谢你的帮助:)