在java中捕获面板中的击键
我想在java中的面板上显示焦点时捕捉击键。我该怎么办 我使用Netbeans作为IDE。我尝试添加keyTyped事件,但无效 这是我的密码在java中捕获面板中的击键,java,swing,keyboard-events,Java,Swing,Keyboard Events,我想在java中的面板上显示焦点时捕捉击键。我该怎么办 我使用Netbeans作为IDE。我尝试添加keyTyped事件,但无效 这是我的密码 import com.lanadmin.Interface.ClientInterface; import java.awt.Toolkit; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.rmi.Naming; import java.ut
import com.lanadmin.Interface.ClientInterface;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.rmi.Naming;
import java.util.logging.Level;
public class RemoteViewer extends javax.swing.JInternalFrame {
public RemoteViewer() {
initComponents();
rdpanel.setFocusable(true);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
rdpanel = new javax.swing.JPanel();
setFocusable(true);
rdpanel.setToolTipText("Remote Desktop");
rdpanel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
rdpanelMouseClicked(evt);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
rdpanelMousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
rdpanelMouseReleased(evt);
}
});
rdpanel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
rdpanelMouseMoved(evt);
}
});
rdpanel.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
rdpanelFocusGained(evt);
}
});
rdpanel.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
rdpanelKeyPressed(evt);
}
public void keyReleased(java.awt.event.KeyEvent evt) {
rdpanelKeyReleased(evt);
}
public void keyTyped(java.awt.event.KeyEvent evt) {
rdpanelKeyTyped(evt);
}
});
javax.swing.GroupLayout rdpanelLayout = new javax.swing.GroupLayout(rdpanel);
rdpanel.setLayout(rdpanelLayout);
rdpanelLayout.setHorizontalGroup(
rdpanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 679, Short.MAX_VALUE)
);
rdpanelLayout.setVerticalGroup(
rdpanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 626, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(rdpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(rdpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void rdpanelMouseMoved(java.awt.event.MouseEvent evt) {
double xScale = Toolkit.getDefaultToolkit().getScreenSize().getWidth() / rdpanel.getWidth();
double yScale = Toolkit.getDefaultToolkit().getScreenSize().getHeight() / rdpanel.getHeight();
try {
String current = Login.handler.currentClientAddress.getHostAddress();
ClientInterface client = (ClientInterface) Naming.lookup("rmi://" + current + "/lan");
client.mousemove((int) (evt.getX() * xScale), (int) (evt.getY() * yScale));
} catch (Exception ex) {
Log2File.logger.log(Level.SEVERE, null, ex);
Log2File.fileHandler.flush();
}
}
private void rdpanelKeyPressed(java.awt.event.KeyEvent evt) {
System.out.println("keypressed");
}
private void rdpanelKeyTyped(java.awt.event.KeyEvent evt) {
System.out.println("aaa");
}
private void rdpanelKeyReleased(java.awt.event.KeyEvent evt) {
System.out.println("keyreleased");
}
private void rdpanelFocusGained(java.awt.event.FocusEvent evt) {
rdpanel.addKeyListener(new java.awt.event.KeyAdapter() {
@Override
public void keyPressed(java.awt.event.KeyEvent evt) {
rdpanelKeyPressed(evt);
}
@Override
public void keyReleased(java.awt.event.KeyEvent evt) {
rdpanelKeyReleased(evt);
}
@Override
public void keyTyped(java.awt.event.KeyEvent evt) {
rdpanelKeyTyped(evt);
}
});
}
public javax.swing.JPanel rdpanel;
}
import com.lanadmin.Interface.ClientInterface;
导入java.awt.Toolkit;
导入java.awt.event.InputEvent;
导入java.awt.event.MouseEvent;
导入java.rmi.Naming;
导入java.util.logging.Level;
公共类RemoteViewer扩展了javax.swing.JInternalFrame{
公共RemoteViewer(){
初始化组件();
rdpanel.setFocusable(真);
}
@抑制警告(“未选中”)
//
私有组件(){
rdpanel=newjavax.swing.JPanel();
设置聚焦(真);
setToolTipText(“远程桌面”);
addMouseListener(新java.awt.event.MouseAdapter(){
public void mouseClicked(java.awt.event.MouseEvent evt){
RDT(evt);
}
public void mousePressed(java.awt.event.MouseEvent evt){
rdpanelMousePressed(evt);
}
public void mouseereleased(java.awt.event.MouseEvent evt){
RDT(evt);
}
});
rdpanel.addMouseMotionListener(新java.awt.event.MouseMotionAdapter(){
public void mouseMoved(java.awt.event.MouseEvent evt){
rdpanelMouseMoved(evt);
}
});
addFocusListener(新的java.awt.event.FocusAdapter(){
public void focusgoven(java.awt.event.FocusEvent evt){
RDT(evt);
}
});
addKeyListener(新的java.awt.event.KeyAdapter(){
按下public void键(java.awt.event.KeyEvent evt){
RDPanel按键(evt);
}
public void keyReleased(java.awt.event.KeyEvent evt){
RDT(evt);
}
public void keyTyped(java.awt.event.KeyEvent evt){
RDT(evt);
}
});
javax.swing.GroupLayout rdpanelLayout=新的javax.swing.GroupLayout(rdpanel);
rdpanel.setLayout(rdpanelLayout);
rdpanelLayout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,679,短。最大值)
);
rdpanelLayout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,626,短。最大值)
);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(rdpanel,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
.addContainerGap())
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(rdpanel,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
.addContainerGap())
);
包装();
}//
私有void rdpanelMouseMoved(java.awt.event.MouseEvent evt){
double xScale=Toolkit.getDefaultToolkit().getScreenSize().getWidth()/rdpanel.getWidth();
double yScale=Toolkit.getDefaultToolkit().getScreenSize().getHeight()/rdpanel.getHeight();
试一试{
字符串current=Login.handler.currentClientAddress.getHostAddress();
ClientInterface client=(ClientInterface)Naming.lookup(“rmi://“+current+”/lan”);
mousemove((int)(evt.getX()*xScale),(int)(evt.getY()*yScale));
}捕获(例外情况除外){
Log2File.logger.log(Level.SEVERE,null,ex);
Log2File.fileHandler.flush();
}
}
private void rdpanelKeyPressed(java.awt.event.KeyEvent evt){
System.out.println(“按键”);
}
私有void rdpanelKeyTyped(java.awt.event.KeyEvent evt){
系统输出打印项次(“aaa”);
}
私有void rdpanelKeyReleased(java.awt.event.KeyEvent evt){
System.out.println(“按键释放”);
}
私有void rdpanelfocusgovered(java.awt.event.FocusEvent evt){
addKeyListener(新的java.awt.event.KeyAdapter(){
@凌驾
按下public void键(java.awt.event.KeyEvent evt){
RDPanel按键(evt);
}
@凌驾
public void keyReleased(java.awt.event.KeyEvent evt){
RDT(evt);
}
@凌驾
public void keyTyped(java.awt.event.KeyEvent evt){
RDT(evt);
}
});
}
public javax.swing.JPanel rdpanel;
}
您需要向面板添加一个新的FocusListener和一个新的KeyListener。如果您只希望在面板处于焦点时捕获击键,请获取FocusListener的操作,以添加并删除KeyListener。向面板添加KeyListener
:
JPanel panel = new JPanel();
panel.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) { … }
public void keyReleased(KeyEvent e) { … }
public void keyPressed(KeyEvent e) { … }
});
使用相应的方法处理事件
正如其他人明确提到的,您必须设置panel.setFocusable(true
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventPostProcessor(new EnterKeyListener());
class EnterKeyListener implements KeyEventPostProcessor {
@Override
public boolean postProcessKeyEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
//Activate the refresh button:
fireSearch();
return true; //halt further processing
}
return false;
}
}