For this assignment, you will design and implement a Java application that identifies all anagrams of a given word. As you may recall, two words are considered anagrams if they contain the same letters, each with the same frequencies. For example, "pale" and "leap" are anagrams, since they contain the exact same letters. Likewise, "tater" is an angram of "treat", but "tatter" is not (since there are 3 t's in "tatter" but only 2 in "treat"). By default, a word is considered to be an angram of itself.
In designing your solution, you should strive to follow good object-oriented design principles. That is, define one or more highly cohesive classes to represent the objects involved in the solution. These classes should be loosely coupled, so that the implementation details of one are independent of the others. You must demonstrate good programming style when completing this assignment, including the appropriate use of Javadoc-style comments for all classes and methods.
A dictionary of more than 117 thousand words is provided for you in dictionary.txt.
For 80% credit: Your code must be able to read a word from the user and display all anagrams of that word that are contained in the provided dictionary. You may use a console interface, with the word read in using a Scanner.
For full credit: You will need to design and build a graphical user interface for allowing the user to repeatedly enter a word and view its anagrams. A basic (and sufficient) design is shown below, but you are encouraged to explore netBeans' GUI Builder and the Java Swing libraries, and add additional functionality (e.g., allowing for different dictionaries).