Mousedragged не распознается
Может кто-нибудь сказать мне, почему mousedragged не распознается в следующем коде, и, возможно, помочь мне решить эту проблему?
public class Hello extends JPanel implements KeyListener, MouseListener, MouseMotionListener{
JPanel panel = new JPanel();
JFrame frame = new JFrame();
public Hello() {
addKeyListener(this);
addMouseListener(this);
addMouseMotionListener(this);
panel.addKeyListener(this);
panel.addMouseListener(this);
frame.addKeyListener(this);
frame.addMouseListener(this);
}
public static void main(String [] args){
Hello play = new Hello();
play.setPanel();
}
public void setPanel(){
panel.setLayout(null);
frame.add(panel);
frame.setLayout(null);
panel.setBounds(0,0,100,100);
frame.setVisible(true);
panel.setVisible(true);
panel.setFocusable(true);
frame.setSize(100,100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void keyTyped(KeyEvent arg0){
System.out.println("keytyped");
}
public void keyPressed(KeyEvent arg0){
System.out.print("keypressed");
}
public void keyReleased(KeyEvent arg0){
System.out.println("keyreleased");
}
public void mousePressed(MouseEvent arg0){
System.out.println("mousepressed");
}
public void mouseReleased(MouseEvent arg0){
System.out.println("mousereleased");
}
public void mouseClicked(MouseEvent arg0){
System.out.println("mouseclicked");
}
public void mouseEntered(MouseEvent arg0){
System.out.println("mousenentered");
}
public void mouseExited(MouseEvent arg0){
System.out.println("mouseexited");
}
public void mouseDragged(MouseEvent arg0){
System.out.println("mousedragged");
}
2 ответа
Вы устанавливаете MouseMotionListener на панель класса, но эта панель не в фокусе.
panel.addKeyListener(this);
panel.addMouseListener(this);
frame.addKeyListener(this);
frame.addMouseListener(this);
Здесь вы предоставили слушателям клавиш и мыши рамку и панель. Затем, далее в коде, вы устанавливаете рамку и панель как видимые. Единственная панель, оставленная с MouseMOTIONListener, является панелью невидимой структуры.
panel.addKeyListener(this);
panel.addMouseListener(this);
panel.addMouseMotionListener(this);
frame.addKeyListener(this);
frame.addMouseListener(this);
frame.addMouseMotionListener(this);
Сделайте это и посмотрите, куда вас это приведет. Я давно не работал со свингом, но думаю, что это может помочь.
Панель имеет фокус, поэтому вам нужно добавить MouseMotionListener на панель.