Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 忽略KeyListener_Java_Swing_Keylistener - Fatal编程技术网

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();
            }
        }
    });
}