关于键盘事件焦点问题? 废话!当然是求组了!http://expert.csdn.net/Expert/topic/2079/2079512.xml?temp=.3699304加起来198粪!就是键盘事件不相应!怎么回事情 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试试用myJComponent.setFocusable(true); Jcomponent没有setFoucusable()这个方法呀!只有this.requestFocus(); this.resetKeyboardActions(); view.isFocusTraversable(); view.grabFocus(); view.requestFocus();等方法!而且都加上了,怎么回事情呀! Jcomponent没有setFoucusable()这个方法但java.awt.Component有,而Jcomponent是java.awt.Component的子类,可以在Jcomponent中用.你加上试试先,不行再把其他的乱七八糟的都去掉再试. 试了一下,没响应键盘事件是因为焦点首先停在Jcomponent前面的组建上.按Tab键切换到Jcomponent组件上就可以响应了.下面是代码.按2次Tab键后即可打印出键盘事件.import java.awt.*;import java.awt.geom.*;import java.util.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class Sketch { public static void main(String[] args) { SketchFrame frame = new SketchFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); }}/** A frame with a panel for sketching a figure */class SketchFrame extends JFrame { SketchPanel panel = new SketchPanel(); JPanel jToolPane = new JPanel(); JToolBar tb1 = new JToolBar(); JToolBar tb2 = new JToolBar(); public SketchFrame() { setTitle("Sketch"); setSize(WIDTH, HEIGHT); // add panel to frame Container contentPane = getContentPane(); tb1.add(new JButton("toolBar1")); tb2.add(new JButton("toolBar2")); jToolPane.add(tb1); jToolPane.add(tb2); contentPane.add(jToolPane, BorderLayout.NORTH); contentPane.add(panel, BorderLayout.CENTER); panel.setFocusable(true); } public static final int WIDTH = 300; public static final int HEIGHT = 200;}/** A panel for sketching with the keyboard. */class SketchPanel extends JComponent { private JTextArea ta = new JTextArea(); public SketchPanel() { this.setLayout(new BorderLayout()); this.add(new JScrollPane(ta)); ta.setEditable(false); KeyHandler listener = new KeyHandler(); addKeyListener(listener); } public void addText(String text) { ta.append(text); }// public boolean isFocusTraversable()// {// return true; // allow panel to get input focus// } private class KeyHandler implements KeyListener { public void keyPressed(KeyEvent event) { int keyCode = event.getKeyCode(); char c = (char) keyCode; addText("---- keyPressed: " + c + "\tkeyCode: " + keyCode + "\n"); System.out.println(keyCode); // set distance } public void keyReleased(KeyEvent event) {} public void keyTyped(KeyEvent event) { char keyChar = event.getKeyChar(); } }} 是这样的,但这样按TabBNU不好吧!用户不方便呀! 如果不想按tab键,设计上就存在问题.Jcomponent上的键盘事件,当然只能在Jcomponent有焦点的时候才响应!例如:Jcomponent是一个画板,已经选定了画板中的一条直线并复制到了剪贴板中.Jcomponent中有键盘事件"Ctrl+V"粘贴操作,这时候你在Jcomponent上的另一个对话框中进行操作(即Jcomponent失去焦点),你想用Ctrl+C和Ctrl+v在对话框中的几个JTextField中进行操作,会有什么后果? cooled(经典中,有灌水嫌疑) 哥哥!我的其他两个jcomponent现在是两个jtoolbar 你不会让这个也TAB一下吧!就算tab了得到了焦点,现在键盘事件可以相应了,但是当我用鼠标在该区域绘图是或者后,键盘事件又不相应了!呵呵! 就是这样的在frame里只加一个view的时候,一切正常,但是在加上jtoolbar来显示按钮!就不行了! 就是当我按下jtoolbar上的按钮,重新回到绘图区域中的时候?如何让视图其获焦点! JTextArea 字符对齐问题 关于JAVA静态数组问题 急 在线等 如何在swing中实现点击按钮下载文件 iReport 求解! 在sql查询中如何使用in查询 急,基础问题,求解 关于线程的疑问 关于jcreatorpro j2sdkee做服务器怎么样?大家给点意见! 如何用两“猫“将两计算机连接起来 高分征求代码--如何用java在服务器上写文件---122分 两个类,你中有我,我中有你,如何编译? 谁能给俺介绍本关于swing的书?up有分
this.resetKeyboardActions();
view.isFocusTraversable();
view.grabFocus();
view.requestFocus();
等方法!而且都加上了,怎么回事情呀!
但java.awt.Component有,
而Jcomponent是java.awt.Component的子类,可以在Jcomponent中用.
你加上试试先,不行再把其他的乱七八糟的都去掉再试.
下面是代码.按2次Tab键后即可打印出键盘事件.import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;public class Sketch {
public static void main(String[] args) {
SketchFrame frame = new SketchFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}/**
A frame with a panel for sketching a figure
*/
class SketchFrame
extends JFrame {
SketchPanel panel = new SketchPanel();
JPanel jToolPane = new JPanel();
JToolBar tb1 = new JToolBar();
JToolBar tb2 = new JToolBar(); public SketchFrame() {
setTitle("Sketch");
setSize(WIDTH, HEIGHT); // add panel to frame Container contentPane = getContentPane(); tb1.add(new JButton("toolBar1"));
tb2.add(new JButton("toolBar2"));
jToolPane.add(tb1);
jToolPane.add(tb2);
contentPane.add(jToolPane, BorderLayout.NORTH);
contentPane.add(panel, BorderLayout.CENTER);
panel.setFocusable(true); } public static final int WIDTH = 300;
public static final int HEIGHT = 200;
}/**
A panel for sketching with the keyboard.
*/
class SketchPanel
extends JComponent {
private JTextArea ta = new JTextArea();
public SketchPanel() {
this.setLayout(new BorderLayout());
this.add(new JScrollPane(ta));
ta.setEditable(false);
KeyHandler listener = new KeyHandler();
addKeyListener(listener);
} public void addText(String text) {
ta.append(text);
}// public boolean isFocusTraversable()
// {
// return true; // allow panel to get input focus
// } private class KeyHandler
implements KeyListener {
public void keyPressed(KeyEvent event) {
int keyCode = event.getKeyCode();
char c = (char) keyCode;
addText("---- keyPressed: " + c + "\tkeyCode: " + keyCode + "\n");
System.out.println(keyCode);
// set distance
} public void keyReleased(KeyEvent event) {} public void keyTyped(KeyEvent event) {
char keyChar = event.getKeyChar(); }
}
}
Jcomponent上的键盘事件,当然只能在Jcomponent有焦点的时候才响应!例如:Jcomponent是一个画板,已经选定了画板中的一条直线并复制到了剪贴板中.Jcomponent中有键盘事件"Ctrl+V"粘贴操作,这时候你在Jcomponent上的另一个对话框中进行操作(即Jcomponent失去焦点),你想用Ctrl+C和Ctrl+v在对话框中的几个JTextField中进行操作,会有什么后果?
就算tab了得到了焦点,现在键盘事件可以相应了,但是
当我用鼠标在该区域绘图是或者后,键盘事件又不相应了!
呵呵!
在frame里只加一个view的时候,一切正常,但是在加上jtoolbar
来显示按钮!就不行了!
如何让视图其获焦点!