package translator; import java.awt.Color; import java.awt.Component; import java.awt.MediaTracker; import java.net.URL; import javax.swing.ImageIcon; import animal.misc.MessageDisplay; import components.ArrayInputTable; import components.ColorChooserComboBox; import components.FontChooserComboBox; import components.IntegerTextField; import components.IntegerTextFieldEx; import components.MatrixInputTable; /** * Provides a common interface for translatable GUI element generation Requires * an appropriate resource file containing the message translations. * * @version 1.1 2000-01-11 * @author Guido Rößling ( * roessling@acm.org) */ public class AnimalSpecificTranslatableGUIElement extends TranslatableGUIElement { /** * Generate a new GUI generator using the concrete Translator passed in * * @param t * the current Translator for this object */ public AnimalSpecificTranslatableGUIElement(Translator t) { super(t); } /** * Method for generating a new ArrayInputTable, with an empty Constructor. * * @param key * The Key for the new ArrayInputTable. * @return A new ArrayInputTable-Object. */ public ArrayInputTable generateArrayInputTable(String key) { ArrayInputTable internalArrayInputTable = new ArrayInputTable(); internalArrayInputTable.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); internalArrayInputTable.setLocalHeaderString(getTranslator() .translateMessage("element")); registerComponent(key, internalArrayInputTable); return internalArrayInputTable; } /** * Method for generating a new ArrayInputTable. * * @param key * The Key for the new ArrayInputTable. * @param numElements * The number of elements in the table. * @return A new ArrayInputTable-Object. */ public ArrayInputTable generateArrayInputTable(String key, int numElements) { ArrayInputTable internalArrayInputTable = new ArrayInputTable(numElements); internalArrayInputTable.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); internalArrayInputTable.setLocalHeaderString(getTranslator() .translateMessage("element")); registerComponent(key, internalArrayInputTable); return internalArrayInputTable; } /** * Method for generating a new ArrayInputTable, with passed int values. * * @param key * The Key for the new ArrayInputTable. * @param newValues * The int-values to use in the table. * @return A new ArrayInputTable-Object. */ public ArrayInputTable generateArrayInputTable(String key, int[] newValues) { ArrayInputTable internalArrayInputTable = new ArrayInputTable(newValues); internalArrayInputTable.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); internalArrayInputTable.setLocalHeaderString(getTranslator() .translateMessage("element")); registerComponent(key, internalArrayInputTable); return internalArrayInputTable; } /** * Method for generating a new ArrayInputTable, with passed String values. * * @param key * The Key for the new ArrayInputTable. * @param newValues * The String-values to use in the table. * @return A new ArrayInputTable-Object. */ public ArrayInputTable generateArrayInputTable(String key, String[] newValues) { ArrayInputTable internalArrayInputTable = new ArrayInputTable(newValues); internalArrayInputTable.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); internalArrayInputTable.setLocalHeaderString(getTranslator() .translateMessage("element")); registerComponent(key, internalArrayInputTable); return internalArrayInputTable; } /** * Method for generating a new ColorChooserComboBox, with an empty * Constructor. * * @param key * The Key for the new ColorChooserComboBox. * @return A new ColorChooserComboBox-Object. */ public ColorChooserComboBox generateColorChooserComboBox(String key) { ColorChooserComboBox internalComboBox = new ColorChooserComboBox(); // translate all the Strings for this component String[] strKeys = internalComboBox.getTranslatorKeys(); String[] strLocal = new String[strKeys.length]; for (int i = 0; i < strKeys.length; i++) { strLocal[i] = getTranslator().translateMessage(strKeys[i]); } internalComboBox.setLocalStrings(strLocal); internalComboBox.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalComboBox); return internalComboBox; } /** * Method for generating a new ColorChooserComboBox and setting the selected * Color. * * @param key * The Key for the new ColorChooserComboBox. * @param colorSelected * The Color that should be selected (as a Color). * @return A new ColorChooserComboBox-Object. */ public ColorChooserComboBox generateColorChooserComboBox(String key, Color colorSelected) { ColorChooserComboBox internalComboBox = new ColorChooserComboBox( colorSelected); // translate all the Strings for this component String[] strKeys = internalComboBox.getTranslatorKeys(); String[] strLocal = new String[strKeys.length]; for (int i = 0; i < strKeys.length; i++) { strLocal[i] = getTranslator().translateMessage(strKeys[i]); } internalComboBox.setLocalStrings(strLocal); internalComboBox.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalComboBox); return internalComboBox; } /** * Method for generating a new ColorChooserComboBox and setting the selected * Color. * * @param key * The Key for the new ColorChooserComboBox. * @param strSelected * The Color that should be selected (as an Animal-Color-String). * @return A new ColorChooserComboBox-Object. */ public ColorChooserComboBox generateColorChooserComboBox(String key, String strSelected) { ColorChooserComboBox internalComboBox = new ColorChooserComboBox( strSelected); // translate all the Strings for this component String[] strKeys = internalComboBox.getTranslatorKeys(); String[] strLocal = new String[strKeys.length]; for (int i = 0; i < strKeys.length; i++) { strLocal[i] = getTranslator().translateMessage(strKeys[i]); } internalComboBox.setLocalStrings(strLocal); internalComboBox.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalComboBox); return internalComboBox; } /** * Method for generating a new FontChooserComboBox, with an empty Constructor. * * @param key * The Key for the new FontChooserComboBox. * @return A new FontChooserComboBox-Object. */ public FontChooserComboBox generateFontChooserComboBox(String key) { FontChooserComboBox internalComboBox = new FontChooserComboBox(); internalComboBox.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalComboBox); return internalComboBox; } /** * Method for generating a new FontChooserComboBox, and setting the default * Font. * * @param key * The Key for the new FontChooserComboBox. * @param selected * The default Font. Can be "Serif", "SansSerif" and "Monospaced". * @return A new FontChooserComboBox-Object. */ public FontChooserComboBox generateFontChooserComboBox(String key, String selected) { FontChooserComboBox internalComboBox = new FontChooserComboBox(selected); internalComboBox.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalComboBox); return internalComboBox; } /** * Method for generating a new IntegerTextField, with an empty Constructor. * * @param key * The Key for the new IntegerTextField. * @return A new IntegerTextField-Object. */ public IntegerTextField generateIntegerTextField(String key) { IntegerTextField internalIntegerTextField = new IntegerTextField(); internalIntegerTextField.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalIntegerTextField); return internalIntegerTextField; } /** * Method for generating a new IntegerTextField, and setting the default Text. * * @param key * The Key for the new IntegerTextField. * @param text * The Text that should be displayed. * @return A new IntegerTextField-Object. */ public IntegerTextField generateIntegerTextField(String key, String text) { IntegerTextField internalIntegerTextField = new IntegerTextField(text); internalIntegerTextField.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalIntegerTextField); return internalIntegerTextField; } /** * Method for generating a new IntegerTextFieldEx, with an empty Constructor. * * @param key * The Key for the new IntegerTextFieldEx. * @return A new IntegerTextFieldEx-Object. */ public IntegerTextFieldEx generateIntegerTextFieldEx(String key) { IntegerTextFieldEx internalIntegerTextField = new IntegerTextFieldEx(); internalIntegerTextField.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalIntegerTextField); return internalIntegerTextField; } /** * Method for generating a new IntegerTextFieldEx, and setting the default * Text. * * @param key * The Key for the new IntegerTextFieldEx. * @param text * The Text that should be displayed. * @return A new IntegerTextFieldEx-Object. */ public IntegerTextFieldEx generateIntegerTextFieldEx(String key, String text) { IntegerTextFieldEx internalIntegerTextField = new IntegerTextFieldEx(text); internalIntegerTextField.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); registerComponent(key, internalIntegerTextField); return internalIntegerTextField; } /** * Method for generating a new MatrixInputTable with an empty Constructor. * * @param key * The Key for the new ArrayInputTable. * @return A new MatrixInputTable-Object. */ public MatrixInputTable generateMatrixInputTable(String key) { MatrixInputTable internalMatrixInputTable = new MatrixInputTable(); internalMatrixInputTable.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); internalMatrixInputTable.setLocalHeaderString(getTranslator() .translateMessage("column")); registerComponent(key, internalMatrixInputTable); return internalMatrixInputTable; } /** * Method for generating a new MatrixInputTable. * * @param key * The Key for the new ArrayInputTable. * @param numRows * The number of displayed Rows. * @param numColumns * The number of displayed Columns. * @return A new MatrixInputTable-Object. */ public MatrixInputTable generateMatrixInputTable(String key, int numRows, int numColumns) { MatrixInputTable internalMatrixInputTable = new MatrixInputTable(numRows, numColumns); internalMatrixInputTable.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); internalMatrixInputTable.setLocalHeaderString(getTranslator() .translateMessage("column")); registerComponent(key, internalMatrixInputTable); return internalMatrixInputTable; } /** * Method for generating a new MatrixInputTable, with passed int values. * * @param key * The Key for the new ArrayInputTable. * @param newValues * The int-values to use in the table. * @return A new MatrixInputTable-Object. */ public MatrixInputTable generateMatrixInputTable(String key, int[][] newValues) { MatrixInputTable internalMatrixInputTable = new MatrixInputTable(newValues); internalMatrixInputTable.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); internalMatrixInputTable.setLocalHeaderString(getTranslator() .translateMessage("column")); registerComponent(key, internalMatrixInputTable); return internalMatrixInputTable; } /** * returns the imageIcon with the given name. * * @return null if the Icon could not be found or read,
* the Icon otherwise. */ public ImageIcon getImageIcon(String name) { if (name == null || name.length() == 0) return null; ImageIcon icon = null; URL url; if (animalImageDummy == null) try { animalImageDummy = Class.forName("graphics.AnimalImageDummy"); } catch (ClassNotFoundException cfe) { // System.err.println("@TGUI: AnimalImageDummy could not be found!"); } // Get current classloader if (animalImageDummy != null) { ClassLoader cl = animalImageDummy.getClassLoader(); if (cl != null) { url = cl.getResource("graphics/" +name); if (url != null) { icon = new ImageIcon(url); if (icon != null) return icon; } } else System.err.println("@TGUI: ClassLoader failed, null!"); } if (animalImageDummy != null) { url = animalImageDummy.getResource(GRAPHICS_PATH + name); } else { url = this.getClass().getResource(GRAPHICS_PATH + name); } if (url == null) MessageDisplay.errorMsg("iconNotFound", name +"@TGUI: ", MessageDisplay.CONFIG_ERROR); else if ((icon = new ImageIcon(url)) == null) MessageDisplay.errorMsg("iconNotFound", name +"@TGUI: ", MessageDisplay.CONFIG_ERROR); else if (icon.getImageLoadStatus() == MediaTracker.ERRORED) MessageDisplay.errorMsg("iconNotFound", name +"@TGUI: ", MessageDisplay.CONFIG_ERROR); return icon; } protected void updateComponent(String key, Component component) { super.updateComponent(key, component); if (component != null) { if (component instanceof ArrayInputTable) { ArrayInputTable ait = (ArrayInputTable) component; // translate the header of each column ait.setLocalHeaderString(getTranslator().translateMessage("element")); ait.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); } else if (component instanceof ColorChooserComboBox) { ColorChooserComboBox cc = (ColorChooserComboBox) component; // translate all the Strings for this component String[] strKeys = cc.getTranslatorKeys(); String[] strLocal = new String[strKeys.length]; for (int i = 0; i < strKeys.length; i++) { strLocal[i] = getTranslator().translateMessage(strKeys[i]); } cc.setLocalStrings(strLocal); cc.setToolTipText(getTranslator() .translateMessage(key + ".toolTipText")); } else if (component instanceof MatrixInputTable) { MatrixInputTable mit = (MatrixInputTable) component; // translate the header of each column mit.setLocalHeaderString(getTranslator().translateMessage("column")); mit.setToolTipText(getTranslator().translateMessage( key + ".toolTipText")); } } } }