谁知道JFrame上如何添加图片 左 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ImageJQ canvas=new ImageJQ(); //将图片域加入JFrame中 canvas.setSize(345,50); add(canvas); ImageJQ canvas=new ImageJQ(); //将图片域加入JFrame中 canvas.setSize(345,50); add(canvas); 比较简单的就是给一个JLabel加上图片,然后把该JLabel加到JFrame上JLabel label = new JLabel();label.setIcon(new ImageIcon("123.jpg");frame.add(label); 楼上的方法也行,但是JLabel不能作为其他组件的容器,可以换成JPanel,在JPanel的paintComponent中画出图片,再把JPanel加入到JFrame中就可以了.在JPanel中加入其他的组件,并不影响已经画好的图形,图形是作为背景图的. 最好是重载一个Jpanel类,里面装入一副图片,这副图片成为背景图片.代码如下:import javax.swing.*;import javax.swing.border.TitledBorder;import java.awt.*;import java.net.*;public class ImagePanel extends JPanel{ /** * */ private static final long serialVersionUID = 6521980729205616176L; private Image image; public ImagePanel() { } public ImagePanel(Image image) { this.image=image; } // add by Tang Gaungchao public ImagePanel(JPanel jp,String s) { this.setSize(jp.getSize()); jp.setLayout(null); this.setBorder(BorderFactory.createTitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51))); if(s.substring(0,4).compareTo(new String("http://").substring(0,4))==0) { try{ URL imageurl=new URL(s); // image=Toolkit.getDefaultToolkit().(imageurl); image=Toolkit.getDefaultToolkit().getImage(imageurl); MediaTracker tracker=new MediaTracker(this); tracker.addImage(image,0); //this.repaint(); } catch(MalformedURLException ex) { ex.printStackTrace(); } } else { image=Toolkit.getDefaultToolkit().getImage(s); MediaTracker tracker=new MediaTracker(this); tracker.addImage(image,0); } } // add end public ImagePanel(String s) { if(s.substring(0,4).compareTo(new String("http://").substring(0,4))==0) { try{ URL imageurl=new URL(s); // image=Toolkit.getDefaultToolkit().(imageurl); image=Toolkit.getDefaultToolkit().getImage(imageurl); MediaTracker tracker=new MediaTracker(this); tracker.addImage(image,0); //this.repaint(); } catch(MalformedURLException ex) { ex.printStackTrace(); } } else { image=Toolkit.getDefaultToolkit().getImage(s); MediaTracker tracker=new MediaTracker(this); tracker.addImage(image,0); } } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image,0,0,this.getWidth(),this.getHeight(),this); }}这段代码,是我以前写的,你看看,其功能是传入图片地址,如果地址是以HTTP开头,则做为网络图片载入,其他以本地图片载入. 最简单的就是给一个JLabel加上图片。 Graphics gBuffer;ImageIcon image = new ImageIcon(url);//x,y is positiongBuffer.drawImage(image.getImage(),x,y,this); 可以直接给 JFrame加上图片,,JFrame有个setIconImage(Image image) 方法。这个可以用 要想加上背景图片的话,建议你用层面板JLayeredPane,将其最下层放入一张图片即可。该类具体的可以在jdk api文档中查看详细的用法。 JFrame是由这么几部分组成:最底下一层JRootPane,上面是glassPane(一个JPanel)和layeredPane(一个JLayeredPane),而layeredPane又由contentPane(一个JPanel)和menuBar构成。我们一般在JFrame上添加组件往往都是加在contentPane上面:frame.getContentPane().add(btn);要在JFrame上添加背景图片,常见做法是加在layeredPane上面,并将contentPane设置成透明的即可。// 将图片添加到layeredPaneImageIcon img = new ImageIcon("steve.jpg");JLabel imgLabel = new JLabel(img);frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());...// 将contentPane设置成透明的((JPanel)getContentPane()).setOpaque(false); 绝对可行,即使使用GIF文件也行,这是我百思不得其解的地方,因为我试过重写了JPanel的paint()方法,加了gif背景。结果在上面添加组件的时候发现因为使用gif文件的关系,Jpanel会不断重绘,增加的组件无法正常显示。(在上面加面板也无济于事)但是为什么JFrame就不会呢? 请教一个问题,请高手帮忙回答,谢谢 如何向一个txt文件尾添加字符串? 关于文件流的读写 JTable 如何获得数据 急急急!!请大侠帮忙!!先谢谢了 请教各位:关于JAVA.url包的问题 幫我看一下,為什麼會出錯? software engineering with java 应该把key.txt的文件放在什么位置(jbuilder7.0) 请问怎么样实现Date的加减呢?? Struts 的Action方法中如何定义和抛出自定义异常? 如何快速将数据导入excel问题, 在线拜求解答
canvas.setSize(345,50);
add(canvas);
canvas.setSize(345,50);
add(canvas);
label.setIcon(new ImageIcon("123.jpg");
frame.add(label);
代码如下:
import javax.swing.*;
import javax.swing.border.TitledBorder;import java.awt.*;
import java.net.*;
public class ImagePanel extends JPanel{
/**
*
*/
private static final long serialVersionUID = 6521980729205616176L;
private Image image;
public ImagePanel()
{
}
public ImagePanel(Image image)
{
this.image=image;
}
// add by Tang Gaungchao
public ImagePanel(JPanel jp,String s)
{
this.setSize(jp.getSize());
jp.setLayout(null);
this.setBorder(BorderFactory.createTitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
if(s.substring(0,4).compareTo(new String("http://").substring(0,4))==0)
{
try{
URL imageurl=new URL(s);
// image=Toolkit.getDefaultToolkit().(imageurl);
image=Toolkit.getDefaultToolkit().getImage(imageurl);
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(image,0);
//this.repaint();
}
catch(MalformedURLException ex)
{
ex.printStackTrace();
}
}
else
{
image=Toolkit.getDefaultToolkit().getImage(s);
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(image,0);
}
}
// add end
public ImagePanel(String s)
{
if(s.substring(0,4).compareTo(new String("http://").substring(0,4))==0)
{
try{
URL imageurl=new URL(s);
// image=Toolkit.getDefaultToolkit().(imageurl);
image=Toolkit.getDefaultToolkit().getImage(imageurl);
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(image,0);
//this.repaint();
}
catch(MalformedURLException ex)
{
ex.printStackTrace();
}
}
else
{
image=Toolkit.getDefaultToolkit().getImage(s);
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(image,0);
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image,0,0,this.getWidth(),this.getHeight(),this);
}
}
这段代码,是我以前写的,你看看,其功能是传入图片地址,如果地址是以HTTP开头,则做为网络图片载入,其他以本地图片载入.
//x,y is position
gBuffer.drawImage(image.getImage(),x,y,this);
我们一般在JFrame上添加组件往往都是加在contentPane上面:
frame.getContentPane().add(btn);
要在JFrame上添加背景图片,常见做法是加在layeredPane上面,并将contentPane设置成透明的即可。
// 将图片添加到layeredPane
ImageIcon img = new ImageIcon("steve.jpg");
JLabel imgLabel = new JLabel(img);
frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());
...
// 将contentPane设置成透明的
((JPanel)getContentPane()).setOpaque(false);
绝对可行,即使使用GIF文件也行,这是我百思不得其解的地方,因为我试过重写了JPanel的paint()方法,加了gif背景。结果在上面添加组件的时候发现因为使用gif文件的关系,Jpanel会不断重绘,增加的组件无法正常显示。(在上面加面板也无济于事)但是为什么JFrame就不会呢?