You may choose whether to provide an RPN user interface (like an HP calculator: you type in a number, press the "enter" button, type another number, and then press a button for one of the operations to see the answer) or an infix user interface (you type in a number, press a button for one of the operations, type another number, and press the "=" button to see the answer). In either case, the answer should appear in the same TextField(s) that the user's input did.
You are expected to write a class named "Fraction" (perhaps a subclass of "Number") that stores the numerator and denominator of a fraction, and implements methods to add, subtract, multiply, and divide itself by another fraction, returning a new Fraction object. It will also need a method which reduces the Fraction to lowest terms, either returning a new Fraction object or modifying itself. Also implement whatever constructors, toString methods, etc. you think appropriate.
Note: Your "Fraction" class should not be the program itself. A fraction is not a program. A fraction is not a kind of Applet, or Frame, or anything like that; a fraction is a mathematical object with a numerator, a denominator, and certain operations. Your fraction class should concern itself only with mathematical operations, not user-interface issues.
Your program will be graded on correctness, elegance and maintainability of object-oriented design, user-friendliness, and efficiency, in that order. A crude calculator program is provided in the Core Java book on pages 268-269, and you may get some ideas from this, but your program will be quite different in both appearance and operation.
For extra credit, add a square-root key. Note that the square root of an integer fraction may not be an integer fraction: for example, the square root of 5/12 could only be written as sqrt(5)/(2 sqrt(3)), or perhaps (rationalizing the denominator) as sqrt(15) / 6. You'll need to decide how to represent roots, both on the screen and inside the computer; this may require inventing another class named Root or something like that, to be used inside Fraction.