有两个问题:
图片路径没有写对,图片在 src 下,图片路径应是 src/海洋.png,正确的写法应是 image = new ImageIcon("src/海洋.png")
image = new ImageIcon("src/海洋.png") 应该放在 label = new JLabel(image)前面。
如下例:
import javax.swing.*class JPanelDemo extends JPanel {
JLabel label
JTextField text
JButton button
ImageIcon image
public JPanelDemo() {
image = new ImageIcon("src/test.png")
label = new JLabel(image)
text = new JTextField(20)
button = new JButton("确定")
add(label)
add(text)
add(button)
}
}
public class App extends JFrame {
public App() {
this.setSize(500, 400)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
this.add(new JPanelDemo())
}
public static void main(String[] args) {
new App().setVisible(true)
}
}
呵呵,很明确的告诉你:可以!
代码半小时后出来!!!
……
终于出来了(呵呵,好像超过了半小时哈)且看代码:
import java.awt.Color
import java.awt.Graphics
import java.awt.image.BufferedImage
import java.io.File
import java.io.IOException
import javax.imageio.ImageIO
import javax.swing.JApplet
public class Test extends JApplet{
String addrs="F:\\images\\mm.bmp"//改成自己的图片路径
BufferedImage mm,child
CutImage ci
public Test(){
try {
mm=ImageIO.read(new File(addrs))
} catch (IOException e) {
System.out.println("图片读取失败!")
e.printStackTrace()
}
ci=new CutImage(mm)
child=ci.getChildImage(50, 0, 150, 220)
}
public void init(){
}
public void paint(Graphics g){
g.setColor(Color.red)
g.drawString("原图:",0,10)
g.drawImage(mm, 20,10,this)
g.drawString("ci.getChildImage(50, 0, 150, 220)截取后的图片",mm.getWidth()+30,10)
g.drawImage(child, mm.getWidth()+50,20,this)
}
}
import java.awt.Image
import java.awt.image.BufferedImage
public class CutImage {
private BufferedImage img
private BufferedImage child
public CutImage(){
}
public CutImage(BufferedImage im){
img=im
}
public CutImage(Image im){
img=(BufferedImage)im
}
public void setImg(BufferedImage img) {
this.img = img
}
public BufferedImage getChildImage(int x,int y,int width,int height) {
int cw=width
int ch=height
int pw=img.getWidth()
int ph=img.getHeight()
if(pw<x+width){
System.out.println("给出的参数超出原图片的范围!程序会自动减小宽度或高度")
cw=pw-x
}
if(ph<y+height){
System.out.println("给出的参数超出原图片的范围!程序会自动减小宽度或高度")
ch=ph-y
}
child=new BufferedImage(cw,ch,BufferedImage.TYPE_INT_ARGB )
for(int i=0i<chi++){
for(int j=0j<cwj++){
child.setRGB(j, i, img.getRGB(x+j, y+i))
}
}
return child
}
}
呵呵,希望楼主能够满意哦,如果你愿意的话,稍微改一下代码就可以把截取的图片child报春到你的电脑上了。下面程序的运行效果吧!