最近在学习paint方法的使用,想着用一个按钮来改变背景图片(就像我们平时做的那样),然后各方查资料。当然,资料是查不到多少的,因为百度首页的前几页的那几个博客,除了一个原创之外(虽然写的很晦涩难懂),其他的都是滥竽充数之徒!最让我恼火的是百度知道里面的登徒子,一个个为了点点积分而胡乱回答,真不知道那几位问问题的同路那个时候想法。
所以我决定把我自己的repaint代码贴上,因为我冥思苦想了几个小时,终于都想明白了怎么去使用repaint才能达到自己的要求。很蠢吧?花了那么多的时间。
目的:按一个按钮来更换图片;
使用:repaint 、paintcomponent 、ActionListener
以下是源码,在eclipse nexo3.0 上可以使用
package home;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PaintTest extends JPanel
{
JFrame frame ;
JButton btn1 ;
JButton btn2 ;
String Loca ;
ImageIcon ii ;
Image i ;
public PaintTest ()
{
Loca = "/image/piano.jpg" ;
}
public void paintComponent (Graphics g)
{
ii = new ImageIcon (PaintTest.class.getResource(Loca)) ;
i = ii.getImage() ;/*这里是得到一个img对象,给drawimage的*/
super.paintComponent (g) ;
g.drawImage (i,0,0,400,300,this) ;
}
public void set ()
{
frame = new JFrame () ;
btn2 = new JButton ("b") ;/*这个button是用来测试画出来的图像是否会覆盖这个按钮的,结果是不会*/
btn2.setBounds(0, 0, 50, 50);
this.add(btn2) ;
btn1 = new JButton ("a") ;
btn1.setBounds(0, 400, 50, 50) ;
btn1.addActionListener(new ActionListener ()
{
@Override
public void actionPerformed(ActionEvent e)/*监听器,如果这里看不懂的话先去看看那部分的知识。这里总结起来就是:按一个键,改变Loca,再重绘*/
{
Loca = "/image/pic.jpg" ;/*Loca是用来放地址的,给上面的imageicon得到一个icon对象(不是image)*/
repaint () ;
}
}) ;
this.setLayout(null) ;
this.add(btn1) ;
frame.add(this) ;
frame.setSize(500, 500) ;
frame.setVisible(true) ;
}
public static void main (String [] args)
{
PaintTest pt = new PaintTest () ;
pt.set() ;
}
}
先吃饭,有些额外的说明以后再说。
希望能帮助到大家!