当前位置: 首页 > 面试题库 >

MouseListener / KeyListener不起作用(JPanel)

梁丘权
2023-03-14
问题内容

我正在做一个涉及JPanel中的鼠标和键监听器的小项目。不幸的是,当我使用鼠标/键盘时,没有一个方法被调用。我之前曾使用过JPanels / JFrame
/ JApplet和JComponents。代码片段如下所示:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.util.Scanner;

public class Hello extends JPanel implements KeyListener, MouseListener{
    JPanel panel = new JPanel();
    JFrame frame = new JFrame();
    public Hello(){
        addKeyListener(this);
        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 evt){
        System.out.println("keytyped");
    }
    public void keyPressed(KeyEvent evt){
        System.out.print("keypressed");
    }
    public void keyReleased(KeyEvent evt){
        System.out.println("keyreleased");
    }
    public void mousePressed(MouseEvent evt){
        System.out.println("mousepressed");
    }
    public void mouseReleased(MouseEvent evt){
        System.out.println("mousereleased");
    }
    public void mouseClicked(MouseEvent evt){
        System.out.println("mouseclicked");
    }
    public void mouseEntered(MouseEvent evt){
        System.out.println("mousenentered");
    }
    public void mouseExited(MouseEvent evt){
        System.out.println("mouseexited");
    }
}

偏离主题:我不断收到错误消息您的帖子似乎包含格式错误的代码。请使用代码工具栏按钮或CTRL +
K键盘快捷键将所有代码缩进4个空格。要获得更多编辑帮助,请单击[?]工具栏图标。我不知道如何解决它。有时我将所有内容都放入代码中,但仍然无法提交。


问题答案:

看看Java KeyListener forJFrame是否没有响应?。

您需要注册KeyListener,并MouseListener为每一个JComponent你要听:

public Hello() {
    addKeyListener(this);
    addMouseListener(this);
    panel.addKeyListener(this);
    panel.addMouseListener(this);
    frame.addKeyListener(this);
    frame.addMouseListener(this);
}

编辑:
仅会从当时JComponent具有焦点的触发键和鼠标事件。因此,似乎已经达成共识,即KeyBindings可能对KeyListeners有利。但是,这两个都有其应用程序,因此这里没有硬性规定。阅读“
如何编写密钥侦听器
”和“
如何编写密钥绑定
”,您将了解要点。



 类似资料:
  • 问题内容: 由于某种原因,我的KeyListener只是不响应KeyPressed事件。 如果有关系,我使用的是Ubuntu 12.04。每当按下某个键时,它应该打印“ Key Pressed”,但不是这样。 这是代码: 问题答案: 致电(与您的问题无关,但稍后会解决一些问题) 使组件“具有焦点”- 使用键绑定过 使用过… 从Java文档 因为此方法的焦点行为取决于平台,所以强烈建议开发人员在可能

  • 问题内容: 我有单独的类来处理鼠标侦听器。但是当我在另一个类中使用它时,它不起作用,并且我还不知道如何解决这个问题。这是我的Handler类: DrawingCanvas类: StatusBar类: 和MouseEventGUI类: 当我运行该程序时,在状态栏中显示“未监听鼠标”(请参见MouseEventGUI类),希望它在画布中移动时显示鼠标光标的坐标。 [更新] 如果在同一个类中,则 可以

  • 问题内容: 我发现,当我编写“ pnlMap.add(map [i] [j])”时,键侦听器将无法工作。map是JButton的集合,pnlMap是JPanel。 公共游戏(玩家播放器){ 问题答案: 为了工作,必须将其注册为可聚焦的组件并使其具有键盘焦点。默认情况下,大多数容器都喜欢和无法将其聚焦(在考虑使它们成为容器之前,我会非常小心)。这意味着,一旦您添加了一个可以接受键盘焦点的组件(并且它

  • 额外信息:我是用BlueJ来从中,用4个类在basic程序中回答我的问题。我意识到很多人在互联网上说要使用键绑定而不是KeyListener,但我现在不明白键绑定... ---遵循装满鳗鱼的气垫船的建议,我将尝试使用键绑定。--- 所以Keybindings有两个“命令”来工作:输入和操作。

  • 有人能告诉我为什么这也不管用吗?(我的第二个动作监听器是我的游戏所需的其他东西)

  • 问题内容: 我的程序应该等待按下向左或向右箭头键,然后更改一个值,以便下次更新PaintComponent时,屏幕看起来有所不同。但是,运行该程序时,屏幕没有变化。 以下是变量声明: 这是主要的KeyListener声明: 这是用于绘画的方法: 当我运行该程序时,该程序会打印外壳,但是当我按箭头键时,屏幕上没有任何变化。 问题答案: 您需要先将关键侦听器添加到组件,然后才能调用它: 您还需要使组件