/* * ####################################################### * * Copyright (c) 2013, A. Weinberger. All rights reserved. * -------------------------------------------------------- */ package ale.view.gui.editor.fields; import java.awt.Color; import java.awt.Dimension; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTextField; import ale.view.gui.GUIConstants; import ale.view.gui.util.VerticalLayout; public abstract class BorderField extends Field { private static final long serialVersionUID = 1L; private static final int NUMBERLENGTH = 3; private static final int FIELDHEIGHT = 80; public BorderField(int[] initialValue, Color bg, String fieldTitle) { if ((initialValue != null) && (initialValue.length != 4)) { throw new IllegalArgumentException(); } if (bg == null) { bg = Color.WHITE; } if (fieldTitle == null) { fieldTitle = ""; } create(initialValue, bg, fieldTitle); } public abstract void leftFieldOnKeyReleased(String input); public abstract void topFieldOnKeyReleased(String input); public abstract void rightFieldOnKeyReleased(String input); public abstract void bottomFieldOnKeyReleased(String input); public abstract int[] reset(); private void create(int[] init, Color bg, String fieldTitle) { setPreferredSize(new Dimension(GUIConstants.DEFAULT_FIELD_WIDTH, FIELDHEIGHT)); setBackground(bg); setBorder(BorderFactory.createTitledBorder(fieldTitle)); setLayout(new VerticalLayout(0, VerticalLayout.CENTER)); setToolTipText(Field.strBorderTooltip); JPanel panel = new JPanel(); panel.setBackground(bg); this.add(panel); final JTextField left = new JTextField(); left.setColumns(NUMBERLENGTH + 1); left.setToolTipText(Field.strBorderTooltip); panel.add(left); final JTextField top = new JTextField(); top.setColumns(NUMBERLENGTH + 1); top.setToolTipText(Field.strBorderTooltip); panel.add(top); final JTextField right = new JTextField(); right.setColumns(NUMBERLENGTH + 1); right.setToolTipText(Field.strBorderTooltip); panel.add(right); final JTextField bottom = new JTextField(); bottom.setColumns(NUMBERLENGTH + 1); bottom.setToolTipText(Field.strBorderTooltip); panel.add(bottom); if (init != null) { left.setText(init[0] + ""); top.setText(init[1] + ""); right.setText(init[2] + ""); bottom.setText(init[3] + ""); } left.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (controlThicknessInput(left, NUMBERLENGTH, false)) { leftFieldOnKeyReleased(left.getText()); } } }); top.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (controlThicknessInput(top, NUMBERLENGTH, false)) { topFieldOnKeyReleased(top.getText()); } } }); right.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (controlThicknessInput(right, NUMBERLENGTH, false)) { rightFieldOnKeyReleased(right.getText()); } } }); bottom.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (controlThicknessInput(bottom, NUMBERLENGTH, false)) { bottomFieldOnKeyReleased(bottom.getText()); } } }); JButton reset = new JButton(super.strReset); reset.setBackground(bg); this.add(reset); reset.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int[] tmp = reset(); if (tmp != null) { left.setText(tmp[0] + ""); top.setText(tmp[1] + ""); right.setText(tmp[2] + ""); bottom.setText(tmp[3] + ""); } else { left.setText(""); top.setText(""); right.setText(""); bottom.setText(""); } } }); } }