-
- /*
- 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)
沒有留言:
張貼留言