关于java里image的用法

我用APPLICATION插入一张图片,部分代码如下:
public void actionPerformed(ActionEvent e){
MenuItem mi= (MenuItem) e.getSource();
Graphics g=getGraphics();

if (mi==mi1){

Image ig;
ig=getToolkit().getImage("images/5.gif");
g.drawImage(ig,100,100,this);

tx.setText("5.gif");

}
else if(mi==mi2){
frm.dispose();
}
else if (mi==mi3){

if(grp.getSelectedCheckbox()==ckb1) g.setColor(Color.RED);
if(grp.getSelectedCheckbox()==ckb2) g.setColor(Color.YELLOW);
if(grp.getSelectedCheckbox()==ckb3) g.setColor(Color.GREEN);

if(chc.getSelectedItem()=="Oval") g.fillOval(100, 100, 250, 150);
if(chc.getSelectedItem()=="Rectangle") g.fillRect(100, 100, 250, 150);
if(chc.getSelectedItem()=="Triangle") {
int x[]={100,267,320};
int y[]={100,300,245};
g.fillPolygon(x,y,3);
}

}

else if (mi==mi4) {
repaint();
}

}

运行结果是,点MI3的时候没有问题,点MI2时候第一次tx.setText会执行,但是图片不出现,点第二次才出现图片
并且如果先点MI3再点MI2,第一次会把窗口清空
怎么回事啊这是……
麻烦回答地清楚一点,谢谢

先要设置图片路径,我们将一将背景图片back.jpg放到C盘的img目录下,调用语句如下:
ImageIcon icon=new ImageIcon("C:\\img\\back.jpg),一定要是双反斜杠
然后分别在JComponent里添加图片
JFrame
利用JFrame的一个方法setIconImage(Image image);
由于要用到Image类,所以还得把上面定义的ImageIcon对象转换成Image对象:
Image image=icon.getImage();
然后就可以调用JFrame的setIconImage(image)方法了。

还要注意一点的是,由于有些图片的格式JVM不能识别,所以要转格式,一般为jpg,gif.如把.bmp格式的转换为.jpg,不能简单的把后缀名改了就行,这样照样不能显示。方法很简单,直接用WINDOWS自带的画图工具打开图片,然后另存为时改为.jpg或.gif格式就可以了。
附源代码
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.JTree;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import java.awt.FlowLayout;

public class ImageTest extends JFrame{
ImageIcon icon=new ImageIcon("c:\\img\\system.jpg");
Image image=icon.getImage();
public ImageTest()
{
JMenuBar mb=new JMenuBar();
this.setJMenuBar(mb);
JMenu menu=new JMenu("system");
menu.setIcon(icon);
//JMenuItem item=new JMenuItem("exit",icon);
JMenuItem item=new JMenuItem(icon);
item.setIcon(icon);
JLabel label=new JLabel(icon);
//label.setIcon(icon);
menu.add(item);
mb.add(menu);

DefaultMutableTreeNode root=new DefaultMutableTreeNode();
DefaultMutableTreeNode node1=new DefaultMutableTreeNode();
DefaultMutableTreeNode node11=new DefaultMutableTreeNode();
DefaultMutableTreeNode node12=new DefaultMutableTreeNode();
DefaultMutableTreeNode node2=new DefaultMutableTreeNode();
DefaultMutableTreeNode node21=new DefaultMutableTreeNode();
root.add(node1);
root.add(node2);
node1.add(node11);
node1.add(node12);
node2.add(node21);

JTree jTree1 = new javax.swing.JTree(root);
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setOpenIcon(new ImageIcon("C:\\img\\down.jpg")); //展开时节点图标
renderer.setClosedIcon(new ImageIcon("C:\\img\\file.jpg")); //折叠时节点图标
renderer.setLeafIcon(new ImageIcon("C:\\img\\man_small.jpg")); //叶子节点图标
jTree1.setCellRenderer(renderer);
this.add(label);
this.setIconImage(image);

this.add(jTree1);
this.setDefaultCloseOperation(3);
this.setLocation(300,400);
this.pack();
this.setVisible(true);
}
public static void main(String[] args)
{
new ImageTest();
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-10
直接弄图片不太好 可能会遮盖住某些组件
我做的背景图片倒入
都是将背景初始化
给你代码看看吧
这是我的毕业设计中的一部分
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(800, 630));
setTitle("管理系统 1.0");
ImageIcon img=new ImageIcon("//图片路径"); //这里是你问的用法 图片路径用//不要用\\只要是\\就改成//写磁盘就代表根目录和你的.java文件的那个为根目录..//为退出一级
JLabel hy=new JLabel(img);
//img就是你的图片每次导入一个就得声明一个对象
下面的作为背景,初始化背景
this.getLayeredPane().add(hy,new Integer(Integer.MIN_VALUE));
hy.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
((JPanel)getContentPane()).setOpaque(false);本回答被提问者采纳
第2个回答  2008-05-25
因为画的时候自动调动updata,所以你前面画的会没掉

方法:
你把生成的图形对象放到容器里面,

画的时候时候把对象遍历一遍
相似回答