我正在玩MVC模式,我卡住了。在actionPerformed方法中使用控制器 - 需要是最終的?
我的簡單的應用程序(你可以擲骰子)有一個MainView類,它可以創建並保存一些其他視圖,如ButtonPanelView(它有按鈕..)。 MainView由我的MainController創建。 MainController也有我的rollDice方法,它將調用diceModel類並更改值。
現在,我的rollDice Button在ButtonPanelView中,而ActionListener也在這裏。我試圖從actionPerformed方法中調用controller.rollDice(),但錯誤說「變量mainController是從內部類訪問的,需要聲明爲final」。 我不知道該怎麼做,因爲我的this.mainController不能是最終的,因爲它在構造函數中。這裏是我的代碼:
public class ButtonPanelView extends JPanel{
private MainController mainController;
private JButton rollDiceBtn = new JButton("roll dice");
private JPanel pan = new JPanel();
public ButtonPanelView(MainController mainController){
this.mainController = mainController;
add(pan);
pan.add(rollDiceBtn);
rollDiceBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
mainController.rollDice();
}
});
}
}
感謝您的幫助:)
你爲什麼要將你的控制器添加到你的視圖?這應該是另一回合呢? – user3437460
因爲我認爲actionPerformed方法應該總是在視圖中,按鈕所在的位置。我需要一種方法來從actionPerformed方法訪問控制器中的rollDice方法。另外:如果我有例如一個JTextArea和用戶改變文本(例如通過寫他們的名字),我需要在視圖中的控制器採取數據(在這種情況下,用戶名),並將其提供給模型。 我不需要在視圖中的控制器? – mcCat
如果你這樣做,你打敗了MVC的目的是解耦你的代碼。如果你想分離出視圖(UI)和邏輯,你不需要在視圖中編寫邏輯。您代之以在控制器中編寫邏輯。 – user3437460