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

mac2024-01-23  33

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