基本操作
在考生檔案夾中存有檔案名為Java_1.java和Java_1.html的檔案,Java_1.java是不完整的,請在注釋行“//Found”下一行語句的下劃線地方填入正确内容,然後删除下劃線,請勿删除注釋行或改動其他已有語句内容。存盤時檔案必須存放在考生檔案夾下,不得改變原有檔案的檔案名。
本題的要求是:
完善Java_1.java檔案,并進行調試(在指令行中使用appletviewer Java_1.html,或者使用內建開發環境)。
程式輸出如下:
//*********Found********
import java.__________________.*;
import java.awt.Graphics;
//*********Found********
public class Java_1 extends __________________ {
public void paint( Graphics g )
{
//*********Found********
g.__________________( "歡迎你來參加Java 語言考試!", 25, 25 );
}
}
本題考查的是Applet的使用。
涉及到對繼承知識點的考查。
在Java中,我們可以聲明一個類擴充(extends)另一個類,即繼承。繼承使得一個類能夠使用另一個類的屬性和方法,就象使用自己的屬性和方法一樣。例如本題要求填寫的是繼承Applet類,這是因為類Java_1需要使用Applet類的方法paint。
Applet程式如下:
//*********Found********
import java.applet.*;
import java.awt.Graphics;
//*********Found********
public class Java_1 extends Applet{
public void paint( Graphics g )
{
//*********Found********
g.drawString( "歡迎你來參加Java 語言考試!", 25, 25 );
}
}
簡單應用
在考生檔案夾中存有檔案名為Java_2.java和Java_2.html檔案,Java_2.java是不完整的是不完整的,請在注釋行"//Found"下一行語句的下劃線地方填入正确内容,然後删除下劃線,請勿删除注釋行或改動其他已有語句内容。
存盤時檔案必須存放在考生檔案夾下,不得改變原有檔案的檔案名。
本題的要求是:在Applet中顯示0至10的階乘。請完善Java_2.java檔案,并進行調試(在指令行中使用appletviewer Java_2.html,或者使用內建開發環境)。使運作結果為:
import java.awt.*;
import java.applet.*;
//*********Found********
public class Java_2 extends _______________________
{
TextArea outputArea;
public void init()
{
setLayout(new BorderLayout());
outputArea = new TextArea();
//*********Found********
____________________( outputArea );
// 計算0至10的階乘
for ( long i = 0; i <= 10; i++ )
//*********Found********
outputArea.append(i + "! = " + ______________ + "\n" );
}
// 用遞歸定義階乘方法
public long factorial( long number )
{
if ( number <= 1 ) // 基本情況
return 1;
else
//*********Found********
return number * factorial( ___________ - 1 );
}
}
本題考查的是Applet的編寫。
本題中的Applet程式必須是繼承了java.applet.Applet的類。
具體的程式如下:
import java.awt.*;
import java.applet.*;
//*********Found********
public class Java_2 extends Applet
{
TextArea outputArea;
public void init()
{
setLayout(new BorderLayout());
outputArea = new TextArea();
//*********Found********
add( outputArea );
// 計算0至10的階乘
for ( long i = 0; i <= 10; i++ )
//*********Found********
outputArea.append(i + "! = " +factorial(i)+ "\n" );
}
// 用遞歸定義階乘方法
public long factorial( long number )
{
if ( number <= 1 ) // 基本情況
return 1;
else
//*********Found********
return number * factorial(number- 1 );
}
}
綜合應用
在考生檔案夾中豐有檔案名為Java_3.java的檔案。
該程式運作後的結果如下圖所示:
該程式是不完整的,請在注釋行“//Found”下一行語句的下劃線地方填入正确内容,然後删除下劃線,請勿删除注釋行或改動其他已有語句内容。存盤時檔案必須存放在考生檔案夾下,不得改變原有檔案的檔案名。
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;
public class Java_3
{
public static void main(String[] args)
{
FontFrame frame = new FontFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
//*********Found********
class FontFrame _________ JFrame
{
public FontFrame()
{
setTitle("沁園春.雪");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
FontPanel panel = new FontPanel();
Container contentPane = getContentPane();
//*********Found********
contentPane.add(___________________);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}
//*********Found********
class FontPanel extends ________
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
String message = "數風流人物,還看今朝!";
Font f = new Font("隸書", Font.BOLD, 24);
g2.setFont(f);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = f.getStringBounds(message, context);
double x = (getWidth() - bounds.getWidth()) / 2;
double y = (getHeight() - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
g2.setPaint(Color.RED);
//*********Found********
g2._________________(message, (int)x, (int)(baseY));
}
}
本題考查的是Swing構件和AWT中的事件處理。
1)類FontFrame的構造方法中有代碼:“setTitle(“沁園春.雪”);“用于設定應用程式窗體的标題"沁園春.雪”,故FontFrame應該是JFrame的子類。是以第一空"class FontFrame ______ JFrame"應填"extends”。
2)類FontFrame的構造方法中有代碼"FontPanel panel = new FontPanel();",是以第二空"contentPane.add()“應填"panel”。
3)類FontPanel的方法paintComponent(Graphics g)中的語句super.paintComponent(g);說明FontPanel覆寫了其父類的相應方法,而方法paintComponent(Graphics g)是抽象類javax.swing.JComponent中定義的,故FontPanel應是JComponent的子類。是以第三空"class FontPanel extends _____“應填"JPanel”。
4)FontPanel的paintComponent方法中的message存儲了程式中要顯示的字元串,且Graphics的drawString方法用來"輸出"字元串,故第四空"g2.(message,
(int)x, (int)(baseY));“應填"drawString”。
具體程式如下:
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;
public class Java_3
{
public static void main(String[] args)
{
FontFrame frame = new FontFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
//*********Found********
class FontFrame extends JFrame
{
public FontFrame()
{
setTitle("沁園春.雪");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
FontPanel panel = new FontPanel();
Container contentPane = getContentPane();
//*********Found********
contentPane.add(panel);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}
//*********Found********
class FontPanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
String message = "數風流人物,還看今朝!";
Font f = new Font("隸書", Font.BOLD, 24);
g2.setFont(f);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = f.getStringBounds(message, context);
double x = (getWidth() - bounds.getWidth()) / 2;
double y = (getHeight() - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
g2.setPaint(Color.RED);
//*********Found********
g2.drawString(message, (int)x, (int)(baseY));
}
}