在下是一名刚刚起步的菜鸟,今天看书遇到如下问题,三个类都是书上的,图片路径没有问题..运行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); //显示提示
}
}
}
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); //显示提示
}
}
}
解决方案 »
- java 问题
- Java入门小程序,使用Java转换用户输入字母为大写如何避开中文?
- 通过这种方式创建的javabean在运行时,可以通过反射动态修改其属性么?
- 这种情况下,是正确的结束了线程还是只是挂起了呢?
- 请问在javaservlet的service中如何得到session?
- 如何接收输入的字符?
- 请教二维数组问题,在线急等,解决后马上给分!
- NetBeans中编译出现Encoding问题如何解决(程序中含有中文字符)?
- Applet中可以写服务器上的文件吗?
- 我想把我的windows的一个目录打包,然后拷到unix下去解开,怎么办?
- java中交换两个数的方法是什么 api有吗?
- 有效的XML文件问题
楼主可以按照这上面做的试试!
pic = tlkt.getImage("pic/section2/8.jpg");换成绝对路径试试,比如pic = tlkt.getImage("d:/8.jpg");
先把8.jpg拷贝到D盘下