===== TODAY WE WILL ===== * announcements * intro to threads (and a little Graphics in Java...) * prep for next class! * still in (reading) * Chapter 12 - Section 12.1, 12.2, 12.3 * Chapter 10 - Section 10.3 * FIRST: a few words about Graphics and Swing... FIRST thing: * paint your graphics on another component BESIDES a JFrame, please! (JFrames are reallllly intended to be a container of containers...) * JPanels work very nicely to be painted upon SECOND thing: * to paint/draw on a JComponent (such as a JPanel), you OVERRIDE the inherited paintComponent method in your subclass component you wish to paint/draw on * void method * has an argument! An object of type Graphics * course text, p. 576: "All drawing in Java must go through a Graphics object." THIRD thing: * YOU don't call paintComponent! (So YOU don't have to worry about creating or comping up with its Graphics argument!?!?) IT is called AUTOMATICALLY whenever a part of the application needs to be redrawn -- you SHOULD NOT INTERFERE with this automatic process (also noted on p. 576) * wait -- what if you WANT to repaint the screen? You call the method repaint(); <-- no arguments! a method the JComponent inherits! * p. 576: "The repaint method will cause paintComponent to be called for all components, with a properly configured Graphics object." * Measurement on a Graphics object for screen display is done in pixels * The (0, 0) coordinate denotes the top-left corner of the component on whose surface you are drawing * [is this still recommended?] I was originally taught that it was good/wise to call the inherited version of paintComponent as the first statement in my overridden paintComponent: public void paintComponent(Graphics g) { super.paintComponent(g); // then your code to paint/draw what you want... * a few selected Graphics methods: setFont -- expects a Font argument, that becomes the font used for painted strings; setColor -- expects a Color argument, that becomes the color for stuff drawn drawString -- expects a string-to-draw, pixel-loc-x-of-bottom-left, pixel-loc-y-of-bottom-;eft that's where the given string is drawn * Swing is not thread-safe?!? that is: if you try to manipulate user interface elements from MULTIPLE threads, then your user interface can become corrupted; * this is the reason we construct our JFrame subclasses in the event dispatch thread in our Java GUI applications, I believe;