package edu.jsu.leathrum.mathlets.shared; import javax.swing.*; import java.awt.event.*; import java.awt.Dimension; import java.awt.Insets; import java.awt.Dimension; abstract public class AButtonSet extends JPanel implements ActionListener, FieldHandler { RepeatingButton plusButton = new RepeatingButton("+"); RepeatingButton minusButton = new RepeatingButton("-"); FormattedLabel number = new FormattedLabel(""); String name = ""; String value = ""; String after = " "; // for a bit of growth space; can be overridden Box b1 = new Box(BoxLayout.X_AXIS); Box b2 = new Box(BoxLayout.X_AXIS); Box b3 = new Box(BoxLayout.Y_AXIS); public AButtonSet() { b1.add(Box.createHorizontalGlue()); b1.add(number); b2.add(Box.createHorizontalGlue()); b2.add(minusButton); b2.add(plusButton); b3.add(b1); b3.add(b2); add(b3); plusButton.addActionListener(this); minusButton.addActionListener(this); plusButton.setRepeat(0,0); minusButton.setRepeat(0,0); setOpaque(false); b1.setOpaque(false); b2.setOpaque(false); b3.setOpaque(false); plusButton.setOpaque(false); minusButton.setOpaque(false); } public void setRepeat(int bf, int bt) { plusButton.setRepeat(bf,bt); minusButton.setRepeat(bf,bt); } public void setRepeat() { setRepeat(500,200); } private void setText() { number.setText(name + AMathlet.getProperty("equal") + value + after); number.repaint(); } public void setName(String newName) { name = newName; // this seems like as good a time as any to adjust the buttons // first, make sure the labels are right plusButton.setText(AMathlet.getProperty("plusbutton")); minusButton.setText(AMathlet.getProperty("minusbutton")); // make the buttons as small as possible plusButton.setMargin(new Insets(0,0,0,0)); minusButton.setMargin(new Insets(0,0,0,0)); // get these smallest dimensions Dimension ps = plusButton.getMinimumSize(); Dimension ms = minusButton.getMinimumSize(); // find the largest one int mx = Math.max(Math.max(ps.height,ps.width),Math.max(ms.height,ms.width)); // adjust margins so that both buttons are square, and the same size, mx-by-mx plusButton.setMargin(new Insets((mx-ps.height)/2,(mx-ps.width)/2,(mx-ps.height)/2,(mx-ps.width)/2)); minusButton.setMargin(new Insets((mx-ms.height)/2,(mx-ms.width)/2,(mx-ms.height)/2,(mx-ms.width)/2)); setText(); } public void setValueString(String newValue) { value = newValue; setText(); } public String getValueString() { return value; } public void setAfter(String s) { after = s; setText(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == plusButton) { plusAction(); setText(); } else if (e.getSource() == minusButton) { minusAction(); setText(); } } String def = ""; public void setDefault(String dval) { def = dval; } public void setToDefault() { setValueString(def); } public void setField(String val) { setValueString(val); } public String getField() { return getValueString(); } protected abstract void plusAction(); protected abstract void minusAction(); }