正方形の周長 #5

これまでと逆で、周の長さから辺の長さが得られるようにも変更する。
どちらの長さもJTextFieldで入力し、一方が変更されればもう一方をそれに合わせて変更する。

...snip
public class SquarePerimeter implements Runnable, ActionListener {
    private JTextField side = new JTextField("0", 10);
    private JTextField peri = new JTextField("0", 10);

...snip
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel lside = new JLabel("length of each side");
...snip
        side.addActionListener(this);
        peri.addActionListener(this);
        f.pack();
...snip
    public void actionPerformed(ActionEvent e) {
        Object o = e.getSource();
        if (o == side) {
            try {
                double s = Double.parseDouble(side.getText());
                if (s < 0) throw new NumberFormatException("invalid negative value: " + s);
                peri.setText(String.valueOf(s * 4));
            } catch (NumberFormatException ex) {
                side.setText(String.valueOf(Double.parseDouble(peri.getText()) / 4));
            }
        } else if (o == peri) {
            try {
                double p = Double.parseDouble(peri.getText());
                if (p < 0) throw new NumberFormatException("invalid negative value: " + p);
                side.setText(String.valueOf(p / 4));
            } catch (NumberFormatException ex) {
                peri.setText(String.valueOf(Double.parseDouble(side.getText()) * 4));
            }
        }
    }
...snip