Java2程序设计基础第十四章课后习题

  1. 简述Graphics类的特征。
    Graphics类是java.awt包中一个特殊的抽象类,当要在屏幕上绘制图形、文本、图像时,并不需要直接使用new运算符来创建一个Graphics类的对象实例,而是可以直接使用,Graphics类所产生的对象就是被成为绘画环境的“绘图区域”。与一般类不同的是,被称为“绘图区域”的对象并不需要通过Graphics类的构造方法来创建,而是通过getGraphics()方法来取得。有了这个“绘图区域”后,便可以利用Graphics类所提供的各种各样的绘图方法来进行图形绘制,
  2. Java语言中提供的用于显示、更新和重画图形的方法有哪几个?
    图形显示:public void paint(Graphics g);
    更新图形:public void update(Graphics g);
    重画图形:public void repaint(); public void repaint(int x, int y, int width, int height);
  3. paint()方法什么情况发生时会自动被调用。
    (1)当新建窗口显示在显示器上或从隐藏变成显示时;
    (2)从缩小图标还原为正常显示之后;
    (3)正在改变窗口的大小时。
  4. 编写一个画图的程序,用户可以用单选按钮组或下拉列表框选择所要绘制的图形,如线、圆、椭圆、矩形等,选择后可以通过拖动鼠标的方式在屏幕上画出相应的图形。
import java.awt.*;
import java.awt.event.*;

public class exe14_4 extends Frame implements ItemListener, MouseMotionListener, MouseListener {
	
	static exe14_4 frm = new exe14_4();
	
	static Checkbox cb1 = new Checkbox("线");
	static Checkbox cb2 = new Checkbox("圆");
	static Checkbox cb3 = new Checkbox("椭圆");
	static Checkbox cb4 = new Checkbox("矩形");
	static Choice cho = new Choice();
	
	static final int LINE = 0;
	static final int CIRCLE = 1;
	static final int OVAL = 2;
	static final int RECT = 3;
	
	int px1, py1, px2, py2;
	static int status = 0, sharp = 0;
	int rpx1, rpy1, rpx2, rpy2;
	
	public static void main(String[] args) {
		CheckboxGroup grp = new CheckboxGroup();
		cb1.setCheckboxGroup(grp);
		cb2.setCheckboxGroup(grp);
		cb3.setCheckboxGroup(grp);
		cb4.setCheckboxGroup(grp);
		cb1.addItemListener(frm);
		cb2.addItemListener(frm);
		cb3.addItemListener(frm);
		cb4.addItemListener(frm);
		
		cho.add("线");
		cho.add("圆");
		cho.add("椭圆");
		cho.add("矩形");
		cho.addItemListener(new MyItemListener());
		
		frm.setTitle("exe14_4");
		frm.setLocation(200, 150);
		frm.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 10));
		frm.setSize(400, 300);
		frm.add(cb1);
		frm.add(cb2);
		frm.add(cb3);
		frm.add(cb4);
		frm.add(cho);
		
		frm.addMouseMotionListener(frm);
		frm.addMouseListener(frm);
		
		frm.setVisible(true);
	}
	
	public void itemStateChanged(ItemEvent e) {
		Checkbox cb = (Checkbox) e.getSource();
		if (cb == cb1) {
			sharp = LINE;
		} else if (cb == cb2) {
			sharp = CIRCLE;
		} else if (cb == cb3) {
			sharp = OVAL;
		} else if (cb == cb4) {
			sharp = RECT;
		}
	}
	
	public void mouseMoved(MouseEvent e) {
		px1 = e.getX();
		py1 = e.getY();
		status = 0;
	}
	
	public void mouseDragged(MouseEvent e) {
		Graphics g = getGraphics();
		g.setColor(Color.yellow);
		g.setXORMode(Color.black);
		if (status == 1) {
			switch (sharp) {
				case LINE:
					g.drawLine(px1, py1, e.getX(), e.getY());
					break;
				case CIRCLE:
					g.drawOval(px1, py1, px2, px2);
					break;
				case OVAL:
					g.drawOval(px1, py1, px2, py2);
					break;
				case RECT:
					g.drawRect(px1, py1, px2, py2);
					break;
			}
		} else {
			px1 = e.getX();
			py1 = e.getY();
			status = 1;
		}
		px2 = Math.abs(e.getX() - px1);
		py2 = Math.abs(e.getY() - py1);
		switch (sharp) {
			case LINE:
				g.drawLine(px1, py1, e.getX(), e.getY());
				break;
			case CIRCLE:
				g.drawOval(px1, py1, px2, px2);
				break;
			case OVAL:
				g.drawOval(px1, py1, px2, py2);
				break;
			case RECT:
				g.drawRect(px1, py1, px2, py2);
				break;
		}
		rpx1 = px1;
		rpy1 = py1;
		rpx2 = px2;
		rpy2 = py2;
	}
	
	public void mouseReleased(MouseEvent e) {
		Graphics g = getGraphics();
		g.setColor(Color.red);
		switch (sharp) {
			case LINE:
				g.drawLine(rpx1, rpy1, e.getX(), e.getY());
				break;
			case CIRCLE:
				g.drawOval(rpx1, rpy1, rpx2, rpx2);
				break;
			case OVAL:
				g.drawOval(rpx1, rpy1, rpx2, rpy2);
				break;
			case RECT:
				g.drawRect(rpx1, rpy1, rpx2, rpy2);
				break;
		}
	}
	
	public void mousePressed(MouseEvent e) {}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mouseClicked(MouseEvent e) {}
	
	static class MyItemListener implements ItemListener {
		public void itemStateChanged(ItemEvent e) {
			String clr = cho.getSelectedItem();
			if (clr == "线") {
				sharp = LINE;
			} else if (clr == "圆") {
				sharp = CIRCLE;
			} else if (clr == "椭圆") {
				sharp = OVAL;
			} else if (clr == "矩形") {
				sharp = RECT;
			}
		}
	}
}

注:练习均为博主自己编写,不是标准答案,可能存在问题,可以留言讨论。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值