package info.u250.c2d.box2deditor.ui.controls; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.GroupLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import java.awt.Color; public class Vector2Panel extends JPanel implements ActionListener { /** The version id */ private static final long serialVersionUID = 5446710351912720509L; /** The text field for the x value */ public JSpinner spinnerX; /** The text field for the y value */ public JSpinner spinnerY; /** The button to remove the point */ public JButton btnRemove; /** The button to add the point */ public JButton btnAdd; public JLabel lblNumber ; /** * Full constructor. * @param x the initial x value * @param y the initial y value */ public Vector2Panel() { JLabel lblX = new JLabel("X"); JLabel lblY = new JLabel("Y"); this.spinnerX = new JSpinner(); this.spinnerY = new JSpinner(); this.btnAdd = new JButton(); btnAdd.setIcon(new ImageIcon(Vector2Panel.class.getResource("/info/u250/c2d/box2deditor/ui/res/add-icon.png"))); this.btnAdd.addActionListener(this); this.btnAdd.setActionCommand("add"); this.btnRemove = new JButton(); btnRemove.setIcon(new ImageIcon(Vector2Panel.class.getResource("/info/u250/c2d/box2deditor/ui/res/remove-icon.png"))); this.btnRemove.addActionListener(this); this.btnRemove.setActionCommand("remove"); lblNumber = new JLabel(); lblNumber.setForeground(Color.RED); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setAutoCreateGaps(true); layout.setHonorsVisibility(true); layout.setHorizontalGroup(layout.createSequentialGroup() .addComponent(this.lblNumber) .addComponent(this.spinnerX) .addComponent(lblX, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(this.spinnerY) .addComponent(lblY, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(this.btnAdd, 25,25,25) .addComponent(this.btnRemove, 25,25,25)); layout.setVerticalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER) .addComponent(lblNumber) .addComponent(this.spinnerX, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(lblX) .addComponent(this.spinnerY, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(lblY) .addComponent(this.btnAdd, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(this.btnRemove, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))); } /** * Adds an action listener to listen for button events. * @param actionListener the action listener to add */ public void addActionListener(ActionListener actionListener) { this.listenerList.add(ActionListener.class, actionListener); } /* (non-Javadoc) * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { ActionListener[] listeners = this.getListeners(ActionListener.class); // set the source to this e.setSource(this); // forward the event to the listeners on this class for (ActionListener listener : listeners) { listener.actionPerformed(e); } } /** * Returns the x value of the point. * @return double */ public double getValueX() { Number number = (Number)this.spinnerX.getValue(); return number.doubleValue(); } /** * Returns the y value of the point. * @return double */ public double getValueY() { Number number = (Number)this.spinnerY.getValue(); return number.doubleValue(); } }