1.下面的程序运行后界面如下图所示:
import java.awt.*;
class PressMe extends Frame
{ static TextField t=new TextField("您还没按我呢!",12);
static int i;
public static void main(String args[])
{PressMe f=new PressMe();
f.setLayout(new FlowLayout());
f.setTitle("Press Me");
Button b=new Button(" Press Me ");
f.add(t);
f.add(b);
f.resize(170,100);
f.show();
}}
程序没有实现事件处理,请添加适当的代码,使窗口能够累计点击按钮的次数,如下图是点击3次后的结果。
要求分别用三种方式实现事件处理:
1) 让PressMe类实现事件接口;
2) 另外加一个实现事件接口的类;
3) 只加入一个语句。
结果:
import java.awt.event.*;
import java.awt.*;
class PressMe extends Frame implements ActionListener
{ static TextField t=new TextField("您还没按我呢!",12);
static int i;
public static void main(String args[])
{PressMe f=new PressMe();
f.setLayout(new FlowLayout());
f.setTitle("Press Me");
Button b=new Button(" Press Me ");
b.addActionListener(f);
f.add(t);
f.add(b);
f.resize(170,100);
f.show();
}
@Override
public void actionPerformed(ActionEvent e) {
i++;
t.setText("您已经按了我"+i+"次啦!");
}}
2.编写一个“变脸”程序:将实验六第5题中的两个脸合到一个程序中,利用事件处理程序mouseUp()实现程序运行后出现一张笑脸,鼠标点击一次则变成哭脸,再点击一次又变成笑脸,依次轮换。
本代码使用的鼠标事件为MousePressed()
对于MouseListener中的三种鼠标事件解释如下:
mouseClicked、mousePressed、mouseReleased 的区别
① 假设鼠标一直停留在A点,往下按然后放开,此时触发的是 mouseClicked 事件
② 鼠标被按下,一直不松手,不论停留在原处还是移动,此时触发的是 mousePressed 事件
③ mouseReleased 最复杂,因为它必须发生在 mousePressed 和 mouseDragged 之后:
假设鼠标在A点被按下,然后一直不松开,然后移动到 B 点, 松开,此时触发的是 mouseReleased 事件,在 mouseReleased 事件之前,一定会有 mousePressed 和mouseDragged 事件
package javaExp6;
import java.awt.*;
import java.awt.event.*;
public class FaceChange extends Frame implements MouseListener{
static boolean b=true;
public void paint(Graphics g)
{
Font f = new Font("宋体",Font.BOLD,20);
g.setFont(f);
g.setColor(Color.blue);
g.drawOval(50,50,80,100);
//g.fillOval(70,80,14,7);
//g.fillOval(110,80,14,7);
if(b)//笑脸
{
//嘴
g.drawArc(70,110,40,20,180,180);
//左眼
g.drawArc(70,80,14,7,0,180);
//右眼
g.drawArc(110,80,14,7,0,180);
//文本
g.drawString("笑!",10,70);
}
else//哭脸
{ g.drawArc(70,110,40,20,0,180);
g.drawArc(70,80,14,7,180,180);
g.drawArc(110,80,14,7,180,180);
g.drawString("哭!",10,70);
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO 自动生成的方法存根
//b=!b;
//repaint();
}
@Override
public void mousePressed(MouseEvent e) {
b=!b;
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseExited(MouseEvent e) {
// TODO 自动生成的方法存根
}
public static void main(String[] args) {
FaceChange facea=new FaceChange();
facea.setTitle("FaceChangeTest");
facea.setSize(250,250);
facea.show();
facea.addMouseListener(facea);
}
}
运行结果:
|
|
3.开发一个加、减、乘、除四则运算器。用户界面如下图:
package javaExp6;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Calculator extends JFrame implements ActionListener{
//panel分割整个界面
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JPanel panel3=new JPanel();
JPanel panel4=new JPanel();
JButton plus=new JButton("+");
JButton minus=new JButton("-");
JButton multi=new JButton("*");
JButton divide=new JButton("/");
TextField OpNum1=new TextField();
TextField OpNum2=new TextField();
Label OpRes=new Label();
public Calculator() {
setLayout(new GridLayout(4,1));
add(panel1);
add(panel2);
add(panel3);
add(panel4);
panel1.setLayout(new GridLayout(1,1));
panel2.setLayout(new GridLayout(1,1));
panel3.setLayout(new GridLayout(1,4));
panel4.setLayout(new GridLayout(1,1));
panel3.add(plus);
panel3.add(minus);
panel3.add(multi);
panel3.add(divide);
panel1.add(OpNum1);
panel2.add(OpNum2);
panel4.add(OpRes);
plus.addActionListener(this);
minus.addActionListener(this);
multi.addActionListener(this);
divide.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
double num1=Double.parseDouble(OpNum1.getText());
double num2=Double.parseDouble(OpNum2.getText());
if(e.getSource()==plus)
{
//System.out.println("Plus Run");
double res=num1+num2;
OpRes.setText(String.valueOf(res));
}
else if(e.getSource()==minus)
{
double res=num1-num2;
OpRes.setText(String.valueOf(res));
}
else if(e.getSource()==multi)
{
//System.out.println("Multi Run");
double res=num1*num2;
OpRes.setText(String.valueOf(res));
}
else if(e.getSource()==divide)
{
double res=num1/num2;
OpRes.setText(String.valueOf(res));
}
}
public static void main(String[] args)
{
Calculator MyCal=new Calculator();
MyCal.setSize(300,200);
MyCal.setTitle("计算器");
MyCal.show();
}
}
运行图: