package com.clearlyspam23.GLE.GUI.util;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.DocumentFilter;
import javax.swing.text.PlainDocument;
import com.clearlyspam23.GLE.util.FloatDocumentFilter;
import com.clearlyspam23.GLE.util.IntegerDocumentFilter;
import com.clearlyspam23.GLE.util.Vector2;
public class VectorComponent extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
private JTextField textField1;
private JTextField textField2;
private ArrayList<ActionListener> actionListeners = new ArrayList<ActionListener>();
private static final DecimalFormat format = new DecimalFormat("#.####");
public VectorComponent(){
this(true, true);
}
public VectorComponent(boolean allowsNegative){
this(allowsNegative, true);
}
/**
* Create the panel.
*/
public VectorComponent(boolean allowsNegative, boolean allowsDecimal) {
DocumentFilter filter = (allowsDecimal ? new FloatDocumentFilter(allowsNegative) : new IntegerDocumentFilter(allowsDecimal));
GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[]{86, 6, 86, 0};
gridBagLayout.rowHeights = new int[]{20, 0};
gridBagLayout.columnWeights = new double[]{1.0, 0.0, 1.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
setLayout(gridBagLayout);
textField1 = new JTextField();
textField1.addActionListener(this);
PlainDocument doc = new PlainDocument();
doc.setDocumentFilter(filter);
textField1.setDocument(doc);
textField1.setColumns(10);
GridBagConstraints gbc_textField1 = new GridBagConstraints();
gbc_textField1.fill = GridBagConstraints.HORIZONTAL;
gbc_textField1.anchor = GridBagConstraints.NORTH;
gbc_textField1.insets = new Insets(0, 0, 0, 5);
gbc_textField1.gridx = 0;
gbc_textField1.gridy = 0;
add(textField1, gbc_textField1);
JLabel label = new JLabel("x");
GridBagConstraints gbc_label = new GridBagConstraints();
gbc_label.insets = new Insets(0, 0, 0, 5);
gbc_label.gridx = 1;
gbc_label.gridy = 0;
add(label, gbc_label);
textField2 = new JTextField();
textField2.addActionListener(this);
doc = new PlainDocument();
doc.setDocumentFilter(filter);
textField2.setDocument(doc);
textField2.setColumns(10);
GridBagConstraints gbc_textField2 = new GridBagConstraints();
gbc_textField2.fill = GridBagConstraints.HORIZONTAL;
gbc_textField2.anchor = GridBagConstraints.NORTH;
gbc_textField2.gridx = 2;
gbc_textField2.gridy = 0;
add(textField2, gbc_textField2);
setXField(0);
setYField(0);
}
public JTextField getField1()
{
return textField1;
}
public JTextField getField2()
{
return textField2;
}
public double getXField(){
if(textField1.getText().length()<=0)
return 0;
try {
return format.parse(textField1.getText()).doubleValue();
} catch (ParseException e) {
//should never happen, thanks java
}
return 0;
}
public double getYField(){
if(textField2.getText().length()<=0)
return 0;
try {
return format.parse(textField2.getText()).doubleValue();
} catch (ParseException e) {
//should never happen, thanks java
}
return 0;
}
public void setXField(double x){
textField1.setText(format.format(x));
}
public void setYField(double y){
textField2.setText(format.format(y));
}
public Vector2 getVector(){
return new Vector2(getXField(), getYField());
}
public void setToVector(Vector2 vec){
setXField(vec.x);
setYField(vec.y);
}
@Override
public void setEnabled(boolean enabled){
super.setEnabled(enabled);
textField1.setEnabled(enabled);
textField2.setEnabled(enabled);
}
public void addActionListener(ActionListener listener){
actionListeners.add(listener);
}
public void removeActionListener(ActionListener listener){
actionListeners.remove(listener);
}
@Override
public void actionPerformed(ActionEvent arg0) {
for(ActionListener l : actionListeners){
l.actionPerformed(arg0);
}
}
}