【发布时间】:2021-12-12 13:36:12
【问题描述】:
我对这种 Java 编码有点陌生。问题是我有一个不同的 KeyListener 类和一个图像,如果用户按下一个键,我想显示,但图像来自 JLabel,我想将它添加到主类的 JFrame 但我不明白如何我会那样做。 是的,我确实看到了另一个问题,这个问题: How I add a JLabel to a JFrame on another class? 但我不能在我的代码中执行建议的方法,因为在 main 方法中调用 Key Listener 时只会在调用时处理 KeyListening 部分: jframe.add(new KeyListener()) 类似的东西,但图像不会添加是因为它包含在 JLabel 中,而 JLabel 未添加到 JFrame。 这是我的 KeyListener 代码:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.*;
import javax.swing.*;
class MKeyListener extends KeyAdapter
{
static int n = 0;
@Override
public void keyPressed(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.VK_ESCAPE)
{
n += 1;
if(n % 2 == 1)
{
}
else
{
System.out.println("Not Quitting now");
}
}
else if(event.getKeyCode() == KeyEvent.VK_ENTER && n % 2 == 1)
{
System.out.println("Quitting now...");
try
{
Thread.sleep(200);
}
catch(Exception e)
{
}
System.exit(0);
}
}
}
这是我的主要方法
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.*;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
public class Main
{
public static void main(String[] args) throws Exception
{
JTextField textField = new JTextField();
textField.addKeyListener(new MKeyListener());
JFrame jframe = new JFrame();
jframe.add(textField);
jframe.setSize(1000, 1000);
jframe.setTitle("First Development In JAVA Try : Day 3");
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setVisible(true);
}
}
有人可以建议一种在用户按键时添加该图像的方法吗?
【问题讨论】:
-
1.不要将
KeyListener添加到JTextField,这只是个坏主意。如果要监视JTextField的输入,请在字段的Document上使用DocumentListener。如果要监视“常规”键盘输入,请改用key bindings API。 2. 不要在 Event Dispatching Thread 中调用Thread.sleep,这只会导致无穷无尽的问题(和愤怒的用户) -
你的问题的“答案”是,你需要在你的“key handler”和主程序之间有某种观察者,所以“key handler”可以生成适当的事件,“main”程序可以响应并采取行动
-
那么我需要添加什么观察者?我是新手,所以我不太了解
-
我看到了键绑定 API,但该操作仅限于 java.swing.Action,而我需要一个图像显示操作。
-
你错过了理解 API 的本质 - 由一个关键事件触发的
Action依次触发其他类型的操作(即观察者回调)。Action只是作为一种机制来“包含”触发键时应该发生的事情
标签: java swing keylistener