在下是一名刚刚起步的菜鸟,今天看书遇到如下问题,三个类都是书上的,图片路径没有问题..运行MyApplet类后,内容面板无法显示图片,反复检测 N 次后,思考 N 次后还是不得其解。听导师说,本论坛卧虎藏龙,高手如云,望赐教。
package chapter3.section1;
import java.awt.*;
import javax.swing.*;public class MyApplet extends JApplet {
protected Container contentPane;
protected JLabel pLabel; //声明标签对象,用来显示提示文字
protected JTextField tf; //声明文本框对象,用来接受输入 public void init() {
contentPane = getContentPane();   
contentPane.setLayout(new BorderLayout());
// 1.北方:放置提示标签和文本框
JPanel ptf = new JPanel(new GridLayout(1, 2));
pLabel = new JLabel("请输入整数", JLabel.RIGHT);
ptf.add(pLabel);
tf = new JTextField(12);
ptf.add(tf);
contentPane.add(ptf, BorderLayout.NORTH);
setSize(750, 320);
}
}
package chapter3.section5;import java.awt.*;
import javax.swing.*;
import java.util.*;public class MyImagePanel extends JPanel { // 继承面板类
public Image pic; // 图片对象
private int row, column; // 分割为row行,column列
public int delete; // 没有显示的分割小图的编号,声明为public,在类外部能引用 // 构造方法:指定图片分割的行,列数,得到图片对象
public MyImagePanel(int row, int column) {
this.row = row;  // 初始化图像分割的行数
this.column = column;  // 初始化图像分割的列数
Toolkit tlkt = getToolkit();  // 得到工具集对象,用于获取图片
pic = tlkt.getImage("pic/section2/8.jpg");  // 得到图片对象
setBorder(BorderFactory
.createTitledBorder("考眼力,找没显示的小图的编号。编号从0开始,自左向右,自上而下依次增加"));
setSize(750, 320);
} public void paint(Graphics g) {
super.paint(g);
int w = pic.getWidth(this); // 原图的宽
int h = pic.getHeight(this); // 原图的高
int dx = w / row, dy = h / column; // 每块小图的宽和高
ArrayList smallImages = new ArrayList(); // 保存小图的编号
for (int k = 0; k < row * column; k++) {
smallImages.add(new Integer(k));
}
myGraphics(g, pic, row, column, smallImages, 10, 20); // 调用自定义分块显示方法
Collections.shuffle(smallImages); // 打断
Object remove = smallImages.remove(0); // 删除索引为0的小图
delete = (Integer) remove; // 得到小图的编号
myGraphics(g, pic, row, column, smallImages, (w + 20), 20); // 调用自定义分块显示方法
} private void myGraphics(Graphics gg, Image pic, int row, int column,
ArrayList list, int x0, int y0) {
int w = pic.getWidth(this), h = pic.getHeight(this); // 原图的宽和高
int dx = w / column, dy = h / row; //每块小图的宽和高
int x1,y1; //小图显示的左上角坐标
int x,y; //原图上截取的小图的坐标
int k; //小图的编号
for(int i=0;i<list.size();i++){
k = (Integer)list.get(i);  //得到索引i的小图编号
x = (k%column)*dx; //截取原图时X轴的起始坐标
y = (k/column)*dy; //截取原图时Y轴的起始坐标
x1 = x0 + (i%column)*dx; //显示时图片X轴的起始坐标
y1 = y0 + (i/column)*dy; //显示时图片Y轴的起始坐标
gg.drawImage(pic, x1, y1, x1+dx-1, y1+dy-1, x, y, x+dx-1, y+dy-1, this);
}
} public static void main(String[] args) {
JFrame frame = new JFrame("显示图片");   
Container contentPane = frame.getContentPane();
MyImagePanel mypanel = new MyImagePanel(3,4);   //分割为3*4块小图显示
contentPane.add(mypanel,BorderLayout.CENTER);
frame.setSize(750,320);
frame.setVisible(true);
}
}package chapter3.section5;import java.awt.BorderLayout;
import java.awt.event.*;import chapter3.section1.MyApplet;   //导入MyAppletpublic class MyApplet2 extends MyApplet implements ActionListener{
MyImagePanel centerPanel;   //声明自定义的图像面板对象
public void init(){
super.init(); //调用父类init方法,初始化小程序图形界面
pLabel.setText("请输入没有显示的小图编号");   //重设标签提示文字
tf.addActionListener(this); //文本框增加监听
centerPanel = new MyImagePanel(3,4); //创建自定义的图像面板
contentPane.add(centerPanel,BorderLayout.CENTER);
setSize(750,320);
} public void actionPerformed(ActionEvent e) {
int k = Integer.parseInt(tf.getText());   //得到文本框输入的整数
tf.setText("");   //清空文本框
if(k==centerPanel.delete){   //如果输入的编号正确,则执行
showStatus("你真牛,再来一次吧");   //小程序状态栏显示
centerPanel.repaint();   //刷新图像面板
}else{   //浏览器状态栏显示提示文字
showStatus("提示:没显示的小图编号为" + centerPanel.delete);   //显示提示
}
}
}