2012-08-14 50 views
-2

我需要对我的Java代码一些帮助我在Java中的新手,有一次我按了一封信我想显示一些信息,只是为了验证代码工作我想要做的是。使用javax swing库特别是keylistener和关键事件,我不知道我是否正确地做。 这里是我的代码:的Java的KeyListener

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.awt.event.KeyListener; 
import java.awt.event.KeyEvent; 
public class KeyStrokeButton{ 
    public JFrame frame; 
    public JPanel panel; 
    public JButton btnfocus, btnrelease, btnwindow, btnancestor; 
    public JTextField text; 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() 
      { 
       KeyStrokeButton mydesign = new KeyStrokeButton(); 
       mydesign.design(); 
      } 
     }); 
    } 

    public void design() 
    { 


     panel = new JPanel(); 
     panel.setLayout(null); 

     frame = new JFrame("Keystroke Tutorials"); 
     frame.getContentPane().add(panel); 
     frame.setSize(250, 250); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     btnfocus = new JButton("<html><center>Focus"); 
     btnfocus.setBounds(10, 10, 90, 80); 
     panel.add(btnfocus); 
     btnfocus.addKeyListener(new ClickPressed()); 


     btnrelease = new JButton("Release"); 
     btnrelease.setBounds(110, 10, 90, 80); 
     panel.add(btnrelease); 


     btnancestor = new JButton("Ancestor"); 
     btnancestor.setBounds(10, 100, 90, 80); 
     panel.add(btnancestor); 


     btnwindow = new JButton("Window"); 
     btnwindow.setBounds(110, 100, 90, 80); 
     panel.add(btnwindow); 
    } 
    class ClickPressed implements KeyListener 
    { 
     public void KeyPressed(KeyEvent e) 
     { 
      //any code. 
     } 
    } 
} 

尽可能我要分开我的代码的事件,所以我创建一个类,使其可读。

+0

所以你得到的错误? (如果没有,那么你可能做对了) – 2012-08-14 00:38:28

+0

这是什么问题? – 2012-08-14 00:39:01

+2

我不认为你想使用按钮的KeyListener。您可能需要考虑通过addActionListener方法向您的按钮添加ActionListeners。 – km1 2012-08-14 01:42:16

回答

4

我不知道您发布的内容中是否存在潜在的问题。但从您的代码判断,这里有几个指针:

我希望这将帮助你开始。

6

在这种情况下KeyListener是基于当前焦点。也就是说,关键事件将仅传递给当前具有焦点的组件。

所以,例如,你有3个按钮。焦点按钮只有在焦点时才会收到关键事件。如果其他组件具有焦点,则焦点按钮将不会接收到关键事件。

一般来说,KeyListener s为不是一个好主意。您正在使用的Key Bindings API

的你正在努力实现将帮助我们进一步什么更好的解释好得多。

4

Sujay的回答会给你你需要的所有信息,但这里是监听按键事件的一个简单的例子。

您可以通过发射后加入这个全球关键监听器添加到您的JFrame:

KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); 
manager.addKeyEventDispatcher (new MyDispatcher()); 

然后你需要创建一个关键事件调度,并添加您的代码到它

private class MyDispatcher implements KeyEventDispatcher 
    { 
     @Override 
     public boolean dispatchKeyEvent(KeyEvent e) 
     { 
      if (e.getKeyCode() == 38) //up key 
      { 
      //Do something when the up key is pressed 
      System.out.println("The up key was pressed"); 
      } 
      else if (e.getKeyCode() == 40) //down key 
      { 
       //Do something when the down key is pressed 
       System.out.println("The down key was pressed"); 
      } 
      return false; 
     } 
    } 
+3

键绑定是关键听众的更好选择。 – 2012-08-14 01:07:38

0

尝试使用以下代码在JFrame中构建KeyListener:设置代码,以便在按下时检测输入和退出键。

import java.awt.event.KeyEvent; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyListener; 

class KeyListener extends JFrame implements KeyListener { 

@Override 
public void keyReleased(KeyEvent e) {    // Required for  KeyListener override 

} 
@Override 
public void keyTyped(KeyEvent e) {     // Required for  KeyListener override 

} 
} 
public KeyListener() { 

addKeyListener(this);  // KeyListener added to JFrame to detect key strokes 
setFocusable(true);   // Ensure JFrame can gain focus 

} 

public void keyPressed(KeyEvent e) { // Code to handle when key pressed 
int keyCode = e.getKeyCode(); 
switch(keyCode) { 
case KeyEvent.VK_ENTER:   // Code to handle when enter key pressed 

    // ENTER CODE HERE 

    break; 
case KeyEvent.VK_ESCAPE:  // Code to handle when Escape key pressed 
    // ENTER CODE HERE 
    break; 

}}