The AWT - Abstract Window Toolkit - does in fact provide a toolkit
with all sorts of tools and resources regarding the display
system.
The Component
class provides a getToolkit()
method to give a reference to the toolkit. The toolkit for the
system will be a subclass of the abstract Toolkit
class created for your host. Toolkit uses native peer code to access
the system GUI.
There is also the static method
java.awt.Toolkit.getDefaultToolkit()
in the abstract Toolkit
class that returns a reference to the toolkit.
Toolkit provides all sorts of useful services:
- Obtain images for applications
- Printing
- Info about screen size and resolution:
java.awt.Toolkit.getScreenSize
()
java.awt.Toolkit.getScreenResolution ()
- Beep the keyboard
java.awt.Toolkit.beep()
- System colors (use index constants in SystemColor
class to relate index to a given window component):
java.awt.Toolkit.loadSystemColors
(int[] systemColors)
For example, to create a frame that is sized to a
particular proportion to the screen's size and in a particular location
is illustrated by the following method:
/**
Put frame at center of screen. **/
void centerFrame (JFrame f) {
// Need the toolkit to get info on system.
Toolkit tk = Toolkit.getDefaultToolkit ();
// Get the screen dimensions.
Dimension screen = tk.getScreenSize ();
// Make the frame 1/4th size of screen.
int fw = (int) (screen.getWidth
()/4);
int fh = (int) (screen.getWidth
()/4);
f.setSize (fw,fh);
// And place it in center of screen.
int lx = (int) (screen.getWidth
() * 3/8);
int ly = (int) (screen.getHeight
() * 3/8);
f.setLocation (lx,ly);
} // centerFrame
The program FrameCenterApplet
shown below is identical to FrameApplet
example in Chapter 7: Java:
Fames except that it uses the above method to place the frame
at the center of the screen.
FrameCenterApplet
|
import
javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* Same as FrameApplet except that it centers the
frame in
* monitor display area.
*
* This program demonstrates the basics of creating
a frame
* user interface with a menubar. It also shows
how to
* add a menubar and dropdown menus to the applet,
which wasn't
* possible in the basic AWT heavyweight component.
**/
public class FrameCenterApplet extends JApplet
implements ActionListener
{
JFrame fFrame;
JMenuItem fMenuClose ;
JMenuItem fMenuOpen;
/** Build an applet interface with a menubar.
A
* a drop down menu includes Open/Close
items
* for opening and closing an instance
of ParticleFrame.
**/
public void init () {
JMenuBar mb = new JMenuBar ();
JMenu m = new JMenu ("File");
fMenuOpen= new JMenuItem ("Open");
m.add (fMenuOpen);
fMenuOpen.addActionListener (this);
fMenuClose = new JMenuItem ("Close");
m.add (fMenuClose);
fMenuClose.addActionListener (this);
mb.add (m);
setJMenuBar (mb);
fFrame = new ParticleCenterFrame (this);
centerFrame (fFrame);
fFrame.setVisible (true);
fMenuOpen.setEnabled (false);
fMenuClose.setEnabled (true);
} // init
/** Get the menu events here. Open an instance
of ParticleFrame
* or close the one currently displayed.
**/
public void actionPerformed (ActionEvent e) {
String command = e.getActionCommand
();
if (command.equals ("Close")) {
close ();
} else { // Open
if (fFrame
== null) {
fFrame
= new ParticleCenterFrame (this);
centerFrame
(fFrame);
fFrame.setVisible
(true);
fMenuOpen.setEnabled
(false);
fMenuClose.setEnabled
(true);
}
}
} // actionPerformed
/** Put frame at center of screen. **/
void centerFrame (JFrame f) {
// Need the toolkit to get info on
system.
Toolkit tk = Toolkit.getDefaultToolkit
();
// Get the screen dimensions.
Dimension screen = tk.getScreenSize
();
// Make the frame 1/4th size of screen.
int fw = (int) (screen.getWidth
()/4);
int fh = (int) (screen.getWidth
()/4);
f.setSize (fw,fh);
// And place it in center of screen.
int lx = (int) (screen.getWidth
() * 3/8);
int ly = (int) (screen.getHeight
() * 3/8);
f.setLocation (lx,ly);
} // centerFrame
/** Close the frame. **/
void close () {
fFrame.dispose ();
fFrame = null;
fMenuOpen.setEnabled (true);
fMenuClose.setEnabled (false);
} // close
} // class FrameApplet
/** A JFrame subclass that displays a menu bar
* and a JComboBox.
**/
class ParticleCenterFrame extends JFrame
implements
ActionListener, ItemListener
{
JLabel fLabelA;
JLabel fLabelB;
FrameCenterApplet fApplet;
ParticleCenterFrame (FrameCenterApplet applet)
{
super ("Frame Test");
fApplet = applet;
Container content_pane = getContentPane
();
content_pane.setLayout (new GridLayout
(1,3));
JPanel choice_panel = new JPanel ();
choice_panel.add (new JLabel ("Quark",
JLabel.RIGHT) );
JComboBox c = new JComboBox ();
c.addItem ("Up");
c.addItem ("Down");
c.addItem ("Strange");
c.addItem ("Charm");
c.addItem ("Top");
c.addItem ("Bottom");
c.addItemListener (this);
choice_panel.add (c);
content_pane.add (choice_panel);
fLabelA =new JLabel ("Quark: Up");
content_pane.add (fLabelA);
fLabelB =new JLabel ("Lepton: Electron");
content_pane.add (fLabelB);
// Use the helper method makeMenuItem
// for making the menu items and registering
// their listener.
JMenu m = new JMenu ("Lepton");
m.add (makeMenuItem ("electron"));
m.add (makeMenuItem ("muon"));
m.add (makeMenuItem ("tau"));
JMenu sm = new JMenu ("Neutrino");
sm.add (makeMenuItem ("e Neutrino"));
sm.add (makeMenuItem ("mu Neutrino"));
sm.add (makeMenuItem ("tau Neutrino"));
m.add (sm);
m.add (makeMenuItem ("Quit"));
JMenuBar mb = new JMenuBar ();
mb.add (m);
setJMenuBar (mb);
setSize (200,200);
pack ();
setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
} // ctor
/** Get the combobox item events here. **/
public void itemStateChanged (ItemEvent e) {
String command = e.getItem ().toString
();
if (command.equals ("Quit") )
dispose ();
else
fLabelA.setText
("Quark: " + command);
} // itemStateChanged
/** Get the menu events here. **/
public void actionPerformed (ActionEvent e) {
String command = e.getActionCommand
();
if (command.equals ("Quit")) {
fApplet.close
();
} else {
fLabelB.setText
("Lepton: " + command);
}
} // actionPerformed
/** This "helper method" makes a menu item and
then
* registers this applet as a listener
to it.
**/
private JMenuItem makeMenuItem (String name) {
JMenuItem m = new JMenuItem (name);
m.addActionListener (this);
return m;
} // makeMenuItem
} // class ParticleFrame |
An application whose main()
method puts a frame at center:
PlaceFrameApp.java
|
References & Web Resources
Latest update: Dec.6, 2004
|