first commit

This commit is contained in:
Jose Caban
2025-06-07 01:59:34 -04:00
commit 388ac241f0
3558 changed files with 9116289 additions and 0 deletions

View File

@@ -0,0 +1,336 @@
CS1322: Lab #15 - Spring 2002.
Basic GUI Information
========================================================================
It has probably been covered in class how Swing differs from AWT
(Abstract Windowing Toolkit). The basic idea is that java handles its
components more in Swing instead of relying so much on the underlying
operating system. Swing offers an object oriented approach to GUI
creation by having base classes for all of the GUI components and then
extending those classes in order to make specialized components. All
swing components (except JFrame) inherit from Object->Component->
Container->JComponent (JFrame doesn't extend from JComponent). Open
up the java API and look at some of these classes. Some of these
function names might not make sense to you, but there are many like
Component.isVisible that you can probably guess what they do. For a
list of Swing components, goto the J's in the API. Some examples are
JButton, JPanel, JLabel, JMenu, etc...
Now you have a basic idea that there are some classes that exist and
you use these classes to make GUIs. To actually use these classes,
you must import java.awt.* (for classes like Component) and
javax.swing.* (for the Swing components). You will also need to
import java.awt.event.*, but this will be covered in lab18. Importing
is a way of including classes that are not normally loaded. All of
your programs up to this point have not needed the GUI classes, so it
was more efficient to not ask java to include the GUI files. Now that
you need these classes, you must ask java to look for them. Here's an
example of how you would include:
/**
* My class, bla bla bla...
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MyGUI
{
....
The basic starting point for all Swing GUIs -- that are not applets --
use JFrame. The JFrame class is the actual window. It will contain
all other GUI components. The basic order of operations is to create
a JFrame, add and customize the JFrame, and then make the JFrame
visible. Some people choose to subclass from JFrame and then override
the constructor when they create a GUI. While others choose to treat
the JFrame as an independent component.
(These are "working" examples, but you will need to kill them with
Ctrl-C, because we haven't specified a way to close them nicely. You
need to type this at the command line in order to close the GUI.)
imports...
public class MyGUI1 extends JFrame
{
public MyGUI1()
{
super( "Hello cs1322 Students" );
setSize( 240, 100 );
setVisible( true );
}
public static void main( String[] args )
{
MyGUI1 mg = new MyGUI1();
}
}
The other way:
public class MyGUI1
{
private JFrame frame;
public MyGUI1()
{
frame = new JFrame( "Hello cs1322 Students" );
frame.setSize( 240, 100 );
frame.setVisible( true );
}
public static void main( String[] args )
{
MyGUI1 mg = new MyGUI1();
}
}
Both of these examples will create a window that is 240 pixels wide
and 100 pixels long. The title will say "Hello cs1322 Students". The
frame isn't visible until its set visible.
Now that there is a window, its time to be able to add and populate
the window. All frames have a content pane. This content pane is a
Container (or any subclass of Container).
frame = new JFrame();
Container = frame.getContentPane();
or
frame = new JFrame();
Container c = new JPanel();
frame.setContentPane( c );
One of the important functions that exists in Container is setLayout(
LayoutManager ). A LayoutManager is a class that implements
LayoutManager and allows the programmer to layout components in an
easy manner. Anyone can make a LayoutManager, but this info file will
discuss how to use 4 common types. It would be to you advantage to
try these examples.
BorderLayout:
public MyGUI1()
{
frame = new JFrame( "Hello" );
Container c = new JPanel();
frame.setContentPane( c );
c.setLayout( new BorderLayout() );
c.add( new JButton( "CENTER" ) );
// or c.add( new JButton( "CENTER" ), BorderLayout.CENTER );
c.add( new JButton( "NORTH" ), BorderLayout.NORTH );
c.add( new JButton( "SOUTH" ), BorderLayout.SOUTH );
c.add( new JButton( "EAST" ), BorderLayout.EAST );
c.add( new JButton( "WEST" ), BorderLayout.WEST );
frame.setSize( 400, 400 );
frame.setVisible( true );
}
Creates this:
----------------------------------
| NORTH |
|----------------------------------|
| | | |
| | | |
| EAST | CENTER | WEST |
| | | |
| | | |
|----------------------------------|
| SOUTH |
----------------------------------
Basically, The BorderLayout allows you to have a main content area
(CENTER) and allows for secondary content areas. Also, you can embed
content areas:
public MyGUI1()
{
frame = new JFrame( "Hello" );
Container c = new JPanel();
JPanel embed = new JPanel();
frame.setContentPane( c );
c.setLayout( new BorderLayout() );
embed.setLayout( new BorderLayout() );
c.add( embed, BorderLayout.CENTER );
embed.add( new JButton( "CENTER" ), BorderLayout.CENTER );
embed.add( new JButton( "E. NORTH" ), BorderLayout.NORTH );
embed.add( new JButton( "E. SOUTH" ), BorderLayout.SOUTH );
embed.add( new JButton( "E. EAST" ), BorderLayout.EAST );
embed.add( new JButton( "E. WEST" ), BorderLayout.WEST );
c.add( new JButton( "NORTH" ), BorderLayout.NORTH );
c.add( new JButton( "SOUTH" ), BorderLayout.SOUTH );
c.add( new JButton( "EAST" ), BorderLayout.EAST );
c.add( new JButton( "WEST" ), BorderLayout.WEST );
frame.setSize( 500, 250 );
frame.setVisible( true );
}
(run the code to see what it actually looks like).
GridLayout:
public MyGUI1()
{
frame = new JFrame( "Hello" );
Container c = new JPanel();
frame.setContentPane( c );
c.setLayout( new GridLayout( 2, 3 ) );
c.add( new JButton( "1" ) );
c.add( new JButton( "2" ) );
c.add( new JButton( "3" ) );
c.add( new JButton( "4" ) );
c.add( new JButton( "5" ) );
c.add( new JButton( "6" ) );
frame.setSize( 500, 250 );
frame.setVisible( true );
}
Creates this:
-----------------
| | | |
| 1 | 2 | 3 |
| | | |
|-----------------|
| | | |
| 4 | 5 | 6 |
| | | |
-----------------
c.add( new JButton( "1" ), 0 );
c.add( new JButton( "2" ), 0 );
c.add( new JButton( "3" ), 0 );
c.add( new JButton( "4" ), 0 );
c.add( new JButton( "5" ), 0 );
c.add( new JButton( "6" ), 0 );
Creates this( it inserts into slot 0 and pushes everything back):
-----------------
| | | |
| 6 | 5 | 4 |
| | | |
|-----------------|
| | | |
| 3 | 2 | 1 |
| | | |
-----------------
The GridLayout allows the programmer to make a grid that scales in
size and can have a component embedded into each grid location.
BoxLayout:
public MyGUI1()
{
frame = new JFrame( "Hello" );
Container c = new JPanel();
frame.setContentPane( c );
c.setLayout( new BoxLayout( c, BoxLayout.X_AXIS ) );
c.add( new JButton( "1" ) );
c.add( new JButton( "2" ) );
c.add( new JButton( "3" ) );
c.add( new JButton( "4" ) );
c.add( new JButton( "5" ) );
c.add( new JButton( "6" ) );
frame.setSize( 500, 250 );
frame.setVisible( true );
}
Creates this:
-----------------------------------------------------
| |
| |
| |
|----------------------------------- |
| | | | | | | |
| 1 | 2 | 3 | 4 | 5 | 6 | |
| | | | | | | |
|----------------------------------- |
| |
| |
| |
-----------------------------------------------------
Basically, the BoxLayout adds components in order, but doesn't do the
same kind of resizing like Border and Grid. Try BoxLayout.Y_AXIS
too.
FlowLayout:
FlowLayout is the default layout used by components. To test this,
take the code from BoxLayout and delete the line c.setLayout. Be sure
to resize the window. You will notice how the flow layout just seems
to add other components and places them in order. If your resize to a
smaller window, some buttons move down to different lines.
JLabel, JButton, and Customizations
========================================================================
A JLabel is a GUI Component that displays text, but does not allow the
user to modify the information.
public MyGUI1()
{
frame = new JFrame( "Hello" );
Container c = new JPanel();
frame.setContentPane( c );
JLabel jl = new JLabel( "This is a test." );
// Or
// jl = new JLabel();
// jl.setText( "This is a test." );
c.add( jl );
frame.setSize( 250, 250 );
frame.setVisible( true );
}
JLabels can have their information changed by the program through
setText and you can also get the text through getText. Like all Swing
components JLabels have all the functions from Component, Container,
JComponent, as well as the functions JLabel adds. These functions
allow for many customizations and options. for example this code
below takes the default font from the Jlabel jl and increases the size
by 2.5:
font = jl.getFont();
font = font.deriveFont( (float)( font.getSize2D() * 2.5 ) );
jl.setFont( font );
If you want to customize a java component, there usually is a very
good chance that someone else has wanted that customization also.
Check the API, the java tutorial, and search the internet.
The JButton is a GUI component that can be clicked and the click often
signafies an action to the program (covered in lab 18). This lab is
concerned with your ability to create, add to layouts, and customize
JButtons.
JButton jb = new JButton();
jb.setText( "My Button" );
jb.setBackground( java.awt.Color.red );
jb.setFocusPainted( false ); // Doesn't draw that box around the
// button, when clicked.
jb.setEnabled( false ); // disables the button.