【发布时间】:2014-12-20 22:19:01
【问题描述】:
我正在制作一个数学游戏应用程序,最近开始实现 MVC。
我有以下结构:
-
auiAs2
MigJPanel: 扩展
JPanelScreenInterface.java: 包含全局变量、字体和难度
enumMathsGame.java: 扩展
JFrame
-
auiAs2.view
DiffView.java: 扩展
MigJPanel实现ScreenInterfaceGameView.java: 扩展
MigJPanel实现ScreenInterfaceEndGameView.java: 扩展
MigJPanel实现ScreenInterface
-
auiAs2.controller
GameControl.java
EndGameControl.java
-
auiAs2.model
- Model.java: 实现 ScreenInterface
我的MathsGame.java 包含一个设置为CardLayout 的JPanel,其中添加了DiffView、GameView 和EndGameView 的实例。当我运行我的程序时,diffView 'card' 会显示给用户。
如果用户点击“新游戏”,DiffControl.java 中的ActionListener 将获得所选难度。
public class DiffControl {
private DiffView diffView;
private Model model;
public DiffControl(DiffView diffView, Model model) {
this.diffView = diffView;
this.model = model;
this.diffView.addNewGameListener(new NewGameListener());
}
class NewGameListener implements ActionListener {
String selectedDiff;
@Override
public void actionPerformed(ActionEvent e) {
selectedDiff = diffView.getSelectedDiff();
//MathsGame.setLayCard(panContainer, "New Game"));
}
}
}
这就是我卡住的地方。我应该在我的CardLayoutJPanellayCard 中的哪些面板之间切换? (MathsGame.java 如下所示,已删除无关代码。如果需要,相关类的整个代码在上面链接)
public class MathsGame extends JFrame {
private JPanel panContainer = new JPanel();
private CardLayout layCard = new CardLayout();
public MathsGame() {
panContainer.setLayout(layCard);
setContentPane(panContainer);
setSize(new Dimension(WIDTH, HEIGHT));
setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
setTitle(TITLE);
DiffView panDiffView = new DiffView();
panContainer.add(panDiffView, "Choose Difficulty");
GameView panGameView = new GameView();
panContainer.add(panGameView, "New Game");
EndGameView panEndGameView = new EndGameView();
panContainer.add(panEndGameView, "End Game");
Model model = new Model();
DiffControl diffControl = new DiffControl(panDiffView, model);
//GameControl gameControl = new GameControl(panGameView, model);
//EndGameControl EndGameControl = new EndGameControl(panEndGameView, model);
layCard.show(panContainer, "Choose Difficulty");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(MathsGame::new);
}
}
所以我的问题是:
- 在我的
CardLayout容器中放置与视图之间切换相关的代码的最佳位置是哪里?
【问题讨论】:
标签: java swing design-patterns model-view-controller cardlayout