我遇到了一个JComboBox和MCV模式的小问题。
在我的View包中,我得到了一个类gui。这包含组合框。
package view;
public class Gui {
.........
public JComboBox<OceanObject> oceanBoxDelete = new ComboBox<OceanObject>
();
this.down.add(this.oceanBoxDelete);
this.oceanBoxDelete.setSize(40, 1);
.......
这也包含一个按钮。如果按钮被击中,它会通过按钮监听器/动作监听器触发切换。 此开关应该触发一个过程,从列表中删除一个对象。 如果我把动作监听器放在同一个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无法看到组合框,我需要知道它,但是如何知道?
答案 0 :(得分:0)
在$this->YoutModel->save(null,false);
类中,您没有在构造函数中初始化ButtonListener
。除非您通过其他未列出的方法传递,否则当您在gui
中访问时,null
为<{1}}。
您可以将actionPerformed()
以及gui
所需的任何内容传递给构造函数:
ButtonListener
然后,当您在public ButtonListener(Gui gui, Ocean ocean, Go go) {
this.gui = gui;
this.ocean = ocean;
this.go = go;
}
课程中创建ButtonListener
时,您需要提供实际值:
Gui
我猜this.deleteButton.addActionListener(new ButtonListener(
this,
this.oceanPanel.getOcean(),
this.go
));
提供了oceanPanel.getOcean()
个实例 - 如果没有,请根据需要进行更改。