Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/arranger/jarl/test/PanelTest2.java


1   package com.arranger.jarl.test;
2   
3   import com.arranger.jarl.Jarl;
4   import com.arranger.jarl.base.IContext;
5   import com.arranger.jarl.util.ImageUtil;
6   
7   import javax.swing.*;
8   import javax.swing.event.ChangeEvent;
9   import javax.swing.event.ChangeListener;
10  import java.awt.*;
11  import java.awt.event.*;
12  import java.awt.geom.AffineTransform;
13  import java.awt.geom.Point2D;
14  import java.awt.geom.Rectangle2D;
15  
16  /**
17   * PanelTest2 created on Mar 3, 2003
18   */
19  public class PanelTest2 extends JPanel {
20  
21      protected JLabel m_imageLabel;
22      protected JTextField m_configFile;
23  
24      protected int m_imageWidth = 250;
25      protected int m_imageHeight = 250;
26      protected Jarl m_jarl;
27      protected Image m_renderedImage;
28      protected int m_frameToRender = 0;
29      protected JSlider m_framesPerSecond;
30      protected JButton m_renderButton;
31  
32      public void refresh() {
33          invalidate();
34          m_frame.setSize(m_imageWidth + 250, m_imageHeight + 120);
35          Component [] components = getComponents();
36          for (int index = 0; index < components.length; index++) {
37              components[index].invalidate();
38          }
39          m_imageLabel.invalidate();
40  
41          validate();
42      }
43  
44      public PanelTest2() {
45          m_configFile = new JTextField(20) {
46              public Dimension getPreferredSize() {
47                  return new Dimension(100, 20);
48              }
49  
50              public Dimension getMinimumSize() {
51                  return getPreferredSize();
52              }
53  
54              public Dimension getMaximumSize() {
55                  return getPreferredSize();
56              }
57          };
58          m_configFile.setText("<enter config file>");
59  
60  
61          JLabel sliderLabel = new JLabel("Frames Per Second", JLabel.CENTER);
62          sliderLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
63  
64          m_framesPerSecond = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);
65          m_framesPerSecond.addChangeListener(new SliderListener());
66  
67          //Turn on labels at major tick marks.
68          m_framesPerSecond.setMajorTickSpacing(25);
69          m_framesPerSecond.setPaintTicks(true);
70          m_framesPerSecond.setPaintLabels(true);
71          m_framesPerSecond.setBorder(BorderFactory.createEmptyBorder(0,0,10,0));
72  
73  
74          m_renderButton = new JButton(" Render ");
75          m_renderButton.setMnemonic(KeyEvent.VK_R);
76          m_renderButton.addActionListener(new ActionListener() {
77              public void actionPerformed(ActionEvent e) {
78                  try {
79                      m_jarl = new Jarl();
80                      m_jarl.init(m_configFile.getText());
81  
82                      IContext context = m_jarl.getContext();
83                      m_imageWidth = context.getWidth();
84                      m_imageHeight = context.getHeight();
85  
86                      int max = m_jarl.getEndTime().getFrame();
87                      m_framesPerSecond.setMaximum(max);
88                      m_framesPerSecond.setMajorTickSpacing(max / 4);
89                      m_renderedImage = m_jarl.getRenderManager().renderOneFrame(context, m_frameToRender);
90                      refresh();
91                  } catch (Throwable exc) {
92                      JOptionPane.showMessageDialog(PanelTest2.this, exc.getMessage());
93                  }
94              }
95          });
96          m_renderButton.setAlignmentX(Component.CENTER_ALIGNMENT);
97  
98          m_imageLabel = new JLabel() {
99              public Dimension getPreferredSize() {
100                 return new Dimension(m_imageWidth + 20, m_imageHeight + 20);
101             }
102 
103             public Dimension getMinimumSize() {
104                 return getPreferredSize();
105             }
106 
107             public Dimension getMaximumSize() {
108                 return getPreferredSize();
109             }
110 
111             protected void paintComponent(Graphics g) {
112                 if (m_renderedImage != null) {
113                     ImageUtil.overlayTransparentImage(g, m_renderedImage);
114                 } else {
115                     super.paintComponent(g);
116                 }
117             }
118         };
119         m_imageLabel.setVerticalAlignment(SwingConstants.CENTER);
120         m_imageLabel.setHorizontalAlignment(SwingConstants.CENTER);
121 
122         JPanel leftPanel = new JPanel();
123         leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
124         leftPanel.setBorder(BorderFactory.createCompoundBorder(
125             BorderFactory.createTitledBorder("Jarl config file"),
126             BorderFactory.createEmptyBorder(10, 10, 10, 10)));
127         leftPanel.add(m_configFile);
128         leftPanel.add(Box.createRigidArea(new Dimension(0, 10)));
129         leftPanel.add(m_framesPerSecond);
130         leftPanel.add(m_renderButton);
131 
132         JPanel rightPanel = new JPanel();
133         rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
134         rightPanel.setBorder(BorderFactory.createCompoundBorder(
135             BorderFactory.createTitledBorder("Rendered Image"),
136             BorderFactory.createEmptyBorder(10, 10, 10, 10)));
137         rightPanel.add(m_imageLabel);
138 
139         setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
140         setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
141         add(leftPanel);
142         add(Box.createRigidArea(new Dimension(10, 0)));
143         add(rightPanel);
144     }
145 
146     protected Shape centerShape(Shape shape, JComponent component) {
147         Point2D centerPoint = new Point2D.Double(component.getWidth() / 2.0, component.getHeight() / 2.0);
148         Rectangle2D rectangle2D = shape.getBounds2D();
149         double x = centerPoint.getX() - (rectangle2D.getWidth() / 2.0) - rectangle2D.getX();
150         double y = centerPoint.getY() - (rectangle2D.getHeight() / 2.0) - rectangle2D.getY();
151         AffineTransform affineTransform = AffineTransform.getTranslateInstance(x, y);
152         return affineTransform.createTransformedShape(shape);
153     }
154 
155     class SliderListener implements ChangeListener {
156         public void stateChanged(ChangeEvent e) {
157             JSlider source = (JSlider)e.getSource();
158             if (!source.getValueIsAdjusting()) {
159                 m_frameToRender = source.getValue();
160                 m_renderButton.setText("Render frame: " + m_frameToRender);
161             }
162         }
163     }
164 
165     protected static JFrame m_frame;
166 
167     public static void main(String args[]) {
168         m_frame = new JFrame("Jarl Runner");
169 
170         m_frame.addWindowListener(new WindowAdapter() {
171             public void windowClosing(WindowEvent e) {
172                 System.exit(0);
173             }
174         });
175 
176         m_frame.getContentPane().add(new PanelTest2());
177         m_frame.pack();
178         m_frame.setVisible(true);
179     }
180 }