用Eclipse计算器(java)界面,按钮监听事件如何添加?请指教!

时间:2021-11-05 11:42:31
import java.awt.*;

public class Calculator {

/**
 * @param args
 */

public static void main(String args[]) {
Frame f = new Frame("计算器");
f.setSize(600, 380);

MenuBar mb = new MenuBar();
Menu m1 = new Menu("查看 V");
Menu m2 = new Menu("编辑 E");
Menu m3 = new Menu("帮助 H");
MenuItem m01 = new MenuItem("标准型");
MenuItem m02 = new MenuItem("科学型");
MenuItem m03 = new MenuItem("程序员");
MenuItem m04 = new MenuItem("统计信息");
MenuItem m05 = new MenuItem("历史记录");
MenuItem m06 = new MenuItem("数字分组");
MenuItem m011 = new MenuItem("复制");
MenuItem m012 = new MenuItem("粘贴");
MenuItem m021 = new MenuItem("查看帮助");
MenuItem m022 = new MenuItem("关于计算器");

CheckboxMenuItem m001 = new CheckboxMenuItem("基本");
m1.add(m01);
m1.add(m02);
m1.add(m03);
m1.add(m04);
m1.add(m05);
m1.add(m06);
m1.addSeparator();
m1.add(m001);
m2.add(m011);
CheckboxMenuItem m002 = new CheckboxMenuItem("历史记录");
m2.add(m012);
m2.addSeparator();
m2.add(m002);
m3.add(m021);
m3.addSeparator();
m3.add(m022);
mb.add(m1);
mb.add(m2);
mb.add(m3);

TextField tf = new TextField("0", 25);
Panel p = new Panel();
p.setLayout(new GridLayout(4, 5));
String[] button = { " MC ", " MR ", " MS ", " M+ ", " M- ", " ← ",
" CE ", " C ", " ± ", " √ ", " 7 ", " 8 ", " 9 ", " / ", " % ",
" 4 ", " 5 ", " 6 ", " * ", "1/χ" };
for (int i = 0; i < button.length; i++) {
Button bt = new Button(button[i]);
p.add(bt);
}

Panel p1 = new Panel();
p1.setLayout(new BorderLayout());
Button b1 = new Button(" = ");
p1.add(b1, "East");

Panel p2 = new Panel();
p2.setLayout(new GridLayout(2, 2));
String[] button1 = { "3", "-", ".", "+" };
for (int i = 0; i < button1.length; i++) {
Button ft = new Button(button1[i]);
p2.add(ft);

}

Panel p3 = new Panel();
p3.setLayout(new BorderLayout());

Button t3 = new Button("0");
p3.add(t3, "South");

Panel p4 = new Panel();
p4.setLayout(new GridLayout(1, 1));
Button t1 = new Button("    1   ");
Button t2 = new Button("    2   ");

p4.add(t1);
p4.add(t2);

p1.add(p3, "West");
p1.add(p2, "Center");
p3.add(p4, "Center");
f.add(p1, "South");
f.add(tf, "North");
f.add(p, "Center");
f.setMenuBar(mb);
f.pack();
f.setVisible(true);

}

}

如何添加按钮监听事件?请指教!!

5 个解决方案

#1


Button button = new Button("关闭");
button.addActionListener(new ActionListner(){(匿名内部类,创建一个事件监听类实现其中的actionPerformed方法)
     public void actionPerformed(ActionEvent e) {
         System.exit(0); //退出 
      }
})
希望可以帮到你!

#2


给我必须写全!

#3


引用 2 楼 沉默的拜金女的回复:
给我必须写全!

楼主这个语气好霸气啊

#4


引用 3 楼 qq_30461621的回复:
Quote: 引用 2 楼 沉默的拜金女的回复:
给我必须写全!

楼主这个语气好霸气啊

按照一楼的格式,直接在Button实例化后的一句,加上一楼贴出的代码,将里面的退出语句改成相应的事件响应程序代码。

#5



import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class TestFrame3 extends JFrame{
private static final  String [] b_text = {"1","2","3","4","5","6","7","8","9","0","+","-","*","/","=","C"};  
private JTextField jf = new JTextField(16);
public TestFrame3() {

add(jf);
for (int i = 0;i< b_text.length; i++) {
JButton j1= new JButton(b_text[i]);
j1.addActionListener(new BeginLisener4());
add(j1);
}

setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 200);
setVisible(true);
}

private class BeginLisener4 implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {

JButton b1 = (JButton) e.getSource();


if(b1.getText().equals("=")){
String sv = jf.getText();
if(sv.indexOf("+")!= -1){
jf.setText(getResult(sv,"\\+")+"");
}else if(sv.indexOf("-")!= -1){
jf.setText(getResult(sv,"\\-")+"");
}else if(sv.indexOf("*")!= -1){
jf.setText(getResult(sv,"\\*")+"");
}else if(sv.indexOf("/")!= -1){
jf.setText(getResult(sv,"\\/")+"");
}
return;
}

if(b1.getText().equals("C")){
jf.setText("");
return;
}
String v1 = jf.getText()+b1.getText();
jf.setText(v1);
}
private int getResult(String sv,String split){
String [] sArry = sv.split(split);
int t1 = Integer.parseInt(sArry[0]);
int t2 = Integer.parseInt(sArry[1]);
switch(split){
case "\\+":
return t1+t2;
case "\\-":
return t1-t2;
case "\\*":
return t1*t2;
case "\\/":
return t1/t2;

return -1;
}

}




public static void main(String[] args) {
new TestFrame3();
}
}

public class Test {
public static void main(String[] args) {
new TestFrame3();
}
}


之前写过的一个简单计算机,你看着完善自己的功能。都差不多。

#1


Button button = new Button("关闭");
button.addActionListener(new ActionListner(){(匿名内部类,创建一个事件监听类实现其中的actionPerformed方法)
     public void actionPerformed(ActionEvent e) {
         System.exit(0); //退出 
      }
})
希望可以帮到你!

#2


给我必须写全!

#3


引用 2 楼 沉默的拜金女的回复:
给我必须写全!

楼主这个语气好霸气啊

#4


引用 3 楼 qq_30461621的回复:
Quote: 引用 2 楼 沉默的拜金女的回复:
给我必须写全!

楼主这个语气好霸气啊

按照一楼的格式,直接在Button实例化后的一句,加上一楼贴出的代码,将里面的退出语句改成相应的事件响应程序代码。

#5



import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class TestFrame3 extends JFrame{
private static final  String [] b_text = {"1","2","3","4","5","6","7","8","9","0","+","-","*","/","=","C"};  
private JTextField jf = new JTextField(16);
public TestFrame3() {

add(jf);
for (int i = 0;i< b_text.length; i++) {
JButton j1= new JButton(b_text[i]);
j1.addActionListener(new BeginLisener4());
add(j1);
}

setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 200);
setVisible(true);
}

private class BeginLisener4 implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {

JButton b1 = (JButton) e.getSource();


if(b1.getText().equals("=")){
String sv = jf.getText();
if(sv.indexOf("+")!= -1){
jf.setText(getResult(sv,"\\+")+"");
}else if(sv.indexOf("-")!= -1){
jf.setText(getResult(sv,"\\-")+"");
}else if(sv.indexOf("*")!= -1){
jf.setText(getResult(sv,"\\*")+"");
}else if(sv.indexOf("/")!= -1){
jf.setText(getResult(sv,"\\/")+"");
}
return;
}

if(b1.getText().equals("C")){
jf.setText("");
return;
}
String v1 = jf.getText()+b1.getText();
jf.setText(v1);
}
private int getResult(String sv,String split){
String [] sArry = sv.split(split);
int t1 = Integer.parseInt(sArry[0]);
int t2 = Integer.parseInt(sArry[1]);
switch(split){
case "\\+":
return t1+t2;
case "\\-":
return t1-t2;
case "\\*":
return t1*t2;
case "\\/":
return t1/t2;

return -1;
}

}




public static void main(String[] args) {
new TestFrame3();
}
}

public class Test {
public static void main(String[] args) {
new TestFrame3();
}
}


之前写过的一个简单计算机,你看着完善自己的功能。都差不多。