org.jdesktop.swinghelper.transformer;
021.
022.import javax.swing.*;
023.import javax.swing.border.TitledBorder;
024.import javax.swing.event.ChangeEvent;
025.import javax.swing.event.ChangeListener;
026.import java.awt.*;
027.import java.awt.event.*;
028.import java.awt.geom.AffineTransform;
029.import java.util.ArrayList;
030.import java.util.List;
031.import java.util.Vector;
032.
033./*
034.* @author Alexander Potochkin
035.*
036.* [url]https://swinghelper.dev.java.net/[/url]
037.* [url]http://weblogs.java.net/blog/alexfromsun/[/url]
038.*/
039.public class TransformerDemo extends JFrame implements ChangeListener {
040.
041.private List<JXTransformer> transformers = new ArrayList<JXTransformer>();
042.private JSlider rotationSlider;
043.private JSlider scalingSlider;
044.private JSlider shearingSlider;
045.
046.public TransformerDemo() {
047.super("Transformer demo");
048.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
049.
050.JMenuBar bar = new JMenuBar();
051.JMenu lafMenu = new JMenu("LaF");
052.
053.JMenuItem winLaf = new JMenuItem("Windows LaF");
054.lafMenu.add(winLaf);
055.winLaf.addActionListener(new ActionListener() {
056.public void actionPerformed(ActionEvent e) {
057.setLaf("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
058.}
059.});
060.JMenuItem motifLaf = new JMenuItem("Motif LaF");
061.lafMenu.add(motifLaf);
062.motifLaf.addActionListener(new ActionListener() {
063.public void actionPerformed(ActionEvent e) {
064.setLaf("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
065.}
066.});
067.bar.add(lafMenu);
068.JMenuItem metalLaf = new JMenuItem("Metal LaF");
069.lafMenu.add(metalLaf);
070.metalLaf.addActionListener(new ActionListener() {
071.public void actionPerformed(ActionEvent e) {
072.setLaf("javax.swing.plaf.metal.MetalLookAndFeel");
073.}
074.});
075.
076.JMenu settingsMenu = new JMenu("Settings");
077.settingsMenu.setMnemonic(KeyEvent.VK_S);
078.JMenuItem item = new JMenuItem("Reset sliders", KeyEvent.VK_R);
079.item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.ALT_MASK));
080.item.addActionListener(new ActionListener() {
081.public void actionPerformed(ActionEvent e) {
082.rotationSlider.setValue(0);
083.scalingSlider.setValue(100);
084.shearingSlider.setValue(0);
085.}
086.});
087.settingsMenu.add(item);
088.bar.add(settingsMenu);
089.setJMenuBar(bar);
090.
091.JPanel panel = new JPanel(new BorderLayout());
092.panel.add(createDemoPanel());
093.panel.add(createStressTestPanel(), BorderLayout.EAST);
094.add(new JScrollPane(panel));
095.add(new JScrollPane(createToolPanel()), BorderLayout.SOUTH);
096.pack();
097.}
098.
099.private void setLaf(String laf) {
100.try {
101.UIManager.setLookAndFeel(laf);
102.SwingUtilities.updateComponentTreeUI(this);
103.} catch (Exception e) {
104.e.printStackTrace();
105.}
106.for (JXTransformer t : transformers) {
107.t.revalidate();
108.t.repaint();
109.}
110.}
111.
112.private JPanel createStressTestPanel() {
113.JPanel panel = new JPanel();
114.TitledBorder titledBorder = BorderFactory.createTitledBorder("Stress test (with tooltips)");
115.titledBorder.setTitleJustification(TitledBorder.CENTER);
116.panel.setBorder(titledBorder);
117.JButton lowerButton = new JButton("Button");
118.lowerButton.setLayout(new FlowLayout());
119.lowerButton.setToolTipText("Lower button");
120.JButton middleButton = new JButton();
121.middleButton.setToolTipText("Middle button");
122.middleButton.setLayout(new FlowLayout());
123.lowerButton.add(middleButton);
124.JButton upperButton = new JButton("Upper button");
125.upperButton.setToolTipText("Upper button");
126.middleButton.add(upperButton);
127.panel.add(createTransformer(lowerButton));
128.return panel;
129.}
130.
131.private JPanel createDemoPanel() {
132.JPanel buttonPanel = new JPanel(new GridLayout(3, 2));
133.TitledBorder titledBorder = BorderFactory.createTitledBorder("Try three sliders below !");
134.Font titleFont = titledBorder.getTitleFont();
135.titledBorder.setTitleFont(titleFont.deriveFont(titleFont.getSize2D() + 10));
136.titledBorder.setTitleJustification(TitledBorder.CENTER);
137.buttonPanel.setBorder(titledBorder);
138.JButton b = new JButton("JButton");
139.b.setPreferredSize(new Dimension(100,50));
140.buttonPanel.add(createTransformer(b));
141.
142.Vector<String> v = new Vector<String>();
143.v.add("One");
144.v.add("Two");
145.v.add("Three");
146.JList list = new JList(v);
147.buttonPanel.add(createTransformer(list));
148.
149.buttonPanel.add(createTransformer(new JCheckBox("JCheckBox")));
150.
151.JSlider slider = new JSlider(0, 100);
152.slider.setLabelTable(slider.createStandardLabels(25, 0));
153.slider.setPaintLabels(true);
154.slider.setPaintTicks(true);
155.slider.setMajorTickSpacing(10);
156.buttonPanel.add(createTransformer(slider));
157.
158.buttonPanel.add(createTransformer(new JRadioButton("JRadioButton")));
159.final JLabel label = new JLabel("JLabel");
160.label.addMouseListener(new MouseAdapter() {
161.public void mouseEntered(MouseEvent e) {
162.Font font = label.getFont();
163.label.setFont(font.deriveFont(font.getSize2D() + 10));
164.}
165.
166.public void mouseExited(MouseEvent e) {
167.Font font = label.getFont();
168.label.setFont(font.deriveFont(font.getSize2D() - 10));
169.}
170.});
171.buttonPanel.add(createTransformer(label));
172.
173.return buttonPanel;
174.}
175.
176.private JXTransformer createTransformer(JComponent c) {
177.JXTransformer t = new JXTransformer(c);
178.transformers.add(t);
179.return t;
180.}
181.
182.private JPanel createToolPanel() {
183.JPanel panel = new JPanel(new GridLayout(1, 0));
184.rotationSlider = new JSlider(-180, 180, 0);
185.rotationSlider.setLabelTable(rotationSlider.createStandardLabels(90, -180));
186.rotationSlider.setPaintLabels(true);
187.rotationSlider.setPaintTicks(true);
188.rotationSlider.setMajorTickSpacing(45);
189.rotationSlider.addChangeListener(this);
190.rotationSlider.setBorder(BorderFactory.createTitledBorder("Rotate"));
191.panel.add(rotationSlider);
192.
193.shearingSlider = new JSlider(-10, 10, 0);
194.shearingSlider.setLabelTable(shearingSlider.createStandardLabels(5, -10));
195.shearingSlider.setPaintLabels(true);
196.shearingSlider.setPaintTicks(true);
197.shearingSlider.setMajorTickSpacing(2);
198.shearingSlider.addChangeListener(this);
199.shearingSlider.setBorder(BorderFactory.createTitledBorder("Shear"));
200.panel.add(shearingSlider);
201.
202.scalingSlider = new JSlider(50, 150, 100);
203.scalingSlider.setLabelTable(scalingSlider.createStandardLabels(25, 50));
204.scalingSlider.setPaintLabels(true);
205.scalingSlider.setPaintTicks(true);
206.scalingSlider.setMajorTickSpacing(10);
207.scalingSlider.addChangeListener(this);
208.scalingSlider.setBorder(BorderFactory.createTitledBorder("Scale"));
209.panel.add(scalingSlider);
210.return panel;
211.}
212.
213.public void stateChanged(ChangeEvent e) {
214.AffineTransform at = new AffineTransform();
215.at.rotate(rotationSlider.getValue() * Math.PI / 180);
216.double scale = scalingSlider.getValue() / 100.0;
217.at.scale(scale, scale);
218.double shear = shearingSlider.getValue() / 10.0;
219.at.shear(shear, 0);
220.for (JXTransformer t : transformers) {
221.t.setTransform(at);
222.}
223.}
224.
225.public static void main(String[] args) {
226.TransformerDemo demo = new TransformerDemo();
227.demo.setSize(800, 600);
228.demo.setVisible(true);
229.}
230.}