重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
創(chuàng)建一個(gè)關(guān)于鍵盤(pán)事件的程序。該程序?qū)崿F(xiàn)了當(dāng)用戶按下鍵盤(pán)時(shí),程序中的一個(gè)面板中將顯示用戶的鍵盤(pán)輸入。為了實(shí)現(xiàn)對(duì)鍵盤(pán)事件進(jìn)行處理,容器類必須實(shí)現(xiàn)接口KeyListener.該接口定義了3個(gè)方法KeyPressed(KeyEvebt e)、KeyReleased(Key-Event e)、KeyTyped(KeyEvent e)。其中,當(dāng)按下一個(gè)鍵時(shí),調(diào)用KeyTyped方法;釋放一個(gè)鍵時(shí),調(diào)用KeyReleased方法;如果一個(gè)字符鍵被按下,那么會(huì)調(diào)用KeyTyped方法。因此,當(dāng)按下一個(gè)鍵時(shí),通常會(huì)產(chǎn)生兩到三個(gè)事件。實(shí)驗(yàn)KeyType方法,以顯示用戶輸入的字符。 (1)創(chuàng)建一個(gè)名為KeyEventDemo的java文件。 (2)在該文件中創(chuàng)建KeyEventDemo類,該類繼承了JFrame,并實(shí)現(xiàn)KeyListener接口。 (3)在KeyEventDemo類中實(shí)現(xiàn)在KeyPressed、KeyReleased和KeyType方法。 (4)在KeyEventDemo類中添加String類型變量。該變量用于保存用戶輸入的字符。 (5)在KeyType方法中調(diào)用KeyEvent的getKeyChar()方法,獲取用戶輸入的字符,并保存到String類型變量中。最后調(diào)用repaint方法更新顯示用戶輸入的字符串。 (6)為KeyEventDemo類添加paint方法,此方法負(fù)責(zé)顯示用戶輸入的字符。 (7)用戶也可以在KeyPressed和KeyReleased方法中間調(diào)用getKeyCode方法,以獲取特殊的按鍵。比如方向鍵和退格鍵。
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),勃利網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:勃利等地區(qū)。勃利做網(wǎng)站價(jià)格咨詢:18982081108
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test extends JFrame implements KeyListener {
private static final long serialVersionUID = 1L;
private JLabel jl = new JLabel("java程序設(shè)計(jì)");
private static final int STEP = 10;//設(shè)置移動(dòng)的幅度
public static void main(String[] args) {
new Test().launchFrame();
}
public void launchFrame() {
this.add(jl);
this.addKeyListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(300,200,600,400);
this.setVisible(true);
}
public void keyPressed(KeyEvent e) {//按一個(gè)鍵,可以連續(xù)按
key(e);
}
public void keyReleased(KeyEvent e) {//按下放開(kāi)一個(gè)鍵
}
public void keyTyped(KeyEvent e) {//擊一下鍵
}
public void key(KeyEvent e) {//可以將這個(gè)函數(shù)添加到上面的三個(gè)方法里
switch(e.getKeyCode()) {
case KeyEvent.VK_LEFT ://左箭頭
jl.setLocation(jl.getLocation().x - STEP, jl.getLocation().y);
break;
case KeyEvent.VK_RIGHT ://右箭頭
jl.setLocation(jl.getLocation().x + STEP, jl.getLocation().y);
break;
case KeyEvent.VK_UP ://上箭頭
jl.setLocation(jl.getLocation().x, jl.getLocation().y - STEP);
break;
case KeyEvent.VK_DOWN ://下箭頭
jl.setLocation(jl.getLocation().x, jl.getLocation().y + STEP);
break;
}
}
}
另外提醒一下樓上的,應(yīng)該給JFrame添加KeyListener
贊一個(gè), 提前學(xué)習(xí), 做好預(yù)先 , 是個(gè)好習(xí)慣.
java圖形界面主要有AWT, SWING, SWT, JavaFx等技術(shù)
JButton ?(按鈕)是SWING里面很常用的組件. 直接添加按鈕到窗口,并不會(huì)產(chǎn)生任何交互效果.
要想產(chǎn)生交互效果,就需要了解awt,swing的事件處理機(jī)制:
事件:用戶對(duì)組件的一個(gè)操作,稱之為一個(gè)事件;
事件源:發(fā)生事件的組件就是事件源;
事件處理器:負(fù)責(zé)處理事件的方法;
比如 點(diǎn)擊按鈕,彈出HelloWord,
那么 事件是 點(diǎn)擊按鈕 ,事件源就是按鈕,事件處理器就會(huì)彈出對(duì)話框,顯示HelloWord.
常用的事件(Event) 有:
鼠標(biāo)事件(MouseEvent:?鼠標(biāo)按下,移入,移除,滾輪..)
鍵盤(pán)事件(KeyEvent:?鍵盤(pán)按下,釋放..)
動(dòng)作事件(?ActionEvent:當(dāng)按鈕、菜單項(xiàng)被點(diǎn)擊,在JTextField中按Enter鍵時(shí)...觸發(fā)該事件。)
按鈕添加接收器, 不同的事件,接收器不同.
比如ActionEvent 那么他的接收器是ActionListener
KeyEvent 那么他的接收器就是KeyListener
基礎(chǔ)知識(shí),大概就是這些.
所以想要JButton產(chǎn)生交互,你就需要給他添加事件處理器,當(dāng)發(fā)生這些事件時(shí),出發(fā)該處理器,進(jìn)行處理.
寫(xiě)2個(gè)例子,第一個(gè)簡(jiǎn)單的:點(diǎn)擊按鈕,彈出Hello World
//導(dǎo)入3個(gè)圖形界面,常用的包
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
public?class?ButtonDemo?extends?JFrame?{
public?ButtonDemo()?{
JButton?jbHello?=?new?JButton("Hello");//按鈕
jbHello.addActionListener(new?ActionListener()?{//給按鈕添加事件接收器
@Override
public?void?actionPerformed(ActionEvent?e)?{//接受到事件后,進(jìn)行下面的處理
System.out.println("Hello?World");//?控制臺(tái)打印輸出
JOptionPane.showMessageDialog(null,?"Hello?World");//?彈出對(duì)話框,顯示Hello?World
}
});
add(jbHello);//把按鈕添加到窗體
//?窗體屬性的設(shè)置
setLayout(new?FlowLayout());//?窗體流式布局,?按添加順序從左到右排列組件
setSize(300,?200);//?寬300像素,高200
setLocationRelativeTo(null);//?窗體放在顯示器中間
setTitle("HelloWord");//?窗體的標(biāo)題
setDefaultCloseOperation(EXIT_ON_CLOSE);//?點(diǎn)擊窗體右上角的關(guān)閉按鈕時(shí),結(jié)束程序
setVisible(true);//?窗體可見(jiàn)
}
public?static?void?main(String[]?args)?{
new?ButtonDemo();
}
}
看明白了吧, addActionListener是關(guān)鍵
進(jìn)階版 :加法計(jì)算器.? 代碼稍微長(zhǎng)一點(diǎn),.但注釋很多
參考代碼如下
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
//AddFrame繼承自JFrame類,?并且實(shí)現(xiàn)了ActionListener?接口
public?class?AddFrame?extends?JFrame?implements?ActionListener?{
//?組件
JTextField?jtf1,?jtf2,?jtf3;//?文本框,用于:顯示數(shù)字
JButton?jbAdd;//?按鈕,用于:當(dāng)點(diǎn)擊按鈕時(shí),計(jì)算出加法的結(jié)果
JButton?jbClear;//?按鈕,?用于,清空數(shù)字
public?AddFrame()?{//?構(gòu)造方法
//?初始化組件
jtf1?=?new?JTextField(5);//?長(zhǎng)度為5的文本框
JLabel?jl?=?new?JLabel("+");//文字標(biāo)簽
jtf2?=?new?JTextField(5);
jtf3?=?new?JTextField(6);
jtf3.setEditable(false);
jbAdd?=?new?JButton("=");
jbAdd.addActionListener(this);//因?yàn)楸绢愐呀?jīng)實(shí)現(xiàn)了ActionListener接口,所以添加事件的接收器就是自己(this)
jbClear?=?new?JButton("清除");
jbClear.addActionListener(this);
//把組件,添加到窗體
add(jtf1);
add(jl);
add(jtf2);
add(jbAdd);
add(jtf3);
add(jbClear);
//?窗體屬性的設(shè)置
setLayout(new?FlowLayout());//窗體流式布局,?按添加順序從左到右排列組件
setSize(380,?100);//?寬380像素,高100
setLocationRelativeTo(null);//?窗體放在顯示器中間
setTitle("加法計(jì)算器");//?窗體的標(biāo)題
setDefaultCloseOperation(EXIT_ON_CLOSE);//?點(diǎn)擊窗體右上角的關(guān)閉按鈕時(shí),結(jié)束程序
setVisible(true);//?窗體可見(jiàn)
}
/*
*??實(shí)現(xiàn)ActionListener接口?就必須重寫(xiě)actionPerformed方法
*/
@Override
public?void?actionPerformed(ActionEvent?e)?{//?當(dāng)事件產(chǎn)生后,就會(huì)執(zhí)行actionPerformed里的方法
JButton?jbTemp=?(JButton)?e.getSource();//得到事件源
if(jbTemp==jbAdd)?{//如果是從jbAdd產(chǎn)生的事件.那么執(zhí)行加法操作
//因?yàn)槭呛?jiǎn)單案例,就不判斷和處理,用戶亂輸入字母漢字等情況,導(dǎo)致的異常了
int?x?=?Integer.parseInt(jtf1.getText());//從文本框1得到字符串,并轉(zhuǎn)化成數(shù)字
int?y?=?Integer.parseInt(jtf2.getText());
jtf3.setText(x+y+"");//計(jì)算2個(gè)數(shù)的和,并顯示在文本框3上
}else?if(jbTemp==jbClear)?{//如果事件源是?jbClear,那么清除文本框的文字
jtf1.setText("");
jtf2.setText("");
jtf3.setText("");
}
}
//?main方法
public?static?void?main(String[]?args)?{
new?AddFrame();//創(chuàng)建一個(gè)AddFrame的實(shí)例
}
}
代碼我是懶得寫(xiě)!提示關(guān)鍵詞 addMouseListener
void mousePressed(MouseEvent e) 鼠標(biāo)按鍵在組件上按下時(shí)調(diào)用。
void mouseReleased(MouseEvent e) 鼠標(biāo)按鈕在組件上釋放時(shí)調(diào)用。
你寫(xiě)錯(cuò)事件了,是實(shí)現(xiàn)keylistener事件不是繼承那個(gè)adapter類
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Test
{
JTextFieldtext1;
JTextFieldtext2;
public Test()
{
JFrame frame = new JFrame();
Container contain = frame.getContentPane();
text1 = new JTextField(10);
text2 = new JTextField(10);
MyKeyEvent e = new MyKeyEvent();
text1.addKeyListener(e);
contain.setLayout(new FlowLayout());
contain.add(text1);
contain.add(text2);
text1.setFocusable(true);
frame.pack();
frame.setVisible(true);
}
class MyKeyEvent implements KeyListener
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
System.out.println(e.getKeyChar());
}
}
public static void main(String args[])
{
Test test = new Test();
}
}
KeyListener
java.awt.event
接口 KeyListener
所有超級(jí)接口:
EventListener
所有已知實(shí)現(xiàn)類:
AWTEventMulticaster, BasicComboBoxUI.KeyHandler, BasicComboPopup.InvocationKeyHandler, BasicTableUI.KeyHandler, BasicTreeUI.KeyHandler, KeyAdapter
public interface KeyListener
extends EventListener
用于接收鍵盤(pán)事件(擊鍵)的偵聽(tīng)器接口。旨在處理鍵盤(pán)事件的類要么實(shí)現(xiàn)此接口(及其包含的所有方法),要么擴(kuò)展抽象 KeyAdapter 類(僅重寫(xiě)有用的方法)。
然后使用組件的 addKeyListener 方法將從該類所創(chuàng)建的偵聽(tīng)器對(duì)象向該組件注冊(cè)。按下、釋放或鍵入鍵時(shí)生成鍵盤(pán)事件。然后調(diào)用偵聽(tīng)器對(duì)象中的相關(guān)方法并將該 KeyEvent 傳遞給它。
從以下版本開(kāi)始:
1.1
另請(qǐng)參見(jiàn):
KeyAdapter, KeyEvent, Tutorial: Writing a Key Listener
方法摘要
void keyPressed(KeyEvent e)
按下某個(gè)鍵時(shí)調(diào)用此方法。
void keyReleased(KeyEvent e)
釋放某個(gè)鍵時(shí)調(diào)用此方法。
void keyTyped(KeyEvent e)
鍵入某個(gè)鍵時(shí)調(diào)用此方法。
具體哪個(gè)鍵...
用參數(shù)KeyEvent可以判斷是按的哪個(gè)鍵