/*
KeyPanel.java
Demo for receiving key events in a jpanel
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyPanel extends JFrame
{
JPanel centerPanel; // 打算敲字之畫板
JTextField txtField; // 顯示所敲字之文字盒
public KeyPanel()
{
centerPanel = new JPanel();
centerPanel.setBackground(Color.pink);
centerPanel.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent ke)
{
char k = ke.getKeyChar();
txtField.setText("keyTyped=" + k); // 顯示接收鍵盤字元
}
});
centerPanel.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent me)
{
centerPanel.requestFocus(); // 滑鼠移入時自動取得鍵盤焦點
}
});
this.add(centerPanel, BorderLayout.CENTER);
txtField = new JTextField();
this.add(txtField, BorderLayout.NORTH);
}
public static void main(String args[]) // 主程式
{
KeyPanel df = new KeyPanel();
df.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
df.setSize(600, 400);
df.setVisible(true);
}
}
2008年4月16日 星期三
jpanel.requestFocus on mouseEntered
Java Swing元件中,無法敲字進入JPanel畫板,理由主要在畫板尚未取得鍵盤焦點。
一個視窗收到鍵盤事件要送給誰,是由處於鍵盤焦點之元件來決定。
這樣的鍵盤焦點一個視窗一次只能存在一個接收元件。
故想要畫板隨著滑鼠移入即可接收鍵盤事件,作法為
設定畫板監聽mouseEntered事件,一旦發現滑鼠移入,
立即利用jpanel.requestFocus()方法,設定畫板自己為鍵盤焦點。
範例如下。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言