关于键盘事件焦点问题?

pqds 2003-08-23 04:27:48
http://expert.csdn.net/Expert/topic/2079/2079512.xml?temp=.3699304

mvc框架
应该还是焦点没有获取!
在Frame中!
//getContentPane().add(toolBar, BorderLayout.NORTH);
还有加入视图的语句!
如果去掉toolBar,只加视图就运行正常,但是两个都加!则不能运行键盘事件!
简单说就是!
就是在一个Frame中加入了JComponent(内有键盘事件),和3个JToolBar
如果不加JToolBar(只有JComponent)则程序正常!
否则键盘事件不执行,但同时鼠标事件一直运行正常!
...全文
63 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pqds 2003-09-01
  • 打赏
  • 举报
回复
cooled(经典中,有灌水嫌疑) 哥哥!

我的其他两个jcomponent现在是两个jtoolbar 你不会让这个也TAB一下吧!
就算tab了得到了焦点,现在键盘事件可以相应了,但是
当我用鼠标在该区域绘图是或者后,键盘事件又不相应了!
呵呵!
pqds 2003-09-01
  • 打赏
  • 举报
回复
就是当我按下jtoolbar上的按钮,重新回到绘图区域中的时候?
如何让视图其获焦点!
pqds 2003-09-01
  • 打赏
  • 举报
回复
就是这样的
在frame里只加一个view的时候,一切正常,但是在加上jtoolbar
来显示按钮!就不行了!
李欣欣1981 2003-08-27
  • 打赏
  • 举报
回复
楼主有魅力,有没有男朋友?
疾风2002 2003-08-27
  • 打赏
  • 举报
回复
如果不想按tab键,设计上就存在问题.
Jcomponent上的键盘事件,当然只能在Jcomponent有焦点的时候才响应!

例如:Jcomponent是一个画板,已经选定了画板中的一条直线并复制到了剪贴板中.Jcomponent中有键盘事件"Ctrl+V"粘贴操作,这时候你在Jcomponent上的另一个对话框中进行操作(即Jcomponent失去焦点),你想用Ctrl+C和Ctrl+v在对话框中的几个JTextField中进行操作,会有什么后果?

pqds 2003-08-26
  • 打赏
  • 举报
回复
先插入视图,再插入其他的可以解决!】
但是本质的如果两个视图怎么办!

还有现在没有操作之前,键盘事件还在(可以运行)
用鼠标绘画一个图形之后(同一个视图)键盘事件就不见了!
pqds 2003-08-26
  • 打赏
  • 举报
回复
问题可以这样解决先加视图!最后在加没有键盘事件的东西!

但还有一个本质问题,加入有两个视图都有键盘事件!那怎么办!
pqds 2003-08-26
  • 打赏
  • 举报
回复
是这样的,但这样按TabBNU不好吧!用户不方便呀!
pqds 2003-08-25
  • 打赏
  • 举报
回复
Jcomponent没有setFoucusable()这个方法呀!

只有this.requestFocus();
this.resetKeyboardActions();
view.isFocusTraversable();
view.grabFocus();
view.requestFocus();
等方法!而且都加上了,怎么回事情呀!
疾风2002 2003-08-25
  • 打赏
  • 举报
回复
试了一下,没响应键盘事件是因为焦点首先停在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();

}
}
}
疾风2002 2003-08-25
  • 打赏
  • 举报
回复
Jcomponent没有setFoucusable()这个方法
但java.awt.Component有,
而Jcomponent是java.awt.Component的子类,可以在Jcomponent中用.
你加上试试先,不行再把其他的乱七八糟的都去掉再试.
疾风2002 2003-08-23
  • 打赏
  • 举报
回复
试试用myJComponent.setFocusable(true);
nomenn 2003-08-23
  • 打赏
  • 举报
回复
up
pqds 2003-08-23
  • 打赏
  • 举报
回复
不帮忙可真死了!
pqds 2003-08-23
  • 打赏
  • 举报
回复
大家帮忙呀!要不死给你们看!
pqds 2003-08-23
  • 打赏
  • 举报
回复
废话!当然是求组了!
http://expert.csdn.net/Expert/topic/2079/2079512.xml?temp=.3699304
加起来198粪!

就是键盘事件不相应!怎么回事情
hewei999 2003-08-23
  • 打赏
  • 举报
回复
楼主你是在向我们求助,还是在自言自语啊???

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧