java鍵盤事件
1. java鍵盤事件
沒大看懂你的意思,如果是需要監聽鍵盤的輸入、刪除的話可以這樣:
JTextField myjtf=new JTextField(30);
myjtf.getDocument().addDocumentListener(new javax.swing.event.DocumentListener(){
public void changedUpdate(DocumentEvent e) {//這是更改操作的處理
String aaa =myjtf.getText().trim();//trim()方法用於去掉你可能誤輸入的空格號
System.out.println("1->"+aaa);
}
public void insertUpdate(DocumentEvent e) {//這是插入操作的處理
String aaa = myjtf.getText().trim();
System.out.println("2->"+aaa);
}
public void removeUpdate(DocumentEvent e) {//這是刪除操作的處理
String aaa = myjtf.getText().trim();
System.out.println("3->"+aaa);
}
}
);
2. JAVA中的鍵盤事件KeyEvent
因為你添加的抄面板上含有按襲鈕,第一個按鈕默認會獲得焦點,只有獲得焦點組建才會相應事件。因為Frame無法獲得焦點,所以就無法再響應事件了。如果把JButton改成JLabel,就不會有問題了。JLabel默認不會獲得焦點,焦點仍然在Frame上,所以還會響應事件。
採用樓上,或改為
class MessagePanel extends JPanel {
public MessagePanel() {
setLayout(new GridLayout(8, 1));
JButton b;
for (int i = 0; i < 8; i++) {
b = new JButton("沒用的按鈕");
b.setFocusable(false);
add(b);
}
}
3. java中如何實現鍵盤輸入事件
Scanner scanner = new Scanner(System.in);
//輸入數字
int num =scanner.nextInt();
//輸入字元串
String str=scanner.nextLine();
根據數據類型調用scanner的不同方法
4. java中的鍵盤事件
請問你的鍵盤時間事某個特定按鈕還是要監聽鍵盤按下的鍵呢~?我都給你列在下面吧!如果事特定的按鈕我給你個例子!其實用的就是一句話!JFrame.getRootPane.setDefaultButton(new JButton()) ;就可以啦!意思是 取跟面板然後設置默認按鈕就可以了! 如果你事要監聽單個的鍵盤按鈕的話就這樣~~~~例子如下!:你看懂這個代碼就明白了!package IO;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class KeyEventDemo extends JFrame implements ActionListener, KeyListener {
JTextArea txt1;
JButton btnOK;
JPanel pnlMain;
public KeyEventDemo() {
pnlMain = new JPanel();
setContentPane(pnlMain);
txt1 = new JTextArea();
btnOK = new JButton("確認");
txt1.addKeyListener(this); //應該是在 TextField 里添加鍵盤監聽事件
btnOK.addActionListener(this);//在按鈕上添加事件監聽
pnlMain.setLayout(new BorderLayout());//添加布局器
pnlMain.add(txt1,BorderLayout.NORTH); //TextField 布局在上方
pnlMain.add(btnOK,BorderLayout.SOUTH); //Button 布局在下方
setTitle("好啊");
setSize(300, 200);
setVisible(true);//viersible() 函數應該放在最後
setDefaultCloseOperation(EXIT_ON_CLOSE);
} public void keyTyped(KeyEvent e) { //6
String c = e.paramString();
if (c == "o") {
System.out.println("快捷鍵 " + e.getKeyChar() + " 按下" );
txt1.setText("收到,呵呵");
}else{
System.out.println("普通鍵 " + e.getKeyChar() + " 按下" );
}
}
public void actionPerformed(ActionEvent event){
System.out.println("按鈕按下");
} public void keyPressed(KeyEvent e) {} //函數要和介面 KeyListener 中定義的一摸一樣 public void keyReleased(KeyEvent e) {} //函數要和介面 KeyListener 中定義的一摸一樣 public static void main(String[] args) {
new KeyEventDemo();
}
}
5. 編寫java鍵盤事件的程序
import java.awt.*;
import java.awt.event.*;
public class KeyEventDemo extends Frame implements KeyListener
{
Label l1 = new Label();
Panel p = new Panel();
public void keyPressed(KeyEvent e)
{
l1.setText("key down");
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){
l1.setText("key up");
}
public KeyEventDemo(String title){
super(title);
p.add(l1);
add(p);
this.addKeyListener(this);
setSize(200,100);
setVisible(true);
this.requestFocus(true);
}
public static void main(String[] agrs)
{
new KeyEventDemo("KeyEvent中的案件實例");
}}自己運行一下。
6. java鍵盤事件監聽
給你的畫布注冊事件監聽器:
this.canvas.addKeyListener(this);//這是要加入的,
this.addKeyListener(this);
原因是因為,當你點擊窗口內後,焦點就被 canvas 捕獲了,
如果 canvas 沒有注冊鍵盤事件監聽器,它當然不能對鍵盤的事件作出反應.
7. java中如何處理鍵盤事件
添加鍵盤監聽事件
如:
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();//得到鍵盤輸入的值
if(key==KeyEvent.VK_Q){//如果鍵盤輸入的是Q
System.exit(0);//強行關閉當前進程
}
8. Java 鍵盤事件
1. 因為ComonentEvent是InputEvent的super class, 它的sub class包括
ContainerEvent, FocusEvent, InputEvent, PaintEvent 以及 WindowEvent
所以你的例子里不能使用casting, 反過來才可以.
2. 至於為什麼這里的e是ComponentEvent, 從你給的code里邊沒辦法確認. 猜測的話,是你使用了ComponentListener, 如果你的程序只需要考慮接收鍵盤動作的話,建議改成KeyListener, 當然InputListener也是可以,不過通常implements的時候選用最底層的class比較好一點. 如果你同時需要考慮其它的Event,比如ContainerEvent, 那沒有捷徑,你需要兩個相對應各自sub class的Listener.
3.每次按下鍵盤程序執行兩次, 這個是因為KeyEvent包含以下三種.
KEY_PRESSED, KEY_RELEASED 和 KEY_TYPED
對應三個在Implement KeyEvent時必須的方法
public void keyTyped(KeyEvent e) { }
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) {
而你每一次敲一次鍵盤, Listener會被觸發至少兩次,由於key pressed和key released. 如果說這個鍵不是action key(可以用isActionKey()判斷),比如abcd1234一類的可以被顯示的,key typed也會觸發Listener.
所以說,如果你的程序執行位置選擇在每一次Listener被觸發時,且沒有經過任何判斷,那當然就會執行2-3次了 (你的例子中選擇的鍵是左方向鍵,屬於action key所以是2次).
4.如果想要按一次鍵盤只執行一次的話,有以下幾種辦法.
a. 自己做一個class, implement KeyListener, 然後把這個Listener添加到component上.然後把你的判斷以及要運行的代碼放在keyPressed()或者keyReleased()下邊. 這種方法可以讓程序可讀性增加,並且這也是本來設計這三個methods的本意,非常推薦.
b. 比較 e.getID() == KeyEvent.KEY_PRESSED (或者KEY_RELEASE, KEY_TYPED, 根據需要選擇). 這種方法雖然簡單易行,也比較符合你提供的例子(用一個自己的method去處理所有的AWTEvent) 但是在有時間的情況下比較不推薦,第一種方法才是正選.
c. 檢查e.paramString() 里邊的內容, 這個字元串開頭就是當前Event的名字(KEY_PRESSED, KEY_RELEASED 或者 KEY_TYPED). 但是一般paramString()都是debug用,只是檢查Event類型用getID就可以了,非常不推薦用.
由於提供的信息有限,所以產生ClassCastException的詳細原因沒辦法給你仔細分析,不過還是希望能幫到你.
9. JAVA 鍵盤事件觸發問題
你沒有API嗎?下面是java API對KeyEvent的解釋: getKeyChar 方法總是返回有效的 Unicode 字元或 CHAR_UNDEFINED。KEY_TYPED 事件報告字元輸入:KEY_PRESSED 和 KEY_RELEASED 事件不必與字元輸入關聯。因此, 可以保證 getKeyChar 方法的結果只對 KEY_TYPED 事件有意義。 對於按下鍵和釋放鍵事件,getKeyCode 方法返回該事件的 keyCode。對於鍵入鍵事件,getKeyCode 方法總是返回 VK_UNDEFINED。 「按下鍵」和「釋放鍵」事件 是低級別事件,依賴於平台和鍵盤布局。只要按下或釋放鍵就生成這些事件,它們是發現不生成字元輸入的鍵(如動作鍵、修改鍵等等)的惟一方式。通過 getKeyCode 方法可指出按下或釋放的鍵,該方法返回一個虛擬鍵碼。 虛擬鍵碼 用於報告按下了鍵盤上的哪個鍵,而不是一次或多次鍵擊組合生成的字元(如 "A" 是由 shift + "a" 生成的)。 例如,按下 Shift 鍵會生成 keyCode 為 VK_SHIFT 的 KEY_PRESSED 事件,而按下 'a' 鍵將生成 keyCode 為 VK_A 的 KEY_PRESSED 事件。釋放 'a' 鍵後,會激發 keyCode 為 VK_A 的 KEY_RELEASED 事件。另外,還會生成一個 keyChar 值為 'A' 的 KEY_TYPED 事件。 按下和釋放鍵盤上的鍵會導致(依次)生成以下鍵事件: KEY_PRESSED KEY_TYPED(只在可生成有效 Unicode 字元時產生。) 但在某些情況下(例如,在激活自動重復或輸入方法時),該順序可能會有所不同(並且與平台有關)。
10. 寫一個JAVA監聽鍵盤事件的簡單示列
import java.awt.*;
import java.awt.event.*;
public class KeyTest extends Frame
{
public KeyTest()
{
//注冊鍵盤監聽
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent ke)
{
System.out.println("The char is:"+ke.getKeyChar());
}
}
);
//注冊窗口監聽
setSize(100,100);
setVisible(true);
}
public static void main(String[] args)
{
new KeyTest();
}
}
不知道這個行否?