Java练习:实验七(UI开发)

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();
	}
}

运行图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值