Java 忽略KeyListener
我试图做一个简单的程序,实际上是练习-它的描述包含在附加的代码中。我的问题是,Java 忽略KeyListener,java,swing,keylistener,Java,Swing,Keylistener,我试图做一个简单的程序,实际上是练习-它的描述包含在附加的代码中。我的问题是,keyPressed()方法被完全忽略。请看一看,如果可能的话,并提供一些提示,我做错了什么 课堂练习\u第10章\u 5 /* 使用菜单栏创建窗口的白色程序。菜单栏应该有 包含10个菜单项的单个菜单,其中包含文本:0、1、,分别为9。当用户 从菜单栏中选择一个数字,应显示相应的数字 在窗户的嵌板里面。完成后,添加一个键侦听器。当用户键入 如果数字介于0和9之间,则该数字应显示在窗口中。创建一个数组 来存储菜单项。 *
keyPressed()
方法被完全忽略。请看一看,如果可能的话,并提供一些提示,我做错了什么
课堂练习\u第10章\u 5
/*
使用菜单栏创建窗口的白色程序。菜单栏应该有
包含10个菜单项的单个菜单,其中包含文本:0、1、,分别为9。当用户
从菜单栏中选择一个数字,应显示相应的数字
在窗户的嵌板里面。完成后,添加一个键侦听器。当用户键入
如果数字介于0和9之间,则该数字应显示在窗口中。创建一个数组
来存储菜单项。
*/
一揽子演习;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入java.awt.geom.Rectangle2D;
导入java.util.ArrayList;
导入javax.swing.JFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.JPanel;
公开课练习第10章第5节{
公共静态void main(字符串[]args)引发异常{
MyFrame=新的MyFrame();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
类MyFrame扩展了JFrame{
MyP小组;
公共MyFrame(){
设置大小(300300);
JMenuBar=新的JMenuBar();
setJMenuBar(bar);
//带有菜单栏的窗口
JMenu编号=新JMenu(“编号”);
添加(数字);
//创建一个数组来存储菜单项
ArrayList menuitems=新建ArrayList();
对于(int i=0;i<10;i++){
menuitems.add(新JMenuItem(i+“”));
}
对于(int i=0;i
谢谢您的提示。这里对我有效的是,我必须首先在JPanel构造函数中调用setFocusable(true)方法
class MyPanel extends JPanel {
private int number;
public void changeNumber(int num) {
this.number = num;
repaint();
}
public MyPanel() {
this.setFocusable(true);
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
changeNumber((e.getKeyChar() - '0'));
//System.out.println(e.getKeyChar());
System.out.println("In Panel the number typed is: " + number);
repaint();
}
});
System.out.println("Panel was born");
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getButton() == 1) {
System.out.println("current number is: " + number);
repaint();
}
if (e.getButton() == 3) {// right button was pressed
System.out.println("Right mouse button was pressed");
repaint();
}
}
});
}
您需要添加该侦听器才能说出您的按钮、菜单等。您在哪里添加了它?1)对于Swing,我们通常使用而不是较低级别的
keystener
。2) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。要执行此操作,请选择文本并单击消息发布/编辑表单顶部的{}
按钮。顺便说一句-对于KeyListener
触发事件,组件需要具有焦点和焦点。如建议的那样,requestFocusInWindow()
”比requestFocus()更可取
方法,该方法依赖于平台。“很抱歉,requestFocusInWindow()对我不起作用。只有setFocusable(true)工作。我不知道原因。“requestFocusInWindow()
对我不起作用。只有setFocusable(true)
起作用”
@trashgood打算同时使用它们!您的关键侦听器现在被听到,是该组件具有当前输入焦点的随机机会。添加一些其他组件,这可能会发生变化。
class MyPanel extends JPanel {
private int number;
public void changeNumber(int num) {
this.number = num;
repaint();
}
public MyPanel() {
this.setFocusable(true);
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
changeNumber((e.getKeyChar() - '0'));
//System.out.println(e.getKeyChar());
System.out.println("In Panel the number typed is: " + number);
repaint();
}
});
System.out.println("Panel was born");
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getButton() == 1) {
System.out.println("current number is: " + number);
repaint();
}
if (e.getButton() == 3) {// right button was pressed
System.out.println("Right mouse button was pressed");
repaint();
}
}
});
}