使用mvc设计模式调用repaint()和paintComponent()方法时出现问题
||
我正在创建一个小型游戏,您单击按钮(上,下,左和右)来控制一只猫(由一个矩形表示)追逐鼠标(由另一个矩形表示)。 me脚,我知道...无论如何,我正在使用mvc设计模式,并且在从面板上的控制器(其中要绘制两个矩形)中的按钮侦听器调用repaint方法时遇到问题。他们第一次成功涂漆,但再也没有成功。
我已经通过两种方式实现了paintComponent()方法,但两种方法均无效
创建一个扩展JPanel并从事paintComponent业务的单独的类,在视图中创建该类的新对象,并使用它绘制矩形。
创建一个JPanel并在新JPanel对象的括号中编写paintComponent内容。
而且我已经在控制器中实现了要重绘的代码,有两种方式,但两种方式均无效
从视图中调用一个方法,该方法返回使用paintComponent方法的jpanel并对其调用repaint。
在控制器中创建一个jpanel,并从视图中为其分配面板,然后在其上调用repaint。
视图和控制器的代码(很长,很抱歉!)在下面,它还包含注释性的东西,从两种方法到解决前面提到的问题,我都无法使用...
View
/ *
* gameView.java
* /
包装游戏;
导入java.awt .;
导入java.awt.event。
导入javax.swing。*;
公共类gameView扩展了JFrame {
//components
private JButton up = new JButton(\"Up\");
private JButton down = new JButton(\"Down\");
private JButton left = new JButton(\"Left\");
private JButton right = new JButton(\"Right\");
//panels
private JPanel content = new JPanel();
//boardPanel leftPanel = new boardPanel();
private Stroke drawingStroke = new BasicStroke(1);
private JPanel leftPanel = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponents(g);
myPaint(g);
}
};
private JPanel rightPanel = new JPanel();
//model
private gameModel model;
//mouse and cat
private Rectangle cat;
private Rectangle mouse;
public void myPaint(Graphics g){
Graphics2D g1 = (Graphics2D)g;
Graphics2D g2 = (Graphics2D)g;
g1.setStroke(drawingStroke);
g1.draw(cat);
g1.setPaint(Color.yellow);
g1.fill(cat);
g2.setStroke(drawingStroke);
g2.draw(mouse);
g2.setPaint(Color.red);
g2.fill(mouse);
}
//constructor
public gameView(gameModel _model){
model = _model;
//cat and mouse
cat = new Rectangle(_model.getCatX(), _model.getCatY(), 10, 10);
mouse = new Rectangle(_model.getMouseX(), _model.getMouseY(), 10, 10);
//layout
content.setSize(500, 400);
content.setLayout(new GridLayout(0,2));
leftPanel.setSize(200, 200);
leftPanel.setBackground(Color.blue);
rightPanel.setSize(100, 400);
rightPanel.setLayout(new FlowLayout());
rightPanel.add(new JLabel(\"Controls\"));
rightPanel.add(up);
rightPanel.add(down);
rightPanel.add(left);
rightPanel.add(right);
content.add(leftPanel);
content.add(rightPanel);
this.setSize(500, 400);
this.setContentPane(content);
this.setTitle(\"Cat & Mouse Game\");
}
//returns the leftPanel to repaint in the controller
public JPanel getLeft(){
return leftPanel;
}
//listeners for buttons
public void addUpListener(ActionListener moveUp){
up.addActionListener(moveUp);
}
public void addDownListener(ActionListener moveDown){
down.addActionListener(moveDown);
}
public void addLeftListener(ActionListener moveLeft){
left.addActionListener(moveLeft);
}
public void addRightListener(ActionListener moveRight){
right.addActionListener(moveRight);
}
public void addCloseListener(WindowListener close){
this.addWindowListener(close);
}
//
public Rectangle getCat(){
return cat;
}
public Rectangle getMouse(){
return mouse;
}
//left side board panel
/*class boardPanel extends JPanel{
Stroke drawingStroke = new BasicStroke(1);
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g1 = (Graphics2D)g;
g1.setStroke(drawingStroke);
g1.draw(cat);
g1.setPaint(Color.yellow);
g1.fill(cat);
Graphics2D g2 = (Graphics2D)g;
g2.setStroke(drawingStroke);
g2.draw(mouse);
g2.setPaint(Color.red);
g2.fill(mouse);
}
}
public JPanel getLeft(){
return leftPanel;
}*/
}
控制者
/ *
* gameController.java
* /
包装游戏;
导入java.awt.event。
导入javax.swing。
公共类gameController {
private gameModel model;
private gameView view;
private JPanel lp = new JPanel();
public gameController(gameModel _model, gameView _view){
model = _model;
view = _view;
lp=_view.getLeft();
//listeners
view.addUpListener(new UpListener());
view.addDownListener(new DownListener());
view.addLeftListener(new LeftListener());
view.addRightListener(new RightListener());
view.addCloseListener(
new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
}
//DOWN
class DownListener implements ActionListener{
public void actionPerformed(ActionEvent e){
model.setCatY((model.getCatY()+10));
//do a random move for the mouse
//model.randomMove();
//view.getLeft().repaint();
lp.repaint();
System.out.println(\"x=\"+model.getCatX()+\"y=\"+model.getCatY());
}
}
//LEFT
class LeftListener implements ActionListener{
public void actionPerformed(ActionEvent e){
model.setCatY((model.getCatY()-10));
//do a random move for the mouse
//model.randomMove();
//view.getLeft().repaint();
lp.repaint();
System.out.println(\"x=\"+model.getCatX()+\"y=\"+model.getCatY());
}
}
//RIGHT
class RightListener implements ActionListener{
public void actionPerformed(ActionEvent e){
model.setCatY((model.getCatY()+10));
//do a random move for the mouse
//model.randomMove();
//view.getLeft().repaint();
lp.repaint();
System.out.println(\"x=\"+model.getCatX()+\"y=\"+model.getCatY());
}
}
}
没有找到相关结果
已邀请:
1 个回复
需复