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,因为我只看到可调用语句上的游标和打印的返回列表(但不是他的内容)。所以现在,我无能为力,我只能做建议,我不想;)我刚刚找到了解决办法。我在ActionListenerList List List=Model.getName()下创建了一个从模型类返回的列表引用代码>@francisunox您需要记住您构建的实例的范围。这就是这里的问题是的,我刚刚删除了在addComponents()
方法中创建的实例。我所做的只是重复使用了模型
实例,正如您所说:)@Francis这是一个解决方案,我建议您按照一些教程了解如何使用MVC来分离视图和模型(数据,而不是您的类名;))。这会更容易让你有一个好的结构。我在那部分感到困惑。我会听从你的建议。我感谢你的帮助:)