第七章 图形,图像与多媒体
7.1 绘图基础
识记:Graphics类的基本功能,坐标系统 领会:利用Graphics2D类设置绘图状态属性 简单应用:着色和设置字体
7.一般的绘图程序要定义一个JPanel子类。在JPanel子类中还要重定义一个方法,在这个方法中调用绘图方法,绘制各种图形。要重定义的方法是( ) A.paint() B.paintComponent() C.repaint() D.update()
1101-7.Java语言规定,程序绘图区域的坐标原点位于整个区域的( ) A.左上角B.右上角C.左下角 D.右下角
1001-17.要在JComponent 子类的组件中绘图,应重写__________方法。paintComponet() 1404-17.某应用程序定义的类C17是JPanel的子类,在类C17的对象中需要绘图,则在类 C17中应重写的方法是 ______。paintComponet()
1010-17.在某个组件中绘图,一般应该为这个组件所属的子类重写______方法。paint() 7.以下所述内容全部是字型要素的是( )
A.字体、字形和大小 B.字体、风格和字号 C.字形、风格和字号 D.字形、颜色和字号
7.以下不属于文字字型要素的是 ( A ) ...A.颜色 B.字体C.风格 D.字号
1404-7.以下术语中,属于文字字型风格属性的是
A.颜色 B.宋体C.斜体 D.字号
17.在Java语言中,用类Font对象设置字型。如果要设置的字型是:细明体、正常风格(Font.PLAIN),12磅字号,构造这样要求的Font对象fnA的代码是_________。Font
fnA=new Font(“细明体”,Font.PLAIN.12)
17.某个绘图方法设置成“异或模式”绘图,并用黄色作为异或模式设定的绘图颜色。如果当时背景色为红色,并用红色绘制线段,则线段的实际颜色是_________。(P140)黄色 1101-17. Java语言的绘图模式有两种,它们是正常模式和_________ 7.设置异或绘图模式的方法是
A.setXORMode() B.setPaintMode() C.XORMode()
D.PaintMode()
7.2 绘图
简单应用:利用Graphics2D类对象绘制几何图形、绘制二次、三次曲线
综合应用:显示文字,绘制基本几何图形
24.请写出一条语句,能够绘制一条从点(20,30)开始,长为100像素的水平线段。设调用的对象是类型为Graphics的g。
(P140)g.drawLine(20,30,120,30);或g.drawLine(120,30,20,30);
25.请写出使用Graphics2D类声明并创建一个左上角为(20,30)、边长为50的正方形对象square的语句。
1404-24.已知Graphics对象g,获得Graphics2D对象g2d,然后,用圆角长方形类创建对象 circle,该对象的左上角坐标是(30,40),半径是50。请写出实现以上要求的Java代 码。
100-24.设已经有Graphics2D对象g2d, 请用Java语句绘制一个矩形rect,其左上角坐标是(20,30),宽是120,高是30。
Rectangle2D rect=new Rectangle2D.Double(20,30,120,30)
G2d.draw(rect);
1201-7.设已经有Graphics2D对象g2d,RoundRectangle2D对象rRect,绘制对象rRect的代码是( )
A.g2d.draw(rRect) B.g2d.drawRoundRect(rRect) C.rRect.draw() D.rRect.drawRoundRect() 1201-17.在异或模式下绘图时,实际绘制的颜色是由当前正要绘制的颜色、原先绘制的颜色,以及 异或模式设定的颜色 作特定的运算确定的。
24.要用Graphics2D类的方法画一个图形,首先要把参数对象g强制转换成Graphics2D对象;然后,用图形类提供的静态方法Double()创建一个图形对象;最后,以图形对象为参数调用Graphics2D对象的draw()方法绘制这个图形。请写出用这样的方法绘制一条线段的程序段,线段的两个端点分别是(10.0,10.0)和(30.0,30.0)。
Graphics2D g2d=( Graphics2D) g;
Line2D line=new Line2D.Double(10,20,30,40); G2d.draw(line)
7.设已经有Graphics2D对象g2d,Rectangle2D对象r,绘制对象r的代码是( ) A.g2d.draw(r)B.g2d.drawRect(r)C.r.draw() D.r.drawRect()
1110-7.设已经有Graphics2D对象g2d,Line2D对象line,绘制对象line的代码是( ) A.g2d.draw(1ine) B.g2d.drawLine(1ine) C.1ine.draw()D.1ine.drawLine() 1110-17.在Graphics类中,用于在指定的位置显示字符串的方法是 _____darwString()__ 。?
7.3 图像处理基础
简单应用:显示图像和图像缓冲
1210-17. Java语言的图像处理功能被封装在___ Image _______类中。
30.这是一个播放幻灯片的小应用程序中的paint()方法。设幻灯片已由小应用程序的init()方法装入内存,并存放于myImage数组中,幻灯片的张数放于变量num中,paint()方法要播放的幻灯片号是int currentImage = 0; final int num = 30;
Image [ ] myImage = new _________ [num]; Image ??
public void paint(Graphics g) {
if ((mylmage[currentImage]) != null)
g. _________ (myImage[currentImage], 10, 10, drawImage myImage [currentImage].getWidth(this),
myImage [currentImage].getHeight(this), this); }
1001-30.以下是一个用鼠标自由作画的小应用程序。最简单的方法是根据鼠标所在位置画点,跟随鼠标的移动,不断画圆点,就能实现用鼠标作画。 import java.awt.*; import java.awt.event.*;
public class Test30 extends java.applet.Applet implements MouseMotionListener { Color color;int lineSize=2: int x=-1,y=-l; public void init(){
setLocation(30,20); setSize(300,300);
setBackground(Color.green);addMouseMotionListener(this); }
public void paint(Graphics g){ if(x!=-1&&y!=-1) {
g.setColor(color);g.fillOval(x,y,1ineSize,lineSize); } }
public void mouseMoved(MouseEvent e){} public void mouseDragged(MouseEvent e){
x=e.getX();y=e.getY();___ repaint()______; }
public void ______ update()__ (Graphics g){ paint(g);} ; }
1010-30.某小应用程序的界面有两个按钮,点击“画圆”按钮,程序在窗口画一个圆,点击“画矩形”按钮,程序在窗口画一个矩形。 import java.applet.*; import java.awt.*; import java.awt.event.*;import javax.swing.*;
public class Classl extends Applet implements ActionListener { boolean c = false; int r = 50,a = 50, b = 50; JButton bl, b2; public void init(){
setSize(200, 200); setBackground(Color.blue);
b1 = new JButton(\画 圆\画矩形\ b1.addActionListener(this); b2.addActionListener(this); add(b1); add(b2); setVisible(true); }
public void (Graphics g){ g.clearRect(70, 100, 130, 200); g.setColor(Color. red);
if(c) g.drawRoundRect(70, 100, r, r, r, r); else g.drawRect(70, 100, a, b); }
public void update(Graphics g){ paint(g); } public void actionPerformed(ActionEvent e){ if(e.getSource()==b1) { c = true; } else if(e.getSource()==b2){ c = false; } ; }
}
34.阅读下列程序,请写出该程序的功能。
import java.applet.*; import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Test34 extends Applet implements ActionListener { JTextField text;int r; JPanel panel; public void paint(Graphics g){
Graphics gc = panel.getGraphics();
gc.clearRect(0,0, panel.getWidth(), panel.getHeight()); gc.setColor(Color.red); gc.fillOval(10, 10, r, r);
}
public void init() {
text = new JTextField(10); panel = new JPanel(); setSize(200, 100); setLayout(new GridLayout(2,1)); add(text); add(panel); text.addActionListener(this); } 以文本框输入的public void actionPerformed(ActionEvent e) { 数字为半径,(1if (e.getSource() == text) { 分)以(10,10)r = Integer.parseInt(text.getText()); 为左上角,(1分)repaint(); 填充一个红色(1} 分)的圆。(1分) } }
1001-36.阅读下列程序,请写出该程序的功能。 import java.applet.*; import java.awt.*;
public class Test36 extends java.applet.Applet implements Runnable{
Thread myThread = null; double seta=0.0; public void start() { setSize(500,400);
if(myThread=null){ myThread=new Thread(this); myThread.start();} }
public void run() {
while(myThread!=null) { try {myThread.sleep(40); } catch(InterruptedException e){}
seta+=3.0; if(seta>=360)seta=0; repaint(); } }
public void paint(Graphics g) {
final double pi=3.14159; final double r = 100.0; int x0=250+(int)(r*Math.cos(3.1415926/180.0*seta)); int y0=200+(int)(r*Math.sin(3.1415926/180.0*seta)); g.setColor(Color.red); g.drawOval(x0,y0,10,10); }