TODAY WE WILL: * announcements * intro to graphical user interfaces (GUIs) in Java * intro Java event handling and intro to Swing * prep for next class * Should be working on Homework 3! * Current reading: Course text * Chapter 10 - Graphical User Interface programming * Chapter 11 - Subsection 11.3.2 - Labels and Labeling components ===== * package-level access * features (classes, methods, or variables for example) that are not marked as either public or private are considered to have package-level access * the feature can be accessed by all methods in the same package * we're currently using the so-called unnamed package -- no package statement in our classes, and so all the classes in the same folder/directory are our current package ===== * we are using items from the package javax.swing ...which is built atop the old Abstract Windowing Kit AWT package: java.awt * top-level window (a window not contained in another window) is called a frame, and we'll be using the Swing JFrame class as the basis for our top-level windows our first example: see SimpleFrameTest * it is considered good Swing style to configure Swing interfaces in the so-called event dispatch thread (the thread of control that passes mouse clicks, key typing, etc. to user interface components ...we'll do this by constructing the frame in a lambda expression that's an argument to EventQueue.invokeLater EventQueue.invokeLater( () -> { desired_statements; } ); * fun fact: a JFrame becomes only when you make it visible with its setVisible method * fun fact: by default, a JFrame's size is 0 by 0 pixels...! * we'll tend to put components ONTO a JFrame (and draw on those as opposed to directly on the JFrame) * we can set a JFrame's title, though, with its setTitle method * but a common pattern: set up container instance add it to the JFrame ===== JOptionPane - your source for (relatively) easy dialog boxes! ===== * from package javax.swing * JOptionPane simpleDialog = newJOptionPane(); simpleDialog.showMessageDialog(null, Welcome to \nCS 235"); ===== what about some actual event handling? ===== * Java's event handling model (Java 1.1 event model) * an action (such as clicking on a button, typing in a textfield, moving a mouse into a container, etc.) is an event * if I want an application to react to an event, it needs event handling code * Java's event handling classes are in the package java.awt.event (and both Swing and AWT use these) import java.awt.event.*; * we have event SOURCES - like a button! An object interested in receiving events is an event listener. An event source (like that button) maintains a list of listeners that want to be notified when an event on that event source occurs. * so you register event listeneres for that event source and when an event occurs on that source, control is passed to the desired method to handle an event;