本文目錄一覽:
java怎麼給按鈕添加事件
類名後面添加一個actionListener 接口
解決方法:
(1)public void actionPerformed(ActionEvent e) {
}
這麼一個方法,然後再在構造方法裏面添加註冊事件,button.addActionListener(this);
(2) 在res/layout中的activity_main.xml添加一個按鈕,命名為button1。
(3)在MainActivity.Java中添加按鈕事件綁定:
(4) 重寫ButtonClickListener函數:
Java 添加按鈕點擊事件
xml文件代碼如下:
Button
android:id=”@+id/button1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Button1″ /
Button
android:id=”@+id/button2″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Button2″ /
四種方法分述如下:
匿名內部類:
public class TestButtonActivity extends Activity {
Button btn1, btn2;
Toast tst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast tst = Toast.makeText(TestButtonActivity.this, “111111111”, Toast.LENGTH_SHORT);
tst.show();
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast tst = Toast.makeText(TestButtonActivity.this, “222222222”, Toast.LENGTH_SHORT);
tst.show();
}
});
}
}
自定義單擊事件監聽類:
public class TestButtonActivity extends Activity {
Button btn1, btn2;
Toast tst;
class MyClickListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
tst = Toast.makeText(TestButtonActivity.this, “111111111”, Toast.LENGTH_SHORT);
tst.show();
break;
case R.id.button2:
tst = Toast.makeText(TestButtonActivity.this, “222222222”, Toast.LENGTH_SHORT);
tst.show();
break;
default:
break;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(new MyClickListener());
btn2.setOnClickListener(new MyClickListener());
}
}
Activity繼承View.OnClickListener,由Activity實現OnClick(View view)方法,在OnClick(View view)方法中用switch-case對不同id代表的button進行相應的處理
public class TestButtonActivity extends Activity implements OnClickListener {
Button btn1, btn2;
Toast tst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
tst = Toast.makeText(this, “111111111”, Toast.LENGTH_SHORT);
tst.show();
break;
case R.id.button2:
tst = Toast.makeText(this, “222222222”, Toast.LENGTH_SHORT);
tst.show();
break;
default:
break;
}
}
}
最後一種是我今天看到的一種寫法,在XML文件中逗顯示指定按鈕的onClick屬性,這樣點擊按鈕時會利用反射的方式調用對應Activity中的click()方法地
Button
android:id=”@+id/button1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:onClick=”onClick”
android:text=”Button1″ /
Button
android:id=”@+id/button2″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:onClick=”onClick”
android:text=”Button2″ /
這裡在輸完android:的時候按下 Alt+/ 會有 onClick 屬性的提示, 但輸入到 android:onClick=逗 的地方按下 Alt+/ 並沒有提示 onClick 選項,讓我突然覺得這裡好像有點問題。
public class TestButtonActivity extends Activity {
Button btn1, btn2;
Toast tst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
}
// 注意 這裡沒有 @Override 標籤
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
tst = Toast.makeText(this, “111111111”, Toast.LENGTH_SHORT);
tst.show();
break;
case R.id.button2:
tst = Toast.makeText(this, “222222222”, Toast.LENGTH_SHORT);
tst.show();
break;
default:
break;
}
}
}
這種寫法整個代碼中都不用聲明button就可以實現button的單擊事件。
java 按鈕事件怎麼弄
1、定義
2、增加監聽器,類implement ActionListener接口
3、監聽內容實現,在方法actionPerformd(ActionEvent e)中
使用e.getsouce==對應組件的名字,或者e.getCommand();具體查下API,或者使用eclipse等工具,就更方便了
private JButton button3 = new JButton(“保存”);
private JTextField jtf = new JTextField();
button3.addActionListener(this);
public void actionPerformed(Event e){
if(e.getSource()==button3){
System.out.println(jtf.getText());
}
}
Java給按鈕添加事件
贊一個, 提前學習, 做好預先 , 是個好習慣.
java圖形界面主要有AWT, SWING, SWT, JavaFx等技術
JButton (按鈕)是SWING裏面很常用的組件. 直接添加按鈕到窗口,並不會產生任何交互效果.
要想產生交互效果,就需要了解awt,swing的事件處理機制:
事件:用戶對組件的一個操作,稱之為一個事件;
事件源:發生事件的組件就是事件源;
事件處理器:負責處理事件的方法;
比如 點擊按鈕,彈出HelloWord,
那麼 事件是 點擊按鈕 ,事件源就是按鈕,事件處理器就會彈出對話框,顯示HelloWord.
常用的事件(Event) 有:
鼠標事件(MouseEvent: 鼠標按下,移入,移除,滾輪..)
鍵盤事件(KeyEvent: 鍵盤按下,釋放..)
動作事件( ActionEvent:當按鈕、菜單項被點擊,在JTextField中按Enter鍵時…觸發該事件。)
按鈕添加接收器, 不同的事件,接收器不同.
比如ActionEvent 那麼他的接收器是ActionListener
KeyEvent 那麼他的接收器就是KeyListener
基礎知識,大概就是這些.
所以想要JButton產生交互,你就需要給他添加事件處理器,當發生這些事件時,出發該處理器,進行處理.
寫2個例子,第一個簡單的:點擊按鈕,彈出Hello World
//導入3個圖形界面,常用的包
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) {//接受到事件後,進行下面的處理
System.out.println(“Hello World”);// 控制台打印輸出
JOptionPane.showMessageDialog(null, “Hello World”);// 彈出對話框,顯示Hello World
}
});
add(jbHello);//把按鈕添加到窗體
// 窗體屬性的設置
setLayout(new FlowLayout());// 窗體流式布局, 按添加順序從左到右排列組件
setSize(300, 200);// 寬300像素,高200
setLocationRelativeTo(null);// 窗體放在顯示器中間
setTitle(“HelloWord”);// 窗體的標題
setDefaultCloseOperation(EXIT_ON_CLOSE);// 點擊窗體右上角的關閉按鈕時,結束程序
setVisible(true);// 窗體可見
}
public static void main(String[] args) {
new ButtonDemo();
}
}
看明白了吧, addActionListener是關鍵
進階版 :加法計算器. 代碼稍微長一點,.但注釋很多
參考代碼如下
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//AddFrame繼承自JFrame類, 並且實現了ActionListener 接口
public class AddFrame extends JFrame implements ActionListener {
// 組件
JTextField jtf1, jtf2, jtf3;// 文本框,用於:顯示數字
JButton jbAdd;// 按鈕,用於:當點擊按鈕時,計算出加法的結果
JButton jbClear;// 按鈕, 用於,清空數字
public AddFrame() {// 構造方法
// 初始化組件
jtf1 = new JTextField(5);// 長度為5的文本框
JLabel jl = new JLabel(“+”);//文字標籤
jtf2 = new JTextField(5);
jtf3 = new JTextField(6);
jtf3.setEditable(false);
jbAdd = new JButton(“=”);
jbAdd.addActionListener(this);//因為本類已經實現了ActionListener接口,所以添加事件的接收器就是自己(this)
jbClear = new JButton(“清除”);
jbClear.addActionListener(this);
//把組件,添加到窗體
add(jtf1);
add(jl);
add(jtf2);
add(jbAdd);
add(jtf3);
add(jbClear);
// 窗體屬性的設置
setLayout(new FlowLayout());//窗體流式布局, 按添加順序從左到右排列組件
setSize(380, 100);// 寬380像素,高100
setLocationRelativeTo(null);// 窗體放在顯示器中間
setTitle(“加法計算器”);// 窗體的標題
setDefaultCloseOperation(EXIT_ON_CLOSE);// 點擊窗體右上角的關閉按鈕時,結束程序
setVisible(true);// 窗體可見
}
/*
* 實現ActionListener接口 就必須重寫actionPerformed方法
*/
@Override
public void actionPerformed(ActionEvent e) {// 當事件產生後,就會執行actionPerformed里的方法
JButton jbTemp= (JButton) e.getSource();//得到事件源
if(jbTemp==jbAdd) {//如果是從jbAdd產生的事件.那麼執行加法操作
//因為是簡單案例,就不判斷和處理,用戶亂輸入字母漢字等情況,導致的異常了
int x = Integer.parseInt(jtf1.getText());//從文本框1得到字符串,並轉化成數字
int y = Integer.parseInt(jtf2.getText());
jtf3.setText(x+y+””);//計算2個數的和,並顯示在文本框3上
}else if(jbTemp==jbClear) {//如果事件源是 jbClear,那麼清除文本框的文字
jtf1.setText(“”);
jtf2.setText(“”);
jtf3.setText(“”);
}
}
// main方法
public static void main(String[] args) {
new AddFrame();//創建一個AddFrame的實例
}
}
原創文章,作者:MCKNF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/331381.html