PegAndDisks 也用了mouse的两个事件接口,不知是不是这个问题,是不是它捕获了,上一级就不能捕获了,但好像不是这样的。public class PegAndDisks extends JPanel implements MouseListener, MouseMotionListener { public void mouseClicked(MouseEvent mouseEvent){ } public void mousePressed(MouseEvent mouseEvent){} public void mouseReleased(MouseEvent mouseEvent){} public void mouseEntered(MouseEvent mouseEvent){} public void mouseExited(MouseEvent mouseEvent){} public void mouseDragged(MouseEvent mouseEvent){ } public void mouseMoved(MouseEvent mouseEvent){} }
奇怪,在我这里真的行 我唯一的改动就是我没有PegAndDisks,所以用JPanel代替了
我把PegAndDisks,用JPanel代替也没问题,但用了PegAndDisks出问题了。 看一下PegAndDisks: package jhanoitowers;import java.util.Vector; import java.awt.*; import java.awt.event.*; import javax.swing.*;public class PegAndDisks extends JPanel implements MouseListener, MouseMotionListener { int diskNum=0; //盘子个数 int diskHeight=8;//to be get and set 盘子厚度 int baseHeight=8;// to be get and set 底坐厚度 int diskDiff=3; //上一个盘子与下一个盘子宽度之差 public PegAndDisks() { GridLayout pegLayout=new GridLayout(); this.setBackground(Color.white); this.setLayout(pegLayout); this.setBackground(Color.white); this.setOpaque(true); this.setDiskNum(0); addMouseMotionListener(this); addMouseListener(this); this.validate(); } public void paint(Graphics g){ g.clearRect(0,0,this.getWidth(),this.getHeight()); drawBaseAndPeg(g); drawDisks(g); } /**画底坐与柱子*/ public void drawBaseAndPeg(Graphics g){//will be draw peg } /**画盘子*/ public void drawDisks(Graphics g){//will be draw disks } public void addADisk(){ this.setDiskNum(this.getDiskNum() + 1); repaint(); } public void initDisk(int num){ if(num>0){ this.setDiskNum(num); this.repaint(); } } public void removeADisk(){ if(this.getDiskNum()>0){ this.setDiskNum(this.getDiskNum() - 1); repaint(); } } public int getDiskNum(){ return this.diskNum; } public void setDiskNum(int diskNum){ this.diskNum=diskNum; } public int getDiskDiff(){ return this.diskDiff; } public void setDiskDiff(int diskDiff){ this.diskDiff=diskDiff; } public int getDiskHeight(){ return diskHeight; } public void setDiskHeight(int diskHeight){ this.diskHeight=diskHeight; } public int getBaseHeight(){ return baseHeight; } public void setBaseHeight(int baseHeight){ this.baseHeight=baseHeight; } public void mouseClicked(MouseEvent mouseEvent){ System.out.println("sub!"); super.processMouseEvent(mouseEvent); } public void mousePressed(MouseEvent mouseEvent){} public void mouseReleased(MouseEvent mouseEvent){} public void mouseEntered(MouseEvent mouseEvent){} public void mouseExited(MouseEvent mouseEvent){} public void mouseDragged(MouseEvent mouseEvent){ } public void mouseMoved(MouseEvent mouseEvent){} }
public void mouseClicked(MouseEvent mouseEvent){
}
public void mousePressed(MouseEvent mouseEvent){}
public void mouseReleased(MouseEvent mouseEvent){}
public void mouseEntered(MouseEvent mouseEvent){}
public void mouseExited(MouseEvent mouseEvent){}
public void mouseDragged(MouseEvent mouseEvent){
}
public void mouseMoved(MouseEvent mouseEvent){}
}
我唯一的改动就是我没有PegAndDisks,所以用JPanel代替了
看一下PegAndDisks:
package jhanoitowers;import java.util.Vector;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class PegAndDisks extends JPanel implements MouseListener, MouseMotionListener {
int diskNum=0; //盘子个数
int diskHeight=8;//to be get and set 盘子厚度
int baseHeight=8;// to be get and set 底坐厚度
int diskDiff=3; //上一个盘子与下一个盘子宽度之差
public PegAndDisks() {
GridLayout pegLayout=new GridLayout();
this.setBackground(Color.white);
this.setLayout(pegLayout);
this.setBackground(Color.white);
this.setOpaque(true);
this.setDiskNum(0);
addMouseMotionListener(this);
addMouseListener(this);
this.validate();
}
public void paint(Graphics g){
g.clearRect(0,0,this.getWidth(),this.getHeight());
drawBaseAndPeg(g);
drawDisks(g);
}
/**画底坐与柱子*/
public void drawBaseAndPeg(Graphics g){//will be draw peg
}
/**画盘子*/
public void drawDisks(Graphics g){//will be draw disks
}
public void addADisk(){
this.setDiskNum(this.getDiskNum() + 1);
repaint();
}
public void initDisk(int num){
if(num>0){
this.setDiskNum(num);
this.repaint();
}
}
public void removeADisk(){
if(this.getDiskNum()>0){
this.setDiskNum(this.getDiskNum() - 1);
repaint();
}
}
public int getDiskNum(){
return this.diskNum;
}
public void setDiskNum(int diskNum){
this.diskNum=diskNum;
}
public int getDiskDiff(){
return this.diskDiff;
}
public void setDiskDiff(int diskDiff){
this.diskDiff=diskDiff;
}
public int getDiskHeight(){
return diskHeight;
}
public void setDiskHeight(int diskHeight){
this.diskHeight=diskHeight;
}
public int getBaseHeight(){
return baseHeight;
}
public void setBaseHeight(int baseHeight){
this.baseHeight=baseHeight;
}
public void mouseClicked(MouseEvent mouseEvent){
System.out.println("sub!");
super.processMouseEvent(mouseEvent);
}
public void mousePressed(MouseEvent mouseEvent){}
public void mouseReleased(MouseEvent mouseEvent){}
public void mouseEntered(MouseEvent mouseEvent){}
public void mouseExited(MouseEvent mouseEvent){}
public void mouseDragged(MouseEvent mouseEvent){
}
public void mouseMoved(MouseEvent mouseEvent){}
}