组合框和 MVC 模式的问题
Trouble with Combobox and MVC pattern
我遇到了一个关于 JComboBox 和 MCV 模式的小问题。
在我的 View 包中,我有一个 class gui。这包含组合框。
package view;
public class Gui {
.........
public JComboBox<OceanObject> oceanBoxDelete = new ComboBox<OceanObject>
();
this.down.add(this.oceanBoxDelete);
this.oceanBoxDelete.setSize(40, 1);
.......
这也包含一个按钮。如果按钮被击中,它会通过按钮 listener/action 侦听器触发开关。
这个开关应该触发一个从列表中删除一个对象的过程。
如果我将动作侦听器放入同一个 java 文件中,它可以工作,但我不允许这样做。如果我将它放入按钮侦听器文件中,当我进入带有注释未知来源和 .
的组合框时,我会得到一个空指针异常
我的按钮监听器看起来像:
package control;
import view.Gui;
public class ButtonListener implements ActionListener{
private Gui gui;
public ButtonListener() {
this.ocean = ocean;
}
@Override
public void actionPerformed(ActionEvent ae) {
switch (ae.getActionCommand()) {
....
case "Delete":
System.out.println("deleteButton wurde gedrueckt.");
OceanObject oObject = (OceanObject)
gui.oceanBoxDelete.getSelectedItem());
go.removeOceanOjectFromOcean(oObject);
.......
我可以看到触发了正确的开关,因为 println 显示在控制台中。
所以我认为问题是 getSelectedItem 看不到组合框,我需要让它知道它,但是如何?
在 ButtonListener
class 中,您没有在构造函数中初始化 gui
。除非您通过未列出的其他方法传递它,否则当您在 actionPerformed()
.
中访问它时,它是 null
您可以将 gui
和 ButtonListener
需要的任何其他内容传递给构造函数:
public ButtonListener(Gui gui, Ocean ocean, Go go) {
this.gui = gui;
this.ocean = ocean;
this.go = go;
}
那么当你在Gui
class中创建ButtonListener
时,你需要提供实际值:
this.deleteButton.addActionListener(new ButtonListener(
this,
this.oceanPanel.getOcean(),
this.go
));
我猜 oceanPanel.getOcean()
提供了 Ocean
实例 - 如果没有,请根据需要进行更改。
我遇到了一个关于 JComboBox 和 MCV 模式的小问题。
在我的 View 包中,我有一个 class gui。这包含组合框。
package view;
public class Gui {
.........
public JComboBox<OceanObject> oceanBoxDelete = new ComboBox<OceanObject>
();
this.down.add(this.oceanBoxDelete);
this.oceanBoxDelete.setSize(40, 1);
.......
这也包含一个按钮。如果按钮被击中,它会通过按钮 listener/action 侦听器触发开关。 这个开关应该触发一个从列表中删除一个对象的过程。 如果我将动作侦听器放入同一个 java 文件中,它可以工作,但我不允许这样做。如果我将它放入按钮侦听器文件中,当我进入带有注释未知来源和 .
的组合框时,我会得到一个空指针异常我的按钮监听器看起来像:
package control;
import view.Gui;
public class ButtonListener implements ActionListener{
private Gui gui;
public ButtonListener() {
this.ocean = ocean;
}
@Override
public void actionPerformed(ActionEvent ae) {
switch (ae.getActionCommand()) {
....
case "Delete":
System.out.println("deleteButton wurde gedrueckt.");
OceanObject oObject = (OceanObject)
gui.oceanBoxDelete.getSelectedItem());
go.removeOceanOjectFromOcean(oObject);
.......
我可以看到触发了正确的开关,因为 println 显示在控制台中。
所以我认为问题是 getSelectedItem 看不到组合框,我需要让它知道它,但是如何?
在 ButtonListener
class 中,您没有在构造函数中初始化 gui
。除非您通过未列出的其他方法传递它,否则当您在 actionPerformed()
.
null
您可以将 gui
和 ButtonListener
需要的任何其他内容传递给构造函数:
public ButtonListener(Gui gui, Ocean ocean, Go go) {
this.gui = gui;
this.ocean = ocean;
this.go = go;
}
那么当你在Gui
class中创建ButtonListener
时,你需要提供实际值:
this.deleteButton.addActionListener(new ButtonListener(
this,
this.oceanPanel.getOcean(),
this.go
));
我猜 oceanPanel.getOcean()
提供了 Ocean
实例 - 如果没有,请根据需要进行更改。