1 /* 2 * $Id: FrictionArea.java,v 1.3 2004/11/18 19:55:54 juhal Exp $ 3 */ 4 package org.xpilot.jxpmap; 5 6 import java.io.IOException; 7 import java.io.PrintWriter; 8 import java.math.BigDecimal; 9 import javax.swing.JOptionPane; 10 import javax.swing.JTextField; 11 import javax.swing.JLabel; 12 import java.util.Collection; 13 14 /** 15 * @author jli 16 */ 17 public class FrictionArea extends Group { 18 19 private BigDecimal friction; 20 FrictionArea()21 public FrictionArea() { 22 super(); 23 this.friction = new BigDecimal(0.0); 24 } 25 FrictionArea(Collection c)26 public FrictionArea(Collection c) { 27 this(c, new BigDecimal(0.0)); 28 } 29 FrictionArea(Collection c, BigDecimal friction)30 public FrictionArea(Collection c, BigDecimal friction) { 31 super(c); 32 setFriction(friction); 33 } 34 getFriction()35 public BigDecimal getFriction() { 36 return friction; 37 } 38 setFriction(BigDecimal value)39 public void setFriction(BigDecimal value) { 40 this.friction = value; 41 } 42 printXml(PrintWriter out)43 public void printXml(PrintWriter out) throws IOException { 44 out.println("<FrictionArea friction=\"" + getFriction() + "\">"); 45 super.printMemberXml(out); 46 out.println("</FrictionArea>"); 47 } 48 getPropertyEditor(MapCanvas canvas)49 public EditorPanel getPropertyEditor(MapCanvas canvas) { 50 return new FrictionEditor(canvas); 51 } 52 53 private class FrictionEditor extends EditorPanel { 54 55 private MapCanvas canvas; 56 private JTextField field; 57 FrictionEditor(MapCanvas canvas)58 public FrictionEditor(MapCanvas canvas) { 59 setTitle("Friction"); 60 field = new JTextField(4); 61 field.setText(getFriction().toString()); 62 add(new JLabel("Friction:")); 63 add(field); 64 this.canvas = canvas; 65 } 66 apply()67 public boolean apply() { 68 try { 69 BigDecimal newFriction = new BigDecimal(field.getText()); 70 double d = newFriction.doubleValue(); 71 if (d < -1.0 || d > 1.0) { 72 JOptionPane.showMessageDialog 73 (this, "The friction has to be between -1.0 and 1.0.", 74 "Information", JOptionPane.INFORMATION_MESSAGE); 75 return false; 76 } 77 setFriction(newFriction); 78 return true; 79 } catch (NumberFormatException nfe) { 80 JOptionPane.showMessageDialog 81 (this, "Invalid friction value: " + field.getText(), 82 "Error", JOptionPane.ERROR_MESSAGE); 83 return false; 84 } 85 } 86 } 87 } 88