gpt4 book ai didi

java - 在 Java GUI 中显示在鼠标位置键入的字符

转载 作者:行者123 更新时间:2023-11-30 06:20:32 25 4
gpt4 key购买 nike

我有一个使用 KeyListeners 的 Java 练习,我已经坚持了一段时间。任何帮助将不胜感激。练习是:

“编写程序,获取键盘输入的一个字符,并显示鼠标指向的字符。”

我进行了一些调试,似乎 KeyListener 在按下某个键时从未注册。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class EventProgrammingExercise10 extends JFrame {

CharPanel chars;
private int x;
private int y;
String s;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
EventProgrammingExercise10 frame = new EventProgrammingExercise10();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public EventProgrammingExercise10() {
setTitle("EventProgrammingExercise10");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 300);
chars = new CharPanel();

chars.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {
chars.repaint();
}

});

add(chars);
}

public void setX(int n) {
x = n;
}

public void setY(int n) {
y = n;
}

class MouseLocListener extends MouseMotionAdapter {

public void mouseMoved(MouseEvent e) {
setX(e.getX());
setY(e.getY());
}

}

class CharPanel extends JPanel {

protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString(String.valueOf('a'), x, y);
}

}

}

谢谢。

最佳答案

KeyListener 只有在拥有它的组件具有焦点 时才会工作。您必须首先使 JPanel 可聚焦,即 setFocusable(true),然后请求它具有焦点,即 requestFocusInWindow()

我根本不会使用 MouseListener。如果我必须使用 KeyListener,我会做的,我知道的是:

  • 使我的 JPanel 可聚焦并获得焦点
  • 给它一个正好是它大小的 BufferedImage 并在它的 paintComponent 方法中绘制它。
  • 为其添加一个 KeyListener/KeyAdapter
  • 在KeyAdapter的keyPressed方法中,使用MouseInfo类获取一个PointerInfo对象:PointerInfo pInfo = MouseInfo.getPointInfo()
  • 使用 PointerInfo 通过 pInfo.getLocation();
  • 获取当前鼠标在 屏幕上的位置
  • 获取绘图 JPanel 的 locationOnScreen。
  • 使用简单的 vector 图形将鼠标指针位置转换为相对于组件位置的位置。
  • 如果该点在该位置的边界内,则从 BufferedImage 中获取一个 Graphics 对象
  • 在BufferedImage中绘制字符
  • 重新绘制 JPanel

关于java - 在 Java GUI 中显示在鼠标位置键入的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21640181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com