001 package market.swing;
002
003 import javax.swing.JTextField;
004
005 import market.ValueChecker;
006
007 /**
008 * A text field, which is provided with an ID that makes it possible to query its contents from outside
009 * the defining class, without the need to write a get-method or even have the text field declared as
010 * public.<br>
011 * Furthermore, a {@link ValueChecker} is assigned, so that the text field's content can be easily checked
012 * for validity. This results in a huge reduction of redundant code that would be necessary when checking
013 * every text field manually.
014 * A JTFCheckable, however, works only in connection with a {@link market.stdform.FSCheckable}.
015 */
016 public class JTFCheckable extends JTextField {
017
018 private ValueChecker chk;
019 private int id;
020
021 /**
022 * @param id the ID of the JTFCheckable. Every ID must be unique to make sure the {@link market.stdform.FSCheckable}
023 * works properly.
024 * @param chk the ValueChecker for this JTFCheckable. It must not be <code>null</code>. If no checking
025 * is desired, use {@link market.VCDummy} instead.
026 * @param size the size of the JTFCheckable.
027 */
028 public JTFCheckable(int id, ValueChecker chk, int size) {
029 super(size);
030 this.id = id;
031 this.chk = chk;
032 }
033
034 /**
035 * @param id the ID of the JTFCheckable. Every ID must be unique to make sure the {@link market.stdform.FSCheckable}
036 * works properly.
037 * @param chk the ValueChecker for this JTFCheckable.
038 * @param str the content of the JTFCheckable right after creation.
039 * @param size the size of the JTFCheckable.
040 */
041 public JTFCheckable(int id, ValueChecker chk, String str, int size) {
042 super(str, size);
043 this.id = id;
044 this.chk = chk;
045 }
046
047 /**
048 * Checks the text field's content for validity with the help of the assigned {@link ValueChecker}.
049 *
050 * @return <code>true</code> if the content is valid, otherwise <code>false</code>.
051 */
052 public boolean hasValidValue() {
053 return chk.isValidValue(this.getText());
054 }
055
056 /**
057 * Asks the {@link ValueChecker} for an error message according to the kind of error.
058 * @return the picked error message.
059 */
060 public String getErrorMessage() {
061 return chk.getErrorString();
062 }
063
064 /**
065 * @return the ID.
066 */
067 public int getID() {
068 return id;
069 }
070 }