我自己写了JPanel中paint方法,但是没有显示图片啊……求大神请教

maoplay 2012-10-10 11:19:37
代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class Pic extends JFrame
{
private JButton
b1 = new JButton("button1"),
b2 = new JButton("button2"),
b3 = new JButton("button3"),
b4 = new JButton("button4"),
b6 = new JButton("button6"),
b5 = new JButton("button5");
private Panel panel1 = new Panel();
private JPanel panel2 = new JPanel();

public Pic()
{
this.setTitle("图像处理");
this.setSize(900, 700);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel1.img = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("meishi.jpg"));
panel2.add(b1);
panel2.add(b2);
panel2.add(b3);
panel2.add(b4);
panel2.add(b5);
panel2.add(b6);
panel1.repaint();
panel1.setBackground(Color.darkGray);
panel2.setBackground(Color.CYAN);
this.add(panel1,BorderLayout.CENTER);
this.add(panel2,BorderLayout.SOUTH);

}

public static void main(String[] args)
{
Pic pic = new Pic();
}
}

class Panel extends JPanel
{
Image img = null;
public void paint(Graphics g)
{
super.paint(g);
g.drawImage(img,0,0,300,200,this);
}
}
...全文
376 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
杀手 2012-10-11
  • 打赏
  • 举报
回复

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Pic extends JFrame {
private JButton b1 = new JButton("button1"), b2 = new JButton("button2"),
b3 = new JButton("button3"), b4 = new JButton("button4"),
b6 = new JButton("button6"), b5 = new JButton("button5");
private Panel panel1 = new Panel();
private JPanel panel2 = new JPanel();

public Pic() {
this.setTitle("图像处理");
this.setSize(900, 700);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel1.img = Toolkit.getDefaultToolkit().getImage(
Panel.class.getResource("meishi.jpg"));

panel2.add(b1);
panel2.add(b2);
panel2.add(b3);
panel2.add(b4);
panel2.add(b5);
panel2.add(b6);
panel1.setBackground(Color.darkGray);
panel2.setBackground(Color.CYAN);
this.setLayout(new BorderLayout());
this.add(panel1, BorderLayout.CENTER);
this.add(panel2, BorderLayout.SOUTH);

}

public static void main(String[] args) {
Pic pic = new Pic();
pic.panel1.repaint();
}
}

class Panel extends JPanel {
Image img = null;

@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
}
}


图片放在此类生成的class文件夹下
wbo112 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你的图片"meishi.jpg"在什么位置放着,如果是用ECLIPSE做的话,需要放到SRC根目录下的
[/Quote]


如果是放到工程根目录下的的话,可以改成 panel1.img = Toolkit.getDefaultToolkit().getImage("meishi.jpg");
或者panel1.img = ImageIO.read(new File("meishi.jpg"));(这个会抛出异常)
maoplay 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

我给你留过代码了,不能用吗
[/Quote]
能用……谢谢哈
杀手 2012-10-11
  • 打赏
  • 举报
回复
我给你留过代码了,不能用吗
wbo112 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我用的是eclipse,不过图片我放在根目录下,貌似没用引用 1 楼 的回复:

你的图片"meishi.jpg"在什么位置放着,如果是用ECLIPSE做的话,需要放到SRC根目录下的
[/Quote]


你在根目录下要用panel1.img = Toolkit.getDefaultToolkit().getImage("meishi.jpg");

另外因为线程原因,main方法写成
EventQueue.invokeLater(new Runnable(){
public void run() {
Pic pic = new Pic();
}

});
这样
lorkWTF 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

swing类请重写 paintComponent。
不要使用和java.awt.Panel 同名的 Panel类名。
[/Quote]
我以前写的程序有用过同名的变量,没出过问题,这个应该不是这个问题吧
liuzhiming120030 2012-10-11
  • 打赏
  • 举报
回复
重写 paintComponent。
不要使用和java.awt.Panel 同名的 Panel类名
lorkWTF 2012-10-11
  • 打赏
  • 举报
回复
我用的是eclipse,不过图片我放在根目录下,貌似没用[Quote=引用 1 楼 的回复:]

你的图片"meishi.jpg"在什么位置放着,如果是用ECLIPSE做的话,需要放到SRC根目录下的
[/Quote]
huntor 2012-10-11
  • 打赏
  • 举报
回复
swing类请重写 paintComponent。
不要使用和java.awt.Panel 同名的 Panel类名。
wbo112 2012-10-10
  • 打赏
  • 举报
回复
你的图片"meishi.jpg"在什么位置放着,如果是用ECLIPSE做的话,需要放到SRC根目录下的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧