1 16 17 package org.mc4j.console.swing; 18 19 import java.text.DecimalFormat ; 20 import java.util.Hashtable ; 21 22 import javax.swing.*; 23 import javax.swing.event.ChangeEvent ; 24 import javax.swing.event.ChangeListener ; 25 26 33 public class LogarithmicTimeJSlider extends LogarithmicJSlider { 34 35 36 public LogarithmicTimeJSlider(int orientation) { 37 super(orientation); 38 } 39 40 public LogarithmicTimeJSlider(int min, int max) { 41 super(min, max); 42 } 43 44 public LogarithmicTimeJSlider(int min, int max, int value) { 45 super(min, max, value); 46 } 47 48 public LogarithmicTimeJSlider(int orientation, int min, int max, int value) { 49 super(orientation, min, max, value); 50 } 51 52 public LogarithmicTimeJSlider(BoundedRangeModel brm) { 53 super(brm); 54 } 55 56 public LogarithmicTimeJSlider() { 57 super(); 58 } 59 60 protected static DecimalFormat format = new DecimalFormat ("#.#"); 61 62 protected void createLabels(Hashtable table, int increment, int start) { 63 for (int labelIndex = start; labelIndex <= getMaximum(); labelIndex *= increment) { 64 String label = formatMilleseconds(labelIndex); 65 table.put(new Integer (labelIndex), new LabelUIResource(label, JLabel.CENTER)); 66 } 67 } 68 69 public String getTime() { 70 return formatMilleseconds(getValue()); 71 } 72 73 public String formatMilleseconds(int labelIndex) { 74 String label; 75 if (labelIndex >= (1000 * 60 * 60 * 24)) { 76 label = format.format(labelIndex / (double)(1000 * 60 * 60 * 24)) + " days"; 77 } else if (labelIndex >= (1000 * 60 * 60)) { 78 label = format.format(labelIndex / (double)(1000 * 60 * 60)) + " hours"; 79 } else if (labelIndex >= (double)(1000 * 60)) { 80 label = format.format(labelIndex / (double)(1000 * 60)) + " mins"; 81 } else if (labelIndex >= 1000) { 82 label = format.format(labelIndex / (double)1000) + " secs"; 83 } else { 84 label = labelIndex + " ms"; 85 } 86 return label; 87 } 88 89 90 94 public static void main(String [] args) { 95 JFrame frame = new JFrame(); 96 frame.setSize(408, 408); 97 98 final LogarithmicTimeJSlider slider = new LogarithmicTimeJSlider(1000, 1000 * 60 * 60 * 24 * 7, 1000); 99 final JLabel label = new JLabel(); 100 101 slider.setPaintTicks(true); 102 slider.setPaintLabels(true); 103 slider.setMajorTickSpacing(10); 104 slider.setMinorTickSpacing(10); 105 106 slider.addChangeListener(new ChangeListener () { 107 public void stateChanged(ChangeEvent e) { 108 System.out.println("Value is now: " + slider.getValue()); 109 110 111 label.setText("Current value is: " + slider.formatMilleseconds(slider.getValue())); 112 113 } 114 }); 115 116 frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); 117 frame.getContentPane().add(slider); 118 frame.getContentPane().add(label); 119 frame.setVisible(true); 120 121 LogSliderUI ui = (LogSliderUI) slider.getUI(); 122 for (int i = 10; i <= 100000; i *= 10) { 123 System.out.println("I: " + i + " xPos: " + ui.xPositionForValue(i) + " valueFor: " + ui.valueForXPosition(ui.xPositionForValue(i))); 124 } 125 126 } 127 } 128 | Popular Tags |