For this assignment, you will design and implement a GUI-based 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 will also need to design and build a graphical user interface for allowing the user to enter a word and view its anagrams. For example, a basic GUI might look like the following:
Note that this is the minimum functionality that your GUI must provide. You are encouraged to explore netBeans' GUI Builder and the Java Swing libraries, and add additional functionality (e.g., allowing for different dictionaries). A dictionary of more than 117 thousand words is provided for you in dictionary.txt.
You must demonstrate good programming style when completing this assignment, including the appropriate use of Javadoc-style comments for all classes and methods.