=====
CS 235 - Week 6 Lecture - 2021-09-27
=====

=====
TODAY WE WILL
=====
*   announcements
*   more on GUI interfaces and event-handling in Java!
*   intro to borders!
*   intro to JTextField
*   prep for next class

*   current reading:
    *   from "Core Java":
        *   Chapter 10 - Graphical User Interface Programming
	*   Chapter 11 - 11.3.2 - labels and labeling components
	    Chapter 11 - 11.4.3 - borders
	    (and maybe more on exception handling --
	     Chapter 7 - 7.1, 7.2, 7.3 - related to exceptions)

*   so, for a variety of reasons...
    *   Exam 1 will be on Canvas instead of on-paper
    *   it will be on FRIDAY, OCTOBER 15th, DURING Lab time
        (3:00 - 5:00 pm)
	*   so, you can take it on Canvas in BSS 317 (and I will be
	    there)
	    OR you can take it on Canvas anywhere you have Internet
	    access (and I can answer questions via Zoom-chat)

======
HERE is the proposed revised schedule, then!
(PLEASE let me know, here OR in e-mail OR in Zoom student hours
 of any issues! questions! etc.)

*   Friday, OCT 1 - a lab exercise on this week's topics
    instead of Exam 1 review
    *   and Homework 4 is still due Friday, October 1st, 11:59 pm)

    *   and now a Homework 5 can come out that weekend,
        due Friday, October 8th

*   Monday, OCT 4 - we'll start layout managers instead of having
    Exam 1

*   Friday, OCT 8 - still no lab, due to instructor travel
    to CCSC-NW 2021

    *   but Homework 5 will be due 11:59 pm Friday, October 8

*   Monday, OCT 11 - REVIEW for Exam 1
    (instead of intro to layout mgrs)

    *   turn in any outstanding HW pieces by 11:59 pm on TUESDAY,
        OCT 12,
	then I can post example HW solutions by early WEDNESDAY,
	OCT 13th

*   FRIDAY, OCT 15 - EXAM 1, on Canvas, either in BSS 317 or
    in a location of your choosing that has Internet,
    from 3:00 - 5:00 pm

    *   and Homework 6 can then come out that weekend...!

========
*   we've seen just ONE of quite a number of Event SUBCLASSES
    and descendants: ActionEvent

    we've seen just ONE of quite a number of Interface SUB...INTERFACES?!
    and descendants: ActionEventListener

    *   Event - abstract Java class! with many descendant classes
    *   EventListener - Java interface! with many descendant
        interfaces!

=======
*   Borders!

*   an example of a "goodie" that Swing brought in!

*   another package!
    javax.swing.border

    (so, to be able to use all of its goodies
    without having to precede their names with

    javax.swing.border,

    import javax.swing.border.*;
    )

*   you can call setBorder for the component for which you watn
    a border;
    there are ways you can specify quite a bit yourself,
    and there are "canned" ways to get some commonly-used options;

    e.g., TitledBorder class in this package
          EtchedBorder class in this package

          JPanel myPanel = new JPanel();
	  myPanel.setBorder(new TitledBorder(new EtchedBorder,
	      "I am a JPanel border!"));

=======
*   JTextField!

*   a component intended to allow for a single line of text input
    (but sometimes for displaying a single line of text as well...)

*   but note:
    *   a JLabel should be considered a "pure" output component --
        the user reads it, but does not interact with it directly

    *   a JButton should be considered a "pure" input component --
        the user clicks it, it should not be used to display output
	(at least in general...!)

    *   a JTextField is more interestingly complex;
    	it is definitely often an input component,
	but is sometimes also an output component
	and sometimes it is used for COMBINATIONS of these!
	(and please use this for good and not evil...!)

        *   ...because it also has greater potential for mis-use;

        *   ongoing discussion this semester:
	    trying to determine and choose the "better" component
	    for each task...

    *   but let's make some JTextField instances!

        *   ONE of its constructors lets you just give a desired
	    width in "columns" <-- sadly inexact measurement!

            in theory: 1 column is tha expected width of 1 character
	    in the font being used for the text of that JTextField
	    BUT non-mono-spaced fonts definitely make this an issue...!

            You want n-characters wide? better add 1 bit to that...

            *   AND that's just a REQUEST, anyway --
	    	the layout manager may override it...!
		(more on that next week!)

            *   AND this doesn't limit what the user can
	        enter -- just how much MAY be displayed at once...!

        *   you can set the text displayed in a JTextField with
	    its setText method

            you can GET the text displayed in a JTextField with
	    its getText method

            you can change the editability of a JTextField with
	    it setEditable method --

	    argument of true? it can be edited (that's the default)
	    argument of false? it CANNOT be edited
	    *   if you MEAN for the user to NOT type into some
	        textfield at a given point,
	        it is good style to make it uneditable at that point!