Statistics
| Revision:

root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.gui / src / main / java / es / unex / sextante / gui / algorithm / PointSelectionPanel.java @ 338

History | View | Annotate | Download (3.33 KB)

1
package es.unex.sextante.gui.algorithm;
2

    
3
import info.clearthought.layout.TableLayout;
4
import info.clearthought.layout.TableLayoutConstants;
5

    
6
import java.awt.event.ActionEvent;
7
import java.awt.event.ActionListener;
8
import java.awt.geom.Point2D;
9

    
10
import javax.swing.JButton;
11
import javax.swing.JLabel;
12
import javax.swing.JOptionPane;
13
import javax.swing.JPanel;
14
import javax.swing.JTextField;
15

    
16
import es.unex.sextante.core.Sextante;
17
import es.unex.sextante.gui.core.NamedPoint;
18
import es.unex.sextante.gui.core.SextanteGUI;
19
import java.util.List;
20

    
21
/**
22
 * A panel with two text fields, to introduce point coordinates. It also features a button to access pre-stored coordinates
23
 * 
24
 * @author volaya
25
 * 
26
 */
27
public class PointSelectionPanel
28
         extends
29
            JPanel {
30

    
31
   private JTextField textFieldX;
32
   private JButton    jButton;
33
   private JTextField textFieldY;
34
   private JLabel     labelX;
35
   private JLabel     labelY;
36

    
37

    
38
   PointSelectionPanel() {
39

    
40
      super();
41

    
42
      initGUI();
43

    
44
   }
45

    
46

    
47
   private void initGUI() {
48

    
49
      textFieldX = new JTextField("0");
50
      textFieldY = new JTextField("0");
51
      labelX = new JLabel(" X:");
52
      labelY = new JLabel(" Y:");
53
      jButton = new JButton();
54
      jButton.setText("...");
55

    
56
      final TableLayout thisLayout = new TableLayout(new double[][] {
57
               { 25.0, TableLayoutConstants.FILL, 25.0, TableLayoutConstants.FILL, 5.0, 25.0, 5.0 },
58
               { TableLayoutConstants.FILL } });
59
      this.setLayout(thisLayout);
60
      this.setPreferredSize(new java.awt.Dimension(128, 22));
61
      this.add(labelX, "0,  0");
62
      this.add(textFieldX, "1,  0");
63
      this.add(labelY, "2,  0");
64
      this.add(textFieldY, "3,  0");
65
      this.add(jButton, "5, 0");
66
      jButton.addActionListener(new ActionListener() {
67
         public void actionPerformed(final ActionEvent evt) {
68
            showPointSelector();
69
         }
70
      });
71

    
72
   }
73

    
74

    
75
   protected void showPointSelector() {
76

    
77
      final List<NamedPoint> coordsList = SextanteGUI.getGUIFactory().getCoordinatesList();
78
      if (!coordsList.isEmpty()) {
79
         final NamedPoint[] pts = coordsList.toArray(new NamedPoint[0]);
80
         final NamedPoint pt = (NamedPoint) JOptionPane.showInputDialog(this, Sextante.getText("Select_coordinates"),
81
                  Sextante.getText("Coordinates"), JOptionPane.PLAIN_MESSAGE, null, pts, null);
82
         if (pt != null) {
83
            textFieldX.setText(Double.toString(pt.getPoint().getX()));
84
            textFieldY.setText(Double.toString(pt.getPoint().getY()));
85
         }
86
      }
87

    
88
   }
89

    
90

    
91
   /**
92
    * Returns the selected point
93
    * 
94
    * @return the point introduced using this panel
95
    */
96
   public Point2D getPoint() {
97

    
98
      try {
99
         final Point2D pt = new Point2D.Double(Double.parseDouble(textFieldX.getText()), Double.parseDouble(textFieldY.getText()));
100
         return pt;
101
      }
102
      catch (final Exception e) {
103
         return null;
104
      }
105

    
106
   }
107

    
108

    
109
   /**
110
    * Sets the current point
111
    * 
112
    * @param point
113
    *                the new point to set
114
    */
115
   public void setPoint(final Point2D point) {
116

    
117
      textFieldX.setText(Double.toString(Math.floor(point.getX() * 10000.) / 10000.));
118
      textFieldY.setText(Double.toString(Math.floor(point.getY() * 10000.) / 10000.));
119

    
120
   }
121

    
122
}