1 package prefuse.util.display; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Dimension ; 5 import java.awt.Graphics ; 6 import java.awt.Image ; 7 8 import javax.swing.Box ; 9 import javax.swing.BoxLayout ; 10 import javax.swing.JComponent ; 11 import javax.swing.JLabel ; 12 import javax.swing.JSlider ; 13 import javax.swing.event.ChangeEvent ; 14 import javax.swing.event.ChangeListener ; 15 16 22 public class ScaleSelector extends JComponent implements ChangeListener { 23 24 private final static int MAX_SIZE = 135; 25 26 private ImagePanel preview; 27 private JLabel value; 28 private JLabel size; 29 private JSlider slider; 30 private Image image; 31 private int width, height; 32 33 36 public ScaleSelector() { 37 slider = new JSlider (1,10,1); 38 value = new JLabel ("x1"); 39 size = new JLabel (" "); 40 preview = new ImagePanel(); 41 42 value.setPreferredSize(new Dimension (25,10)); 43 size.setHorizontalAlignment(JLabel.CENTER); 44 slider.setMajorTickSpacing(1); 45 slider.setSnapToTicks(true); 46 slider.addChangeListener(this); 47 48 setLayout(new BorderLayout ()); 49 50 Box b1 = new Box (BoxLayout.X_AXIS); 51 b1.add(Box.createHorizontalStrut(5)); 52 b1.add(Box.createHorizontalGlue()); 53 b1.add(preview); 54 b1.add(Box.createHorizontalGlue()); 55 b1.add(Box.createHorizontalStrut(5)); 56 add(b1, BorderLayout.CENTER); 57 58 Box b2 = new Box (BoxLayout.X_AXIS); 59 b2.add(slider); 60 b2.add(Box.createHorizontalStrut(5)); 61 b2.add(value); 62 63 Box b3 = new Box (BoxLayout.X_AXIS); 64 b3.add(Box.createHorizontalStrut(5)); 65 b3.add(Box.createHorizontalGlue()); 66 b3.add(size); 67 b3.add(Box.createHorizontalGlue()); 68 b3.add(Box.createHorizontalStrut(5)); 69 70 Box b4 = new Box (BoxLayout.Y_AXIS); 71 b4.add(b2); 72 b4.add(b3); 73 add(b4, BorderLayout.SOUTH); 74 } 75 76 80 public void setImage(Image img) { 81 image = getScaledImage(img); 82 stateChanged(null); 83 } 84 85 90 private Image getScaledImage(Image img) { 91 int w = width = img.getWidth(null); 92 int h = height = img.getHeight(null); 93 double ar = ((double)w)/h; 94 95 int nw = MAX_SIZE, nh = MAX_SIZE; 96 if ( w > h ) { 97 nh = (int)Math.round(nw/ar); 98 } else { 99 nw = (int)Math.round(nh*ar); 100 } 101 return img.getScaledInstance(nw,nh,Image.SCALE_SMOOTH); 102 } 103 104 108 public void stateChanged(ChangeEvent evt) { 109 int scale = slider.getValue(); 110 value.setText("x"+String.valueOf(scale)); 111 size.setText("Image Size: "+(width*scale)+" x "+(height*scale)+" pixels"); 112 preview.repaint(); 113 } 114 115 119 public double getScale() { 120 return slider.getValue(); 121 } 122 123 127 public class ImagePanel extends JComponent { 128 Dimension d = new Dimension (MAX_SIZE, MAX_SIZE); 129 public ImagePanel() { 130 this.setPreferredSize(d); 131 this.setMinimumSize(d); 132 this.setMaximumSize(d); 133 } 134 public void paintComponent(Graphics g) { 135 double scale = 0.4+(0.06*getScale()); 136 int w = (int)Math.round(scale*image.getWidth(null)); 137 int h = (int)Math.round(scale*image.getHeight(null)); 138 Image img = (scale == 1.0 ? image : 139 image.getScaledInstance(w,h,Image.SCALE_DEFAULT)); 140 int x = (MAX_SIZE-w)/2; 141 int y = (MAX_SIZE-h)/2; 142 g.drawImage(img,x,y,null); 143 } 144 } 145 146 } | Popular Tags |