Java中的实例
我有四节课Java中的实例,java,instance,instance-variables,Java,Instance,Instance Variables,我有四节课RunSO、MyGUI、MyMenuBar和NumberSettingsFile。我在MyGUI和MyMenuBar中有一个NumberSettingsFile的实例。问题是它们是独立的实例,所以当我在一个实例中使用方法时,它不会更新第二个实例中的值。我的问题是如何让这些实例协同工作。例如,如果我将sortComboBox的值设置为11。它在MyMenuBar中更新NumberSettingsFile的实例,但不在MyGUI中更新。因此,当按下按钮时,给出的值仍然是10。我如何让它在两
RunSO
、MyGUI
、MyMenuBar
和NumberSettingsFile
。我在MyGUI
和MyMenuBar
中有一个NumberSettingsFile
的实例。问题是它们是独立的实例,所以当我在一个实例中使用方法时,它不会更新第二个实例中的值。我的问题是如何让这些实例协同工作。例如,如果我将sortComboBox
的值设置为11
。它在MyMenuBar
中更新NumberSettingsFile
的实例,但不在MyGUI
中更新。因此,当按下按钮时,给出的值仍然是10
。我如何让它在两种情况下都更新值,这样当我按下按钮时,它会给出值11
(在本例中)
这4个类的代码如下所示
数字设置文件
package SO;
public class NumberSettingsFile
{
int numberSetting1 = 10;
public int getNumberSetting1()
{
return numberSetting1;
}
public void setNumberSetting1(int newNumberSetting1)
{
numberSetting1 = newNumberSetting1;
}
}
MyMenuBar
package SO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyMenuBar extends JMenuBar
{
ArrayList<Integer> list = new ArrayList<Integer>();
NumberSettingsFile uniSet = new NumberSettingsFile();
JComboBox sortComboBox;
MyGUI mG;
public MyMenuBar(MyGUI mG)
{
this.mG = mG;
setBorderPainted(true);
makeMenuBar();
}
public void makeMenuBar()
{
countTo(20);
sortComboBox = new JComboBox(list.toArray());
sortComboBox.setMaximumSize(new Dimension(100,25));
sortComboBox.addItemListener(new sortComboBoxChanged());
add(sortComboBox);
sortComboBox.setSelectedItem(uniSet.getNumberSetting1());
}
public void countTo(int C)
{
for(int k =2; k<=C; k++)
{
list.add(k);
}
}
class sortComboBoxChanged implements ItemListener
{
@Override
public void itemStateChanged(ItemEvent e)
{
String s = sortComboBox.getSelectedItem()+"";
uniSet.setNumberSetting1(Integer.parseInt(s));
System.out.println("This is the number which should be shown if you click the button: "+uniSet.getNumberSetting1());
}
}
}
在此问题上,我将不胜感激。您想在两个对象之间共享一个
NumberSettingsFile
实例。要做到这一点,您应该避免在类内部创建它,而是在创建两个类的地方创建它,并将它们传递给共享实例
在本例中,您的一个类已经是创建另一个类实例的类。因此,您应该传递NumberSettingsFile
的实例:
在MyMenuBar
中,不创建实例:
NumberSettingsFile uniSet = new NumberSettingsFile();
只需声明而不初始化:
NumberSettingsFile uniSet;
然后更改构造函数:
public MyMenuBar(MyGUI mG, NumberSettingsFile uniSet)
{
this.mG = mG;
this.uniSet = uniSet;
setBorderPainted(true);
makeMenuBar();
}
然后,在MyGui中更改菜单栏的创建:
mbr = new MyMenuBar(this, uniSet);
现在GUI和菜单栏之间只共享一个实例。创建多个实例时,只需将一个实例传递给两个类,而不是创建多个实例?或者这不管用
BaseClass has new NumberSettingFileInstance nsfi
| |
new MyMenuBar(nsfi) new MyGUI(nsfi)
我希望我粗糙的ASCII艺术图表能解释一些事情 你说的“齐心协力”是什么意思还不太清楚。但是如果你想让一个类有一组独立于该类的任何给定实例的变量,那么你可以将这些变量设置为静态的。@David我更新了这个问题。我希望这能让事情变得更清楚。我想我明白你的意思。感谢您的帮助,不过Real怀疑论者的答案非常有效。本质上,Real怀疑论者的答案与我的想法完全相同,只是执行方式不同-很高兴您解决了您的问题:)
mbr = new MyMenuBar(this, uniSet);
BaseClass has new NumberSettingFileInstance nsfi
| |
new MyMenuBar(nsfi) new MyGUI(nsfi)