一个图片时你知道,现在只是切换的问题?
创新互联建站专注于网站建设|网页维护|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖酒店设计等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身策划品质网站。
给按钮添加一个 ActionListener,在它的 actionPerformed 方法中做你的事情,把 jpanel.setIcon(..) 换张图片。
这个只是实现了移动,你参考以下吧 !
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) {}
});
}
没有代码,准备一个隐藏的 JInternalFrame,当鼠标移到一个图片缩略图时,我们通过 JAI (Java Advanced Image, Oracle 网站有下载的 jar) 来把图片缩放成一个 BufferedImage,然后再 myInternalFrame.getMyPreviewPanel().setImageIcon(myBufferedImage); 替换 JInternalFrame 中的 myPreviewPanel 的图标,再把 JInternalFrame 显示到前面来,并给它一个鼠标事件,当鼠标移出这个窗体或鼠标单击时把 JInternalFrame 隐藏回到原来的缩略图列表中。
下面是我预览产品图片时的代码,类似的方法做成的,先缩放在内存中得到一张 BufferedImage 图片,再放到 Preview 预览框中显示出来。你这个局部放大的话,就是把原来的图片通过 JAI 剪切出一个方形再来放大,应该在 JAI 中也有这个吧,不过我没找过,你在它的 API 文档中找方法列出,应该有的。
图片的位移(下落),可以通过修改图片的x,y坐标来实现, 在Swing/Html中,我们可以使用Timer定时(比如每隔100毫秒)去修改图片的x,y坐标即可实现,
多个图片都按照一定的轨迹移动,那都按照自己的轨迹的算法,去定时修改x,y坐标即可.
JavaFX是java先进的图形界面框架, 里面有3D和各种动画, 所以按照轨迹移动,都能轻松实现
JavaFX参考代码如下
import javafx.animation.Animation;
import javafx.animation.Interpolator;
import javafx.animation.PathTransition;
import javafx.animation.RotateTransition;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.QuadCurveTo;
import javafx.stage.Stage;
import javafx.util.Duration;
public class PathAnimateDemo extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
ImageView imv=new ImageView(getClass().getResource("ball.png").toExternalForm());
Path path = new Path();// 路径;运动轨迹
MoveTo mt = new MoveTo(20, 50);
QuadCurveTo quadTo2 = new QuadCurveTo(175, 190, 350, 30);
path.getElements().addAll(mt, quadTo2);
HBox hbox = new HBox(10);
Button btnStart = new Button("开始");
Button btnPause = new Button("暂停");
Button btnResume = new Button("继续");
Button btnStop = new Button("结束");
hbox.getChildren().addAll(btnStart, btnPause, btnResume, btnStop);
hbox.setPadding(new Insets(20));
hbox.setLayoutX(80);
hbox.setLayoutY(230);
Group root = new Group();
root.getChildren().addAll(imv, path, hbox); // 不添加path.就可以不显示path了
Scene scene = new Scene(root, 430, 300);
primaryStage.setTitle("JavaFX");
primaryStage.setScene(scene);
primaryStage.show();
//旋转动画设置
RotateTransition rt=new RotateTransition(Duration.millis(1000),imv);
rt.setInterpolator(Interpolator.LINEAR);
rt.setFromAngle(0);
rt.setToAngle(360);
rt.setCycleCount(Animation.INDEFINITE);
rt.play();
//路径动画设置
PathTransition pt = new PathTransition(Duration.millis(800), path, imv);// 路径动画
pt.setCycleCount(Animation.INDEFINITE);
pt.setAutoReverse(true);
btnStart.setOnAction(e - {
pt.playFromStart();// 从头开始播放
});
//----按钮的响应设置---
btnPause.setOnAction(e - {
pt.pause();
});
btnResume.setOnAction(e - {
pt.play(); // 播放
});
btnStop.setOnAction(e - {
pt.jumpTo(new Duration(0));// 跳到第0秒处
pt.stop();
});
}
}