Combobox和MVC模式的问题

时间:2015-09-13 22:25:10

标签: java model-view-controller combobox jcombobox

我遇到了一个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无法看到组合框,我需要知道它,但是如何知道?

1 个答案:

答案 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()个实例 - 如果没有,请根据需要进行更改。