[ milicaneskovic @ 08.06.2010. 09:10 ] @
Pozdrav svima! Pokušavam da napravim jednu animaciju koja simulira čekanje u redu na šalteru: ljudi čekaju, ispred njih su 3 šaltera i oni prilaze slobodnom. Simulirala sam to tako što sam crtala kružiće koji se pomeraju ka velikom krugu (on simulira šalter) i sada bih da te kružiće kontrolišem, tj. da omogućim pauziranje animacije, kao i da kružići dolaze do slobodnog šaltera. Možete pokrenuti i pogledati navedeni kod: Evo koda za aplet: Code: package org.me.log; import javax.swing.JApplet; public class LogAplet extends JApplet { @Override public void init() { try { java.awt.EventQueue.invokeAndWait(new Runnable() { public void run() { initComponents(); } }); } catch (Exception ex) { ex.printStackTrace(); } } // TODO overwrite start(), stop() and destroy() methods private void initComponents() { panel1 = new org.me.log.LogPanel1(); slider1 = new javax.swing.JSlider(); slider4 = new javax.swing.JSlider(); slider2 = new javax.swing.JSlider(); slider5 = new javax.swing.JSlider(); slider3 = new javax.swing.JSlider(); slider6 = new javax.swing.JSlider(); label1 = new javax.swing.JLabel(); label2 = new javax.swing.JLabel(); label3 = new javax.swing.JLabel(); label4 = new javax.swing.JLabel(); label5 = new javax.swing.JLabel(); label6 = new javax.swing.JLabel(); panel2 = new org.me.log.LogPanel2(); panel1.setBackground(new java.awt.Color(255, 255, 255)); panel1.setBorder(new javax.swing.border.LineBorder(javax.swing.UIManager.getDefaults().getColor("Slider.foreground"), 2, true)); javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1); panel1.setLayout(panel1Layout); panel1Layout.setHorizontalGroup( panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 288, Short.MAX_VALUE) ); panel1Layout.setVerticalGroup( panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 367, Short.MAX_VALUE) ); label1.setFont(new java.awt.Font("Tahoma", 1, 14)); label1.setText("Broj sati"); label2.setFont(new java.awt.Font("Tahoma", 1, 14)); label2.setText("Nervoza radnika"); label3.setFont(new java.awt.Font("Tahoma", 1, 14)); label3.setText("Gužva"); label4.setFont(new java.awt.Font("Tahoma", 1, 14)); label4.setText("Broj sati"); label5.setFont(new java.awt.Font("Tahoma", 1, 14)); label5.setText("Nervoza radnika"); label6.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N label6.setText("Gužva"); panel2.setBackground(new java.awt.Color(255, 255, 255)); panel2.setBorder(new javax.swing.border.LineBorder(javax.swing.UIManager.getDefaults().getColor("Slider.foreground"), 2, true)); slider1.setMajorTickSpacing(10); slider1.setPaintLabels(true); slider1.setPaintTicks(true); slider1.setValue(20); slider1.setMaximum(40); slider2.setMajorTickSpacing(25); slider2.setPaintLabels(true); slider2.setPaintTicks(true); slider2.setValue(50); slider2.setMaximum(100); slider3.setMajorTickSpacing(25); slider3.setPaintLabels(true); slider3.setPaintTicks(true); slider3.setValue(50); slider3.setMaximum(100); slider4.setMajorTickSpacing(10); slider4.setPaintLabels(true); slider4.setPaintTicks(true); slider4.setValue(20); slider4.setMaximum(40); slider5.setMajorTickSpacing(25); slider5.setPaintLabels(true); slider5.setPaintTicks(true); slider5.setValue(50); slider5.setMaximum(100); slider6.setMajorTickSpacing(25); slider6.setPaintLabels(true); slider6.setPaintTicks(true); slider6.setValue(50); slider6.setMaximum(100); javax.swing.GroupLayout panel2Layout = new javax.swing.GroupLayout(panel2); panel2.setLayout(panel2Layout); panel2Layout.setHorizontalGroup( panel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 288, Short.MAX_VALUE) ); panel2Layout.setVerticalGroup( panel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 367, Short.MAX_VALUE) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(slider1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(slider2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(label1) .addComponent(label2) .addComponent(label3) .addComponent(slider3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(label6) .addComponent(label5) .addComponent(label4) .addComponent(slider5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(slider4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(slider6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(panel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(label1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(slider1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(label2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(slider2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(label3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(slider3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addComponent(label4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(slider4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(label5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(slider5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(label6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(slider6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); }// </editor-fold> // Variables declaration - do not modify public javax.swing.JLabel label1; public javax.swing.JLabel label2; public javax.swing.JLabel label3; public javax.swing.JLabel label4; public javax.swing.JLabel label5; public javax.swing.JLabel label6; public javax.swing.JPanel panel1; public javax.swing.JPanel panel2; static public javax.swing.JSlider slider1; static public javax.swing.JSlider slider2; static public javax.swing.JSlider slider3; static public javax.swing.JSlider slider4; static public javax.swing.JSlider slider5; static public javax.swing.JSlider slider6; // End of variables declaration } Ovo je panel na kome je nacrtan sadržaj: Code: package org.me.log; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class LogPanel2 extends JPanel { int i; // timer delay: equivalent to the Thread.sleep time private static final int TIMER_DELAY = 1; // how far to move in x dimension with each loop of timer int DELTA_X = 1; // the images x & y locations private int x2 = 130; private int y2 = 330; private int y21 = y2-50; private int y22=y2-100; private int y23=y2-150; private int y24=y2-200; public LogPanel2() { try { // first get our image } catch (Exception e) { e.printStackTrace(); } // create and start the Swing Timer new Timer(TIMER_DELAY, new TimerListener()).start(); } // all paintComponent does is paint -- nothing else public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.black); g.drawString("1", 42, 20); g.drawString("2", 137, 20); g.drawString("3", 232, 20); g.setColor(new Color (178, 34, 34)); g.fillOval(30, 50, 30, 30); g.fillOval(125, 55, 30, 30); g.fillOval(220, 50, 30, 30); setBackground (Color.white); g.setColor(new Color (220,220,220)); g.fillRect(130,100,20,250); g.setColor(new Color (205,92,92)); if (y2 <= 330 && y2 >= 85) { g.fillOval( x2, y2, 20, 20); g.fillOval( x2, y21, 20,20); g.fillOval( x2, y22, 20,20); g.fillOval( x2, y23, 20,20); g.fillOval( x2, y24, 20,20); } else { System.out.println("y2= " + y2); // Show the value that fails if test } } private class TimerListener implements ActionListener { // is called every TIMER_DELAY ms public void actionPerformed(ActionEvent e) { y2 -= DELTA_X; y21 -= DELTA_X; y22 -= DELTA_X; y23 -= DELTA_X; y24 -= DELTA_X; if (y2<85){ y2=330; } if (y21<85){ y21=330; } if (y22<85){ y22=330; } if (y23<85){ y23=330; } if (y24<85){ y24=330; } // ask JVM to paint this JPanel LogPanel2.this.repaint(); } } } A ovo je kod drugog panela, čija ću svojstva tek dodavati: Code: package org.me.log; import java.awt.Color; import javax.swing.*; import java.awt.Graphics; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class LogPanel1 extends JPanel { // timer delay: equivalent to the Thread.sleep time private static final int TIMER_DELAY = 1; // how far to move in x dimension with each loop of timer int DELTA_X = 1; // the images x & y locations private int x2 = 130; private int y2 = 330; private int y21 = y2-50; private int y22=y2-100; private int y23=y2-150; private int y24=y2-200; static int value1; static int value2; static int value3; public LogPanel1(){ try { // first get our image } catch (Exception e) { // shame on me for combining exceptions :( e.printStackTrace(); } // create and start the Swing Timer new Timer(TIMER_DELAY, new TimerListener()).start(); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.blue); value1=LogAplet.slider1.getValue(); value2=LogAplet.slider2.getValue(); value3=LogAplet.slider3.getValue(); g.setColor(Color.BLACK); g.drawString("1", 42, 20); g.drawString("2", 137, 20); g.drawString("3", 232, 20); g.setColor(new Color (220,220,220)); g.fillRect(35,100,20,230); g.fillRect(130,100,20,230); g.fillRect(225,100,20,230); g.setColor(new Color (178, 34, 34)); g.fillOval(30, 50, 30, 30); g.fillOval(125, 50, 30, 30); g.fillOval(220, 50, 30, 30); g.setColor(new Color (205,92,92)); g.fillOval(35, 250, 20, 20); g.fillOval(35, 300, 20, 20); g.fillOval(35, 200, 20, 20); g.fillOval(35, 150, 20, 20); g.fillOval(35, 100, 20, 20); g.fillOval(130, 250, 20, 20); g.fillOval(130, 300, 20, 20); g.fillOval(130, 200, 20, 20); g.fillOval(130, 150, 20, 20); g.fillOval(130, 100, 20, 20); g.fillOval(225, 250, 20, 20); g.fillOval(225, 300, 20, 20); g.fillOval(225, 200, 20, 20); g.fillOval(225, 150, 20, 20); g.fillOval(225, 100, 20, 20); g.setColor(new Color (220,220,220)); g.fillRect(130,100,20,250); g.setColor(new Color (205,92,92)); if (y2 <= 330 && y2 >= 85) { g.fillOval( x2, y2, 20, 20); g.fillOval( x2, y21, 20,20); g.fillOval( x2, y22, 20,20); g.fillOval( x2, y23, 20,20); g.fillOval( x2, y24, 20,20); repaint(); }} private class TimerListener implements ActionListener { // is called every TIMER_DELAY ms public void actionPerformed(ActionEvent e) { y2 -= DELTA_X; y21 -= DELTA_X; y22 -= DELTA_X; y23 -= DELTA_X; y24 -= DELTA_X; if (y2<80){ y2=330; } if (y21<80){ y21=330; } if (y22<80){ y22=330; } if (y23<80){ y23=330; } if (y24<80){ y24=330; } // ask JVM to paint this JPanel LogPanel1.this.repaint(); } } } Trenutno vršim podešavanja i upravljanje simulacijom u LogPane2. Mislim da tu treba podešavati ponašanje animacije, tj. definisati pomeranje ovih elemenata, samo nisam sigurna kako. Nadam se da neko može pomoći. |