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 | 59 | nbrodin | 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 | 316 | omartinez | import java.util.List; |
20 | 59 | nbrodin | |
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 | 316 | omartinez | final List<NamedPoint> coordsList = SextanteGUI.getGUIFactory().getCoordinatesList(); |
78 | if (!coordsList.isEmpty()) {
|
||
79 | 59 | nbrodin | 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 | } |