public class MoveImage {
static int x,y
private static int num=0
private static Icon icon=null
public static void main(String[] args) throws Exception{
JFrame f = new JFrame()
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
f.getContentPane().setLayout(null)//这个要设置成 null
//图片
icon = new ImageIcon("d:/test.gif")//d:/test.gif本地一张图片
JLabel l = new JLabel(icon)//创建具有指定图像的 JLabel 实例。
l.setSize(icon.getIconWidth(),icon.getIconHeight())//设置面板的宽度和高度
l.setBorder(BorderFactory.createLineBorder(Color.red))//给图片加上红色外框
f.getContentPane().add(l)
f.setSize(900,700)
f.setVisible(true)
l.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
x=e.getX()
y=e.getY()
}
})
l.addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
JLabel l = (JLabel)e.getSource()
l.setLocation(l.getX()+e.getX()-x,l.getY()+e.getY()-y)
}
public void mouseMoved(MouseEvent e) {}
})
}
img.getScaledInstance(50, 50, Image.SCALE_DEFAULT)即使已经完全加载了初始源图像,新的 Image 对象也可以被异步加载。
所以一般不直接用,可以再初始化一下让其加载,注释那两行相当于,让缩放后的image加载。其实还可以这样。
Image tempImg = new ImageIcon(img).getImage()
g.drawImage(tempImg, 0, 0, tempImg.getHeight(null), tempImg.getHeight(null), this)
如果用 JLabel 显示图像,稍微覆盖它的 paintComponent 方法后根据键盘输入调整它的尺寸既可。
比如:
import javax.swing.*
import java.awt.*
import java.awt.event.*
class C extends JFrame {
public static void main(String[] args) { new C()}
public C() {
final JLabel imgView = new JLabel(new ImageIcon(你的图片路径)) {
public void paintComponent(Graphics g) {
super.paintComponent(g)
g.drawImage(((ImageIcon)getIcon()).getImage(), 0, 0, getWidth(), getHeight(), null)
}
}
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
double zoomFactor = e.getKeyCode() == KeyEvent.VK_UP ? 1.01 :
e.getKeyCode() == KeyEvent.VK_DOWN ? .99 : 1
imgView.setSize((int)(imgView.getWidth() * zoomFactor),
(int)(imgView.getHeight() * zoomFactor))
}
})
add(imgView)
setSize(800, 600)
setVisible(true)
setDefaultCloseOperation(EXIT_ON_CLOSE)
}
}