1 package prefuse.util.ui; 2 3 import java.awt.Color ; 4 import java.awt.Dimension ; 5 6 import javax.swing.BorderFactory ; 7 import javax.swing.Box ; 8 import javax.swing.BoxLayout ; 9 import javax.swing.JFrame ; 10 import javax.swing.JPanel ; 11 import javax.swing.event.ChangeEvent ; 12 import javax.swing.event.ChangeListener ; 13 14 import prefuse.util.force.Force; 15 import prefuse.util.force.ForceSimulator; 16 17 24 public class JForcePanel extends JPanel { 25 26 private ForcePanelChangeListener lstnr = new ForcePanelChangeListener(); 27 private ForceSimulator fsim; 28 29 33 public JForcePanel(ForceSimulator fsim) { 34 this.fsim = fsim; 35 this.setBackground(Color.WHITE); 36 initUI(); 37 } 38 39 42 private void initUI() { 43 this.setLayout(new BoxLayout (this, BoxLayout.Y_AXIS)); 44 Force[] forces = fsim.getForces(); 45 for ( int i=0; i<forces.length; i++ ) { 46 Force f = forces[i]; 47 Box v = new Box (BoxLayout.Y_AXIS); 48 for ( int j=0; j<f.getParameterCount(); j++ ) { 49 JValueSlider field = createField(f,j); 50 field.addChangeListener(lstnr); 51 v.add(field); 52 } 53 String name = f.getClass().getName(); 54 name = name.substring(name.lastIndexOf(".")+1); 55 v.setBorder(BorderFactory.createTitledBorder(name)); 56 this.add(v); 57 } 58 } 59 60 63 private static JValueSlider createField(Force f, int param) { 64 double value = f.getParameter(param); 65 double min = f.getMinValue(param); 66 double max = f.getMaxValue(param); 67 String name = f.getParameterName(param); 68 69 JValueSlider s = new JValueSlider(name,min,max,value); 70 s.setBackground(Color.WHITE); 71 s.putClientProperty("force", f); 72 s.putClientProperty("param", new Integer (param)); 73 s.setPreferredSize(new Dimension (300,30)); 74 s.setMaximumSize(new Dimension (300,30)); 75 return s; 76 } 77 78 81 private static class ForcePanelChangeListener implements ChangeListener { 82 public void stateChanged(ChangeEvent e) { 83 JValueSlider s = (JValueSlider)e.getSource(); 84 float val = s.getValue().floatValue(); 85 Force f = (Force)s.getClientProperty("force"); 86 Integer p = (Integer )s.getClientProperty("param"); 87 f.setParameter(p.intValue(), val); 88 } 89 } 91 98 public static JFrame showForcePanel(ForceSimulator fsim) { 99 JFrame frame = new JFrame ("prefuse Force Simulator"); 100 frame.setContentPane(new JForcePanel(fsim)); 101 frame.pack(); 102 frame.setVisible(true); 103 return frame; 104 } 105 106 } | Popular Tags |