Java Swing Animations -



Java Swing Animations -

i have java project lift management system.

my problem in 2 jpanel's. first jlabel's , button's, 1 each floor - utilize layout because want responsive. before programme start have dialog can set first , lastly floor level. here's code:

public void setfloors() { floornavigation = new jpanel(); floornavigation.setlayout(new boxlayout(floornavigation, boxlayout.y_axis)); floornavigation.add(box.createverticalglue()); for(jpanel p : floorpanels){ floornavigation.add(p); } floornavigation.add(box.createverticalglue()); frame.add(floornavigation, borderlayout.line_start); } public void createfloorpanel() { jpanel floorpanel; for(jlabel l : floorlabels){ floorpanel = new jpanel(new flowlayout()); floorpanel.add(l); floorpanel.add(floorbuttons.get(floorlabels.indexof(l))); floorpanels.add(floorpanel); } }

i want create lift move animation y of each jlabel in other jpanel. ideas how that? things gety() don't work.

if understood correctly both panel contains buttons , panel contains animation going positioned side side, , going have same height. in situation can calculate y coordinate positions knowing current height of panel , number of buttons have. split height number of buttons , multiply number of floors want reach (note give floors in reverse order, top down).

after calculate positions can utilize simple linear animation move "elevator" (i guessing imported icon or image) corresponding positions of buttons. here simple template animation (the little circle represents lift image):

import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jbutton; import javax.swing.swingutilities; import javax.swing.swingworker; import java.awt.color; import java.awt.graphics; import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; public class simpleanimation { static int x; static int y = 150; static int floor_distance = 130; static int animation_speed = 10; //less faster static mydrawpanel panel = new mydrawpanel(); public static void main(string[] args) { jframe frame = new jframe(); frame.setdefaultcloseoperation(jframe.exit_on_close); final jbutton buttonup = new jbutton("floor up"); final jbutton buttondown = new jbutton("floor down"); buttonup.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { (new animatorup()).execute(); } }); buttondown.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { (new animatordown()).execute(); } }); frame.getcontentpane().add(borderlayout.north, buttonup); frame.getcontentpane().add(borderlayout.south, buttondown); frame.getcontentpane().add(panel); frame.setsize(300,300); frame.setvisible(true); } static class animatorup extends swingworker<string, object> { @override public string doinbackground() { seek { x = (int)(panel.getwidth() / 2); for(int = 0; < floor_distance; i++) { y--; panel.repaint(); try{ thread.sleep(animation_speed); } catch(exception ex) { ex.printstacktrace(); } } } grab (exception ignore) { } homecoming ""; } } static class animatordown extends swingworker<string, object> { @override public string doinbackground() { seek { x = (int)(panel.getwidth() / 2); for(int = 0; < floor_distance; i++) { y++; panel.repaint(); try{ thread.sleep(animation_speed); } catch(exception ex) { ex.printstacktrace(); } } } grab (exception ignore) { } homecoming ""; } } static class mydrawpanel extends jpanel { public void paintcomponent(graphics g) { g.fillrect(0, 0, this.getwidth(), this.getheight()); g.setcolor(new color(215,215,215)); x = (int)(panel.getwidth() / 2); g.filloval(x, y, 50, 50); } } }

you can modify code buttons trigger animation moves "elevator" specific floor. calculating difference between current y position of "elevator" , y position of wanted floor, can set direction , range of animation execute.

java swing animation

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -