Java/Swing JFC/Frame

Материал из Java эксперт
Перейти к: навигация, поиск

Содержание

A demonstration of the WindowListener approach to closing JFrames

   <source lang="java">
  

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class FrameClose2 {

 public static void main(String[] args) {
   JFrame mainFrame = new JFrame();
   // Exit app when frame is closed.
   mainFrame.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent ev) {
       System.exit(0);
     }
   });
   mainFrame.setSize(320, 240);
   mainFrame.setVisible(true);
 }

}



 </source>
   
  
 
  



Center a JFrame

   <source lang="java">
  

import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame; public class Main extends JFrame {

 public static void main(String[] args) {
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   Main mainForm = new Main();
   mainForm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   mainForm.setSize(250, 250);
   mainForm.setLocation((screenSize.width - mainForm.getWidth()) / 2,
       (screenSize.height - mainForm.getHeight()) / 2);
   mainForm.pack();
   mainForm.setVisible(true);
 }

}


 </source>
   
  
 
  



Close a JFrame under condition

   <source lang="java">
  

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Main extends JFrame {

 public Main() {
   setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
   addWindowListener(new WindowAdapter() {
     public void windowOpened(WindowEvent e) {
     }
     public void windowClosing(WindowEvent e) {
       if (JOptionPane.showConfirmDialog(null, "Are you sure ?") == JOptionPane.YES_OPTION) {
         setVisible(false);
         dispose();
       }
     }
   });
   pack();
   setVisible(true);
 }
 public static void main(String args[]) {
   new Main();
 }

}


 </source>
   
  
 
  



Create a frame

   <source lang="java">
  

import javax.swing.JFrame; public class FirstFrame extends JFrame {

 public FirstFrame() {
   setTitle("FirstFrame");
   setSize(300, 200);
 }
 public static void main(String[] args) {
   JFrame frame = new FirstFrame();
   frame.show();
 }

}



 </source>
   
  
 
  



Create a JFrame class in a thread-safe way

   <source lang="java">
  

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import java.awt.EventQueue; import javax.swing.JFrame; /** Create a JFrame class in a thread-safe way.

* 
* See http://java.sun.ru/developer/JDCTechTips/2003/tt1208.html. */

public class JFrameDemoSafe {

 // We need a main program to instantiate and show.
 public static void main(String[] args) {
   // Create the GUI (variable is final because used by inner class).
   final JFrame demo = new JFrameDemo();
   // Create a Runnable to set the main visible, and get Swing to invoke.
       EventQueue.invokeLater(new Runnable() {
     public void run() {
       demo.setVisible(true);
     }
   });
 }

}



 </source>
   
  
 
  



Create undecorated frame

   <source lang="java">
  

import java.awt.BorderLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Main {

 private static Point point = new Point();
 public static void main(String[] args) {
   final JFrame frame = new JFrame();
   frame.setUndecorated(true);
   JButton button = new JButton("Close Me");
   button.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
       System.exit(0);
     }
   });
   frame.addMouseListener(new MouseAdapter() {
     public void mousePressed(MouseEvent e) {
       point.x = e.getX();
       point.y = e.getY();
     }
   });
   frame.addMouseMotionListener(new MouseMotionAdapter() {
     public void mouseDragged(MouseEvent e) {
       Point p = frame.getLocation();
       frame.setLocation(p.x + e.getX() - point.x, p.y + e.getY() - point.y);
     }
   });
   frame.setSize(300, 300);
   frame.setLocation(200, 200);
   frame.setLayout(new BorderLayout());
   frame.getContentPane().add(button, BorderLayout.NORTH);
   frame.getContentPane().add(new JLabel("Drag Me", JLabel.CENTER), BorderLayout.CENTER);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Creating a Borderless Window

   <source lang="java">
  

import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JWindow; public class Main {

 public static void main(String[] argv) throws Exception {
   JWindow window = new JWindow();
   JButton component = new JButton("asdf");
   // Add component to the window
   window.getContentPane().add(component, BorderLayout.CENTER);
   // Set initial size
   window.setSize(300, 300);
   // Show the window
   window.setVisible(true);
 }

}


 </source>
   
  
 
  



Creating a Titleless and Borderless JFrame

   <source lang="java">
  

import javax.swing.JFrame; import javax.swing.JLabel; public class Main {

 public static void main(String[] args) {
   JFrame frame = new JFrame("TitleLessJFrame");
   frame.getContentPane().add(new JLabel(" HEY!!!"));
   frame.setUndecorated(true);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setSize(400, 200);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Creating Frames with a background image

   <source lang="java">
  

import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.JPanel; public class Main extends JFrame {

 Main() {
   add(new ContentPanel());
   setSize(500, 300);
 }
 public static void main(String[] args) {
   Main jrframe = new Main();
   jrframe.setVisible(true);
 }

} class ContentPanel extends JPanel {

 Image bgimage = null;
 ContentPanel() {
   MediaTracker mt = new MediaTracker(this);
   bgimage = Toolkit.getDefaultToolkit().getImage("a.jpg");
   mt.addImage(bgimage, 0);
   try {
     mt.waitForAll();
   } catch (InterruptedException e) {
     e.printStackTrace();
   }
 }
 protected void paintComponent(Graphics g) {
   super.paintComponent(g);
   int imwidth = bgimage.getWidth(null);
   int imheight = bgimage.getHeight(null);
   g.drawImage(bgimage, 1, 1, null);
 }

}


 </source>
   
  
 
  



Default button for frame: press Enter to activate

   <source lang="java">
  

import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; public class DefaultButton extends JPanel {

 public DefaultButton() {
 }
 public static void main(String[] a) {
   JDialog f = new JDialog();
   f.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   });
   JButton btOK = new JButton("Press Enter to click me, I am the default.");
   btOK.setToolTipText("Save and exit");
   f.getRootPane().setDefaultButton(btOK);
   JPanel p = new JPanel();
   p.add(btOK);
   p.add(new JButton("I am NOT the default."));
   f.getContentPane().add(p);
   f.pack();
   f.setSize(new Dimension(300, 200));
   f.show();
 }

}



 </source>
   
  
 
  



Define the default close operation of a JFrame to EXIT_ON_CLOSE, application will exit by calling System.exit()

   <source lang="java">
  

import javax.swing.JFrame; public class Main extends JFrame {

 public static void main(String[] args) {
   Main frame = new Main();
   frame.setSize(100, 100);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Deiconifies a frame; the maximized bits are not affected.

   <source lang="java">
  

import java.awt.Frame; public class Main {

 public static void main(String[] argv) throws Exception {
   Frame frame = new Frame();
   frame.setSize(300, 300);
   frame.setVisible(true);
   deiconify(frame);
 }
 public static void deiconify(Frame frame) {
   int state = frame.getExtendedState();
   // Clear the iconified bit
   state &= ~Frame.ICONIFIED;
   // Deiconify the frame
   frame.setExtendedState(state);
 }

}


 </source>
   
  
 
  



Demo to show a way of having More Choices or Less Choices

   <source lang="java">
  

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; /**

* Demo to show a way of having "More Choices/Less Choices" in a pop-up window.
* The secret is to call pack() again each time you add/subtract the bottom
* panel.
* 
* @author Ian F. Darwin, http://www.darwinsys.ru/
* @version $Id: MoreChoices.java,v 1.3 2004/02/09 03:33:50 ian Exp $
*/

public class MoreChoices extends JFrame {

 Container cp;
 boolean unsavedChanges = false;
 JButton moreOrLessButton;
 JPanel moreOrLessPanel;
 ActionListener more;
 ActionListener less;
 /** "main program" method - construct and show */
 public static void main(String[] av) {
   // create a MoreChoices object, tell it to show up
   JFrame jf = new MoreChoices();
   jf.setLocation(100, 100); // get away from screen corner,
   // since on some OSes a main window at 0,0 may be
   // partly obscured (e.g. notebook with PowerPanel
   jf.setVisible(true);
 }
 /** Construct the object including its GUI */
 public MoreChoices() {
   super("More Choices");
   // cp = getContentPane();
   cp = this;
   cp.setLayout(new BorderLayout());
   ButtonsPanel bp = new ButtonsPanel();
   cp.add(BorderLayout.NORTH, bp);
   // Construct the more/less switcher
   less = new ActionListener() {
     public void actionPerformed(ActionEvent e) {
       cp.remove(moreOrLessPanel);
       pack();
       moreOrLessButton.setText("More Choices");
       moreOrLessButton.removeActionListener(less);
       moreOrLessButton.addActionListener(more);
     }
   };
   more = new ActionListener() {
     public void actionPerformed(ActionEvent e) {
       cp.add(BorderLayout.SOUTH, moreOrLessPanel);
       pack();
       moreOrLessButton.setText("Fewer Choices");
       moreOrLessButton.removeActionListener(more);
       moreOrLessButton.addActionListener(less);
     }
   };
   bp.add(moreOrLessButton = new JButton("More Choices"));
   // Initial state is to add more choices
   moreOrLessButton.addActionListener(more);
   moreOrLessPanel = new ChoicesPanel();
   // Finally a frame closer
   addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       setVisible(false);
       dispose();
       System.exit(0);
     }
   });
   pack();
 }
 /**
  * The panel that appears when you press More Choices. This is a toy; in a
  * real application, this would likely be a separate full "public class".
  */
 class ChoicesPanel extends JPanel {
   ChoicesPanel() {
     setBorder(BorderFactory.createEtchedBorder());
     add(new JCheckBox("Happiness"));
     add(new JCheckBox("Satisfaction"));
     add(new JCheckBox("Contentment"));
   }
 }
 /**
  * The Panel that contains the More/Less button. It is just here to override
  * getPreferredSize so that we can avoid "jitter" (i.e., the width
  * changing); i.e., we must ensure that the main panel and the ChoicePanel
  * have the same width
  */
 class ButtonsPanel extends JPanel {
   public Dimension getPreferredSize() {
     // System.out.println("In ButtonsPanel.getPreferredSize()");
     // For height, use our normal height
     int dHeight = moreOrLessButton.getPreferredSize().height + 5 + 5;
     // For witdh, use the included Panel"s width
     int dWidth = moreOrLessPanel.getPreferredSize().width;
     // Combine them; that"s the result we need.
     return new Dimension(dWidth, dHeight);
   }
 }

}



 </source>
   
  
 
  



Determining When a Component Has Been Made Visible, Moved, or Resized

   <source lang="java">
  

import java.awt.ruponent; import java.awt.Dimension; import java.awt.Point; import java.awt.event.ruponentAdapter; import java.awt.event.ruponentEvent; import java.awt.event.ruponentListener; import javax.swing.JFrame; public class Main {

 public static void main() {
   ComponentListener listener = new ComponentAdapter() {
     public void componentShown(ComponentEvent evt) {
       Component c = (Component) evt.getSource();
       System.out.println("Component is now visible");
     }
     public void componentHidden(ComponentEvent evt) {
       Component c = (Component) evt.getSource();
       System.out.println("Component is now hidden");
     }
     public void componentMoved(ComponentEvent evt) {
       Component c = (Component) evt.getSource();
       Point newLoc = c.getLocation();
       System.out.println("Get new location");
     }
     public void componentResized(ComponentEvent evt) {
       Component c = (Component) evt.getSource();
       Dimension newSize = c.getSize();
       System.out.println("Get new size");
     }
   };
   JFrame frame = new JFrame();
   frame.setSize(300, 300);
   frame.addComponentListener(listener);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Determining When a Frame or Window Is Iconized or Maximized

   <source lang="java">
  

import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowStateListener; public class Main {

 public static void main() {
   Frame frame = new Frame();
   WindowStateListener listener = new WindowAdapter() {
     public void windowStateChanged(WindowEvent evt) {
       int oldState = evt.getOldState();
       int newState = evt.getNewState();
       if ((oldState & Frame.ICONIFIED) == 0 && (newState & Frame.ICONIFIED) != 0) {
         System.out.println("Frame was iconized");
       } else if ((oldState & Frame.ICONIFIED) != 0 && (newState & Frame.ICONIFIED) == 0) {
         System.out.println("Frame was deiconized");
       }
       if ((oldState & Frame.MAXIMIZED_BOTH) == 0 && (newState & Frame.MAXIMIZED_BOTH) != 0) {
         System.out.println("Frame was maximized");
       } else if ((oldState & Frame.MAXIMIZED_BOTH) != 0 && (newState & Frame.MAXIMIZED_BOTH) == 0) {
         System.out.println("Frame was minimized");
       }
     }
   };
   frame.addWindowStateListener(listener);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Determining When a Frame or Window Is Opened or Closed

   <source lang="java">
  

import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; public class Main {

 public static void main() {
   Frame frame = new Frame();
   WindowListener listener = new WindowAdapter() {
     public void windowOpened(WindowEvent evt) {
       Frame frame = (Frame) evt.getSource();
       System.out.println(frame.getTitle());
     }
     public void windowClosing(WindowEvent evt) {
       Frame frame = (Frame) evt.getSource();
       System.out.println(frame.getTitle());
     }
     public void windowClosed(WindowEvent evt) {
       Frame frame = (Frame) evt.getSource();
       System.out.println(frame.getTitle());
     }
   };
   frame.addWindowListener(listener);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Disable JFrame close button

   <source lang="java">
  

import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class Main extends JFrame {

 public Main() throws HeadlessException {
   this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
   JButton button = new JButton("Close");
   button.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
       System.exit(0);
     }
   });
   this.setLayout(new FlowLayout(FlowLayout.CENTER));
   this.setSize(new Dimension(100, 100));
   this.getContentPane().add(button);
 }
 public static void main(String[] args) {
   new Main().setVisible(true);
 }

}


 </source>
   
  
 
  



Disabling the Close Button on a JFrame

   <source lang="java">
  

import javax.swing.JFrame; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a frame
   JFrame frame = new JFrame();
   // Get default close operation
   int op = frame.getDefaultCloseOperation(); // HIDE_ON_CLOSE
   // Set to ignore the button
   frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 }

}


 </source>
   
  
 
  



Drag and move a frame from its content area

   <source lang="java">
  

import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; public class Main extends JPanel {

 public void paintComponent(Graphics g) {
   g.setColor(Color.black);
   g.fillRect(0, 0, getWidth(), getHeight());
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.setPreferredSize(new Dimension(300, 280));
   Main ch = new Main();
   frame.getContentPane().add(ch);
   frame.setUndecorated(true);
   MoveMouseListener mml = new MoveMouseListener(ch);
   ch.addMouseListener(mml);
   ch.addMouseMotionListener(mml);
   frame.pack();
   frame.setVisible(true);
 }

} class MoveMouseListener implements MouseListener, MouseMotionListener {

 JComponent target;
 Point start_drag;
 Point start_loc;
 public MoveMouseListener(JComponent target) {
   this.target = target;
 }
 public static JFrame getFrame(Container target) {
   if (target instanceof JFrame) {
     return (JFrame) target;
   }
   return getFrame(target.getParent());
 }
 Point getScreenLocation(MouseEvent e) {
   Point cursor = e.getPoint();
   Point target_location = this.target.getLocationOnScreen();
   return new Point((int) (target_location.getX() + cursor.getX()),
       (int) (target_location.getY() + cursor.getY()));
 }
 public void mouseClicked(MouseEvent e) {
 }
 public void mouseEntered(MouseEvent e) {
 }
 public void mouseExited(MouseEvent e) {
 }
 public void mousePressed(MouseEvent e) {
   this.start_drag = this.getScreenLocation(e);
   this.start_loc = this.getFrame(this.target).getLocation();
 }
 public void mouseReleased(MouseEvent e) {
 }
 public void mouseDragged(MouseEvent e) {
   Point current = this.getScreenLocation(e);
   Point offset = new Point((int) current.getX() - (int) start_drag.getX(),
       (int) current.getY() - (int) start_drag.getY());
   JFrame frame = this.getFrame(target);
   Point new_location = new Point(
       (int) (this.start_loc.getX() + offset.getX()), (int) (this.start_loc
           .getY() + offset.getY()));
   frame.setLocation(new_location);
 }
 public void mouseMoved(MouseEvent e) {
 }

}


 </source>
   
  
 
  



Draw on frame with keyboard

   <source lang="java">
  

import java.awt.Container; import java.awt.Graphics; import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class SketchPanel extends JPanel implements KeyListener {

 private Point startPoint = new Point(0, 0);
 private Point endPoint = new Point(0, 0);
 public SketchPanel() {
   addKeyListener(this);
 }
 public void keyPressed(KeyEvent evt) {
   int keyCode = evt.getKeyCode();
   int d;
   if (evt.isShiftDown())
     d = 5;
   else
     d = 1;
   if (keyCode == KeyEvent.VK_LEFT)
     add(-d, 0);
   else if (keyCode == KeyEvent.VK_RIGHT)
     add(d, 0);
   else if (keyCode == KeyEvent.VK_UP)
     add(0, -d);
   else if (keyCode == KeyEvent.VK_DOWN)
     add(0, d);
 }
 public void keyReleased(KeyEvent evt) {
 }
 public void keyTyped(KeyEvent evt) {
 }
 public boolean isFocusTraversable() {
   return true;
 }
 public void add(int dx, int dy) {
   endPoint.x += dx;
   endPoint.y += dy;
   Graphics g = getGraphics();
   g.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y);
   g.dispose();
   startPoint.x = endPoint.x;
   startPoint.y = endPoint.y;
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.setTitle("Sketch");
   frame.setSize(300, 200);
   frame.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   });
   Container contentPane = frame.getContentPane();
   contentPane.add(new SketchPanel());
   frame.show();
 }

}



 </source>
   
  
 
  



Exiting an Application When a Frame Is Closed

   <source lang="java">
  

import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Main {

 public static void main() {
   Frame frame = new Frame();
   frame.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent evt) {
       System.exit(0);
     }
   });
 }

}


 </source>
   
  
 
  



Exiting an Application When a JFrame Is Closed

   <source lang="java">
  

import javax.swing.JFrame; public class Main {

 public static void main(String[] argv) throws Exception {
   // Create a frame
   JFrame frame = new JFrame();
   // Get default close operation
   int op = frame.getDefaultCloseOperation(); // HIDE_ON_CLOSE
   // Set to exit on close
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }

}


 </source>
   
  
 
  



FrameDemo2.java shows off the window decoration features added in 1.4

   <source lang="java">
  

/*

* Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*   - Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*
*   - Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution.
*
*   - Neither the name of Sun Microsystems nor the names of its
*     contributors may be used to endorse or promote products derived
*     from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

import java.awt.BorderLayout; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.image.BufferedImage; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.UIManager; /*

* FrameDemo2.java shows off the window decoration features added in 1.4, plus
* some window positioning code and (optionally) setIconImage. It uses the file
* images/FD.jpg.
*/

public class FrameDemo2 extends WindowAdapter implements ActionListener {

 private Point lastLocation = null;
 private int maxX = 500;
 private int maxY = 500;
 // the main frame"s default button
 private static JButton defaultButton = null;
 // constants for action commands
 protected final static String NO_DECORATIONS = "no_dec";
 protected final static String LF_DECORATIONS = "laf_dec";
 protected final static String WS_DECORATIONS = "ws_dec";
 protected final static String CREATE_WINDOW = "new_win";
 protected final static String DEFAULT_ICON = "def_icon";
 protected final static String FILE_ICON = "file_icon";
 protected final static String PAINT_ICON = "paint_icon";
 // true if the next frame created should have no window decorations
 protected boolean noDecorations = false;
 // true if the next frame created should have setIconImage called
 protected boolean specifyIcon = false;
 // true if the next frame created should have a custom painted icon
 protected boolean createIcon = false;
 // Perform some initialization.
 public FrameDemo2() {
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   maxX = screenSize.width - 50;
   maxY = screenSize.height - 50;
 }
 // Create a new MyFrame object and show it.
 public void showNewWindow() {
   JFrame frame = new MyFrame();
   // Take care of the no window decorations case.
   // NOTE: Unless you really need the functionality
   // provided by JFrame, you would usually use a
   // Window or JWindow instead of an undecorated JFrame.
   if (noDecorations) {
     frame.setUndecorated(true);
   }
   // Set window location.
   if (lastLocation != null) {
     // Move the window over and down 40 pixels.
     lastLocation.translate(40, 40);
     if ((lastLocation.x > maxX) || (lastLocation.y > maxY)) {
       lastLocation.setLocation(0, 0);
     }
     frame.setLocation(lastLocation);
   } else {
     lastLocation = frame.getLocation();
   }
   // Calling setIconImage sets the icon displayed when the window
   // is minimized. Most window systems (or look and feels, if
   // decorations are provided by the look and feel) also use this
   // icon in the window decorations.
   if (specifyIcon) {
     if (createIcon) {
       frame.setIconImage(createFDImage()); // create an icon from scratch
     } else {
       frame.setIconImage(getFDImage()); // get the icon from a file
     }
   }
   // Show window.
   frame.setSize(new Dimension(170, 100));
   frame.setVisible(true);
 }
 // Create the window-creation controls that go in the main window.
 protected JComponent createOptionControls() {
   JLabel label1 = new JLabel(
       "Decoration options for subsequently created frames:");
   ButtonGroup bg1 = new ButtonGroup();
   JLabel label2 = new JLabel("Icon options:");
   ButtonGroup bg2 = new ButtonGroup();
   // Create the buttons
   JRadioButton rb1 = new JRadioButton();
   rb1.setText("Look and feel decorated");
   rb1.setActionCommand(LF_DECORATIONS);
   rb1.addActionListener(this);
   rb1.setSelected(true);
   bg1.add(rb1);
   //
   JRadioButton rb2 = new JRadioButton();
   rb2.setText("Window system decorated");
   rb2.setActionCommand(WS_DECORATIONS);
   rb2.addActionListener(this);
   bg1.add(rb2);
   //
   JRadioButton rb3 = new JRadioButton();
   rb3.setText("No decorations");
   rb3.setActionCommand(NO_DECORATIONS);
   rb3.addActionListener(this);
   bg1.add(rb3);
   //
   //
   JRadioButton rb4 = new JRadioButton();
   rb4.setText("Default icon");
   rb4.setActionCommand(DEFAULT_ICON);
   rb4.addActionListener(this);
   rb4.setSelected(true);
   bg2.add(rb4);
   //
   JRadioButton rb5 = new JRadioButton();
   rb5.setText("Icon from a JPEG file");
   rb5.setActionCommand(FILE_ICON);
   rb5.addActionListener(this);
   bg2.add(rb5);
   //
   JRadioButton rb6 = new JRadioButton();
   rb6.setText("Painted icon");
   rb6.setActionCommand(PAINT_ICON);
   rb6.addActionListener(this);
   bg2.add(rb6);
   // Add everything to a container.
   Box box = Box.createVerticalBox();
   box.add(label1);
   box.add(Box.createVerticalStrut(5)); // spacer
   box.add(rb1);
   box.add(rb2);
   box.add(rb3);
   //
   box.add(Box.createVerticalStrut(15)); // spacer
   box.add(label2);
   box.add(Box.createVerticalStrut(5)); // spacer
   box.add(rb4);
   box.add(rb5);
   box.add(rb6);
   // Add some breathing room.
   box.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
   return box;
 }
 // Create the button that goes in the main window.
 protected JComponent createButtonPane() {
   JButton button = new JButton("New window");
   button.setActionCommand(CREATE_WINDOW);
   button.addActionListener(this);
   defaultButton = button; // Used later to make this the frame"s default
                           // button.
   // Center the button in a panel with some space around it.
   JPanel pane = new JPanel(); // use default FlowLayout
   pane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
   pane.add(button);
   return pane;
 }
 // Handle action events from all the buttons.
 public void actionPerformed(ActionEvent e) {
   String command = e.getActionCommand();
   // Handle the New window button.
   if (CREATE_WINDOW.equals(command)) {
     showNewWindow();
     // Handle the first group of radio buttons.
   } else if (NO_DECORATIONS.equals(command)) {
     noDecorations = true;
     JFrame.setDefaultLookAndFeelDecorated(false);
   } else if (WS_DECORATIONS.equals(command)) {
     noDecorations = false;
     JFrame.setDefaultLookAndFeelDecorated(false);
   } else if (LF_DECORATIONS.equals(command)) {
     noDecorations = false;
     JFrame.setDefaultLookAndFeelDecorated(true);
     // Handle the second group of radio buttons.
   } else if (DEFAULT_ICON.equals(command)) {
     specifyIcon = false;
   } else if (FILE_ICON.equals(command)) {
     specifyIcon = true;
     createIcon = false;
   } else if (PAINT_ICON.equals(command)) {
     specifyIcon = true;
     createIcon = true;
   }
 }
 // Creates an icon-worthy Image from scratch.
 protected static Image createFDImage() {
   // Create a 16x16 pixel image.
   BufferedImage bi = new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB);
   // Draw into it.
   Graphics g = bi.getGraphics();
   g.setColor(Color.BLACK);
   g.fillRect(0, 0, 15, 15);
   g.setColor(Color.RED);
   g.fillOval(5, 3, 6, 6);
   // Clean up.
   g.dispose();
   // Return it.
   return bi;
 }
 // Returns an Image or null.
 protected static Image getFDImage() {
   java.net.URL imgURL = FrameDemo2.class.getResource("images/FD.jpg");
   if (imgURL != null) {
     return new ImageIcon(imgURL).getImage();
   } else {
     return null;
   }
 }
 /**
  * Create the GUI and show it. For thread safety, this method should be
  * invoked from the event-dispatching thread.
  */
 private static void createAndShowGUI() {
   // Use the Java look and feel.
   try {
     UIManager
         .setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
   } catch (Exception e) {
   }
   // Make sure we have nice window decorations.
   JFrame.setDefaultLookAndFeelDecorated(true);
   JDialog.setDefaultLookAndFeelDecorated(true);
   // Instantiate the controlling class.
   JFrame frame = new JFrame("FrameDemo2");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   // Create and set up the content pane.
   FrameDemo2 demo = new FrameDemo2();
   // Add components to it.
   Container contentPane = frame.getContentPane();
   contentPane.add(demo.createOptionControls(), BorderLayout.CENTER);
   contentPane.add(demo.createButtonPane(), BorderLayout.PAGE_END);
   frame.getRootPane().setDefaultButton(defaultButton);
   // Display the window.
   frame.pack();
   frame.setLocationRelativeTo(null); // center it
   frame.setVisible(true);
 }
 // Start the demo.
 public static void main(String[] args) {
   // Schedule a job for the event-dispatching thread:
   // creating and showing this application"s GUI.
   javax.swing.SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       createAndShowGUI();
     }
   });
 }
 class MyFrame extends JFrame implements ActionListener {
   // Create a frame with a button.
   public MyFrame() {
     super("A window");
     setDefaultCloseOperation(DISPOSE_ON_CLOSE);
     // This button lets you close even an undecorated window.
     JButton button = new JButton("Close window");
     button.addActionListener(this);
     // Place the button near the bottom of the window.
     Container contentPane = getContentPane();
     contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
     contentPane.add(Box.createVerticalGlue()); // takes all extra space
     contentPane.add(button);
     button.setAlignmentX(Component.CENTER_ALIGNMENT); // horizontally centered
     contentPane.add(Box.createVerticalStrut(5)); // spacer
   }
   // Make the button do the same thing as the default close operation
   // (DISPOSE_ON_CLOSE).
   public void actionPerformed(ActionEvent e) {
     setVisible(false);
     dispose();
   }
 }

}


 </source>
   
  
 
  



FrameDemo:invoked from the event-dispatching thread

   <source lang="java">
  

/* From http://java.sun.ru/docs/books/tutorial/index.html */ /*

* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* -Redistribution of source code must retain the above copyright notice, this
*  list of conditions and the following disclaimer.
*
* -Redistribution in binary form must reproduce the above copyright notice,
*  this list of conditions and the following disclaimer in the documentation
*  and/or other materials provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility.
*/

import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JLabel; /* FrameDemo.java requires no other files. */ public class FrameDemo {

 /**
  * Create the GUI and show it. For thread safety, this method should be
  * invoked from the event-dispatching thread.
  */
 private static void createAndShowGUI() {
   //Suggest that the L&F (rather than the system)
   //decorate all windows. This must be invoked before
   //creating the JFrame. Native look and feels will
   //ignore this hint.
   JFrame.setDefaultLookAndFeelDecorated(true);
   //Create and set up the window.
   JFrame frame = new JFrame("FrameDemo");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JLabel emptyLabel = new JLabel("");
   emptyLabel.setPreferredSize(new Dimension(175, 100));
   frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
   //Display the window.
   frame.pack();
   frame.setVisible(true);
 }
 public static void main(String[] args) {
   //Schedule a job for the event-dispatching thread:
   //creating and showing this application"s GUI.
   javax.swing.SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       createAndShowGUI();
     }
   });
 }

}



 </source>
   
  
 
  



Frame dialog data exchange

   <source lang="java">
  

import java.awt.Container; import java.awt.GridLayout; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class DataExchangeTest extends JFrame implements ActionListener {

 private ConnectDialog dialog = null;
 private JMenuItem connectItem = new JMenuItem("Connect");
 public DataExchangeTest() {
   setTitle("Data Exchange");
   setSize(300, 300);
   addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   });
   JMenuBar mbar = new JMenuBar();
   setJMenuBar(mbar);
   JMenu fileMenu = new JMenu("File");
   mbar.add(fileMenu);
   
   connectItem.addActionListener(this);
   fileMenu.add(connectItem);
   
 }
 public void actionPerformed(ActionEvent evt) {
   Object source = evt.getSource();
   if (source == connectItem) {
     UserInfo transfer = new UserInfo("yourname", "pw");
     dialog = new ConnectDialog(this);
     if (dialog.showDialog(transfer)) {
       String name = transfer.username;
       String pwd = transfer.password;
       Container contentPane = getContentPane();
       contentPane.removeAll();
       contentPane.add(new JLabel("username=" + name + ", password="  + pwd), "Center");
       validate();
     }
   } 
 }
 public static void main(String[] args) {
   JFrame f = new DataExchangeTest();
   f.show();
 }

} class UserInfo {

 public String username;
 public String password;
 public UserInfo(String u, String p) {
   username = u;
   password = p;
 }

} class ConnectDialog extends JDialog implements ActionListener {

 private JTextField username = new JTextField("");
 private JPasswordField password= new JPasswordField("");
 private boolean okPressed;
 private JButton okButton;
 private JButton cancelButton;
 public ConnectDialog(JFrame parent) {
   super(parent, "Connect", true);
   Container contentPane = getContentPane();
   JPanel p1 = new JPanel(new GridLayout(2, 2,3,3));
   p1.add(new JLabel("User name:"));
   p1.add(username);
   p1.add(new JLabel("Password:"));
   p1.add(password );
   contentPane.add("Center", p1);
   Panel p2 = new Panel();
   okButton = addButton(p2, "Ok");
   cancelButton = addButton(p2, "Cancel");
   contentPane.add("South", p2);
   setSize(240, 120);
 }
 private JButton addButton(Container c, String name) {
   JButton button = new JButton(name);
   button.addActionListener(this);
   c.add(button);
   return button;
 }
 public void actionPerformed(ActionEvent evt) {
   Object source = evt.getSource();
   if (source == okButton) {
     okPressed = true;
     setVisible(false);
   } else if (source == cancelButton)
     setVisible(false);
 }
 public boolean showDialog(UserInfo transfer) {
   username.setText(transfer.username);
   password.setText(transfer.password);
   okPressed = false;
   show();
   if (okPressed) {
     transfer.username = username.getText();
     transfer.password = new String(password.getPassword());
   }
   return okPressed;
 }

}



 </source>
   
  
 
  



Frame Icon drawn by yourself

   <source lang="java">
  

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

/// import java.awt.ruponent; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.image.MemoryImageSource; /** MemImage is an in-memory icon showing a Color gradient. */ public class MemImage extends Component {

 /**
  * Demo main program, showing two ways to use it. Create a small MemImage
  * and set it as this Frame"s iconImage. Also display a larger version of
  * the same image in the Frame.
  */
 public static void main(String[] av) {
   Frame f = new Frame("MemImage.java");
   f.add(new MemImage());
   f.setIconImage(new MemImage(16, 16).getImage());
   f.pack();
   f.setVisible(true);
 }
 /** The image */
 private Image img;
 /** The image width */
 private int w;
 /** The image height */
 private int h;
 /** Construct a MemImage with a default size */
 public MemImage() {
   this(100, 100);
 }
 /** Construct a MemImage with a specified width and height */
 public MemImage(int w, int h) {
   this.w = w;
   this.h = h;
   int pix[] = new int[w * h];
   int index = 0;
   for (int y = 0; y < h; y++) {
     int red = (y * 255) / (h - 1);
     for (int x = 0; x < w; x++) {
       int blue = (x * 255) / (w - 1);
       pix[index++] = (255 << 24) | (red << 16) | blue;
     }
   }
   img = createImage(new MemoryImageSource(w, h, pix, 0, w));
   setSize(getPreferredSize());
 }
 /** Getter for the Image */
 public Image getImage() {
   return img;
 }
 public Dimension getPreferredSize() {
   return new Dimension(w, h);
 }
 public void paint(Graphics g) {
   g.drawImage(img, 0, 0, getSize().width, getSize().height, this);
 }

}



 </source>
   
  
 
  



Frame Icon from gif

   <source lang="java">
  

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import java.awt.Frame; import java.awt.Image; import java.awt.Toolkit; public class FrameIcon {

 /** Demo main program, showing two ways to use it.
  * Create a small MemImage and set it as this Frame"s iconImage. 
  * Also display a larger version of the same image in the Frame.
  */
 public static void main(String[] av) {
   Frame f = new Frame("FrameIcon");
   Image im = 
     Toolkit.getDefaultToolkit().getImage("jexp.gif");
   f.setIconImage(im);
   f.setSize(100, 100);
   f.setLocation(200, 200);
   f.setVisible(true);
 }

}



 </source>
   
  
 
  



Frame with components

   <source lang="java">
  

import java.awt.Color; import java.awt.FlowLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class FramewithComponents extends JFrame {

 public FramewithComponents() {
   super("JLayeredPane Demo");
   setSize(256, 256);
   JPanel content = new JPanel();
   content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
   content.setOpaque(false);
   JLabel label1 = new JLabel("Username:");
   label1.setForeground(Color.white);
   content.add(label1);
   JTextField field = new JTextField(15);
   content.add(field);
   JLabel label2 = new JLabel("Password:");
   label2.setForeground(Color.white);
   content.add(label2);
   JPasswordField fieldPass = new JPasswordField(15);
   content.add(fieldPass);
   getContentPane().setLayout(new FlowLayout());
   getContentPane().add(content);
   ((JPanel) getContentPane()).setOpaque(false);
   ImageIcon earth = new ImageIcon("largejexpLogo.png");
   JLabel backlabel = new JLabel(earth);
   getLayeredPane().add(backlabel, new Integer(Integer.MIN_VALUE));
   backlabel.setBounds(0, 0, earth.getIconWidth(), earth.getIconHeight());
   WindowListener l = new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   };
   addWindowListener(l);
   setVisible(true);
 }
 public static void main(String[] args) {
   new FramewithComponents();
 }

}



 </source>
   
  
 
  



Get the JFrame of a component

   <source lang="java">
  

import java.awt.Color; import java.awt.ruponent; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class Main extends JFrame {

 public Main() {
   this.setSize(400, 100);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.setLayout(new FlowLayout(FlowLayout.CENTER));
   JButton button = new JButton("Change Frame Color");
   button.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
       Component component = (Component) e.getSource();
       JFrame frame = (JFrame) SwingUtilities.getRoot(component);
       frame.getContentPane().setBackground(Color.RED);
     }
   });
   this.getContentPane().add(button);
 }
 public static void main(String[] args) {
   new Main().setVisible(true);
 }

}



 </source>
   
  
 
  



Getting All Created Frames in an Application

   <source lang="java">
  

import java.awt.Frame; public class Main {

 public static void main() {
   Frame[] frames = Frame.getFrames();
   for (int i = 0; i < frames.length; i++) {
     String title = frames[i].getTitle();
     System.out.println(title);
     boolean isVisible = frames[i].isVisible();
     System.out.println(isVisible);
   }
 }

}


 </source>
   
  
 
  



Handle JFrame window events

   <source lang="java">
  

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class Main extends JFrame {

 public Main() {
   setSize(300, 300);
   setTitle("Window Listener");
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.addWindowListener(new WindowAdapter() {
     public void windowOpened(WindowEvent e) {
       System.out.println("Window Opened Event");
     }
     public void windowClosing(WindowEvent e) {
       System.out.println("Window Closing Event");
     }
     public void windowClosed(WindowEvent e) {
       System.out.println("Window Close Event");
     }
     public void windowIconified(WindowEvent e) {
       System.out.println("Window Iconified Event");
     }
     public void windowDeiconified(WindowEvent e) {
       System.out.println("Window Deiconified Event");
     }
     public void windowActivated(WindowEvent e) {
       System.out.println("Window Activated Event");
     }
     public void windowDeactivated(WindowEvent e) {
       System.out.println("Window Deactivated Event");
     }
     public void windowStateChanged(WindowEvent e) {
       System.out.println("Window State Changed Event");
     }
     public void windowGainedFocus(WindowEvent e) {
       System.out.println("Window Gained Focus Event");
     }
     public void windowLostFocus(WindowEvent e) {
       System.out.println("Window Lost Focus Event");
     }
   });
 }
 public static void main(String[] args) {
   new Main().setVisible(true);
 }

}


 </source>
   
  
 
  



Hiding a Frame When Its Close Button Is Clicked

   <source lang="java">
  

import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Main {

 public static void main() {
   Frame frame = new Frame();
   frame.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent evt) {
       Frame frame = (Frame) evt.getSource();
       frame.setVisible(false);
       // frame.dispose();
     }
   });
 }

}


 </source>
   
  
 
  



How to center a frame or dialog

   <source lang="java">
  

import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class CenteredFrame extends JFrame {

 public CenteredFrame() {
   setTitle("CenteredFrame");
   addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   });
   Toolkit tk = Toolkit.getDefaultToolkit();
   Dimension screenSize = tk.getScreenSize();
   int screenHeight = screenSize.height;
   int screenWidth = screenSize.width;
   setSize(screenWidth / 2, screenHeight / 2);
   setLocation(screenWidth / 4, screenHeight / 4);
 }
 public static void main(String[] args) {
   JFrame frame = new CenteredFrame();
   frame.show();
 }

}



 </source>
   
  
 
  



Iconifies a frame; the maximized bits are not affected.

   <source lang="java">
  

import java.awt.Frame; public class Main {

 public static void main() {
   Frame frame = new Frame();
   frame.setSize(300, 300);
   frame.setVisible(true);
   iconify(frame);
 }
 public static void iconify(Frame frame) {
   int state = frame.getExtendedState();
   // Set the iconified bit
   state |= Frame.ICONIFIED;
   // Iconify the frame
   frame.setExtendedState(state);
 }

}


 </source>
   
  
 
  



JFrame that closes when someone presses the ESC key

   <source lang="java">
   

/*

* jMemorize - Learning made easy (and fun) - A Leitner flashcards tool
* Copyright(C) 2004-2008 Riad Djemili and contributors
* 
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import javax.swing.AbstractAction; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.KeyStroke; import javax.swing.WindowConstants; /**

* A advanced JFrame that closes when someone presses the ESC key.
* 
* @author djemili
*/

public abstract class EscapableFrame extends JFrame {

   public EscapableFrame()
   {
       // on ESC key close frame
       getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
           KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); //$NON-NLS-1$
       getRootPane().getActionMap().put("Cancel", new AbstractAction(){ //$NON-NLS-1$
           public void actionPerformed(ActionEvent e)
           {
               close();
           }
       });
       
       // on close window the close method is called
       setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
       addWindowListener(new WindowAdapter() {
           public void windowClosing(java.awt.event.WindowEvent evt) 
           {
               close();
           }
       });
   }
   
   /**
    * Is called when the frame is closed by pressing ESC or closing it by
    * clicking on the close icon.
    * 
    * @return True if the frame got closed; false otherwise.
    */
   abstract public boolean close();

}



 </source>
   
  
 
  



Make a JFrame always visible

   <source lang="java">
  

import javax.swing.JFrame; import javax.swing.JLabel; public class Main{

 public static void main(String[] args) {
   JFrame frame = new JFrame("Hello!!");
   frame.setAlwaysOnTop(true);
   frame.setLocationByPlatform(true);
   frame.add(new JLabel("  Always visible"));
   frame.pack();
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Making a Frame Non-Resizable: use setResizable(false) to freeze a frame"s size.

   <source lang="java">
  

import java.awt.Frame; public class Main {

 public static void main() {
   Frame frame = new Frame();
   frame.setResizable(false);
   boolean resizable = frame.isResizable();
 }

}


 </source>
   
  
 
  



Maximize a JFrame

   <source lang="java">
  

import java.awt.GraphicsEnvironment; import javax.swing.JFrame; public class Main extends JFrame {

 public Main() {
   GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
   this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
 }
 public static void main(String[] args) {
   JFrame.setDefaultLookAndFeelDecorated(true);
   Main t = new Main();
   t.setVisible(true);
 }

}


 </source>
   
  
 
  



Maximizes a frame; the iconified bit is not affected

   <source lang="java">
  

import java.awt.Frame; public class Main {

 public static void main(String[] argv) throws Exception {
   Frame frame = new Frame();
   frame.setSize(300, 300);
   frame.setVisible(true);
   maximize(frame);
 }
 public static void maximize(Frame frame) {
   int state = frame.getExtendedState();
   // Set the maximized bits
   state |= Frame.MAXIMIZED_BOTH;
   // Maximize the frame
   frame.setExtendedState(state);
 }

}


 </source>
   
  
 
  



Preventing a Window from Gaining the Focus

   <source lang="java">
  

import javax.swing.JFrame; public class Main {

 public static void main(String[] argv) throws Exception {
   JFrame frame = new JFrame();
   frame.setFocusableWindowState(false);
 }

}


 </source>
   
  
 
  



React to frame close action

   <source lang="java">
  

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class CloseFrameAction extends JFrame {

 public CloseFrameAction() {
   setTitle("CloseableFrame");
   setSize(300, 200);
   addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       System.exit(0);
     }
   });
 }
 public static void main(String[] args) {
   JFrame frame = new CloseFrameAction();
   frame.show();
 }

}



 </source>
   
  
 
  



Removing the Title Bar of a Frame

   <source lang="java">
  

import java.awt.Frame; public class Main {

 public static void main() {
   Frame frame = new Frame();
   frame.setUndecorated(true);
   // Get the current decorated state
   boolean undecorated = frame.isUndecorated();
 }

}


 </source>
   
  
 
  



Screen edge snapping

   <source lang="java">
  

import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ruponentAdapter; import java.awt.event.ruponentEvent; import javax.swing.JFrame; import javax.swing.JLabel; public class WindowSnapper extends ComponentAdapter {

 private boolean locked = false;
 private int sd = 50;
 public void componentMoved(ComponentEvent evt) {
   if (locked)
     return;
   Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
   int nx = evt.getComponent().getX();
   int ny = evt.getComponent().getY();
   // top
   if (ny < 0 + sd) {
     ny = 0;
   }
   // left
   if (nx < 0 + sd) {
     nx = 0;
   }
   // right
   if (nx > size.getWidth() - evt.getComponent().getWidth() - sd) {
     nx = (int) size.getWidth() - evt.getComponent().getWidth();
   }
   // bottom
   if (ny > size.getHeight() - evt.getComponent().getHeight() - sd) {
     ny = (int) size.getHeight() - evt.getComponent().getHeight();
   }
   // make sure we don"t get into a recursive loop when the
   // set location generates more events
   locked = true;
   evt.getComponent().setLocation(nx, ny);
   locked = false;
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame("");
   JLabel label = new JLabel("Move this window"s title bar to demonstrate screen edge snapping.");
   frame.getContentPane().add(label);
   frame.pack();
   frame.addComponentListener(new WindowSnapper());
   frame.setVisible(true);
 }

}



 </source>
   
  
 
  



Setting the Bounds for a Maximized Frame

   <source lang="java">
  

import java.awt.Frame; import java.awt.Rectangle; public class Main {

 public static void main() {
   Frame frame = new Frame();
   Rectangle bounds = new Rectangle(20, 20, 200, 200);
   frame.setMaximizedBounds(bounds);
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Setting the Icon for a Frame

   <source lang="java">
  

import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; public class Main {

 public static void main() {
   JFrame frame = new JFrame();
   Image icon = Toolkit.getDefaultToolkit().getImage("icon.gif");
   frame.setIconImage(icon);
 }

}


 </source>
   
  
 
  



Show the given frame as modal to the specified owner

   <source lang="java">
 

import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import javax.swing.JFrame; // @author Santhosh Kumar T - santhosh@in.fiorano.ru public class ModalFrameUtil {

 static class EventPump implements InvocationHandler {
   Frame frame;
   public EventPump(Frame frame) {
     this.frame = frame;
   }
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
     return frame.isShowing();
   }
   // when the reflection calls in this method has to be
   // replaced once Sun provides a public API to pump events.
   public void start() throws Exception {
     Class<?> clazz = Class.forName("java.awt.Conditional");
     Object conditional = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[] { clazz },
         this);
     Method pumpMethod = Class.forName("java.awt.EventDispatchThread").getDeclaredMethod(
         "pumpEvents", new Class[] { clazz });
     pumpMethod.setAccessible(true);
     pumpMethod.invoke(Thread.currentThread(), new Object[] { conditional });
   }
 }
 // show the given frame as modal to the specified owner.
 // NOTE: this method returns only after the modal frame is closed.
 public static void showAsModal(final Frame frame, final Frame owner) {
   frame.addWindowListener(new WindowAdapter() {
     public void windowOpened(WindowEvent e) {
       owner.setEnabled(false);
     }
     public void windowClosing(WindowEvent e) {
       owner.setEnabled(true);
       frame.removeWindowListener(this);
     }
     public void windowClosed(WindowEvent e) {
       owner.setEnabled(true);
       frame.removeWindowListener(this);
     }
   });
   owner.addWindowListener(new WindowAdapter() {
     public void windowActivated(WindowEvent e) {
       if (frame.isShowing()) {
         frame.setExtendedState(JFrame.NORMAL);
         frame.toFront();
       } else {
         owner.removeWindowListener(this);
       }
     }
   });
   frame.setVisible(true);
   try {
     new EventPump(frame).start();
   } catch (Throwable throwable) {
     throw new RuntimeException(throwable);
   }
 }

}


 </source>
   
  
 
  



The Swing Version of the Hello, World! Program

   <source lang="java">
   

import javax.swing.JFrame; public class HelloFrame extends JFrame {

 public static void main(String[] args) {
   new HelloFrame();
 }
 public HelloFrame() {
   this.setSize(200, 100);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.setTitle("Hello World!");
   this.setVisible(true);
 }

}


 </source>
   
  
 
  



Use Component listener to ensure frame visibilities

   <source lang="java">
  

import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ruponentAdapter; import java.awt.event.ruponentEvent; import javax.swing.JFrame; public class Main extends ComponentAdapter {

 public void componentMoved(ComponentEvent evt) {
   Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
   int x = evt.getComponent().getX();
   int y = evt.getComponent().getY();
   if (y < 0 ) {
     y = 0;
   }
   if (x < 0 ) {
     x = 0;
   }
   if (x > size.getWidth() - evt.getComponent().getWidth() ) {
     x = (int) size.getWidth() - evt.getComponent().getWidth();
   }
   if (y > size.getHeight() - evt.getComponent().getHeight() ) {
     y = (int) size.getHeight() - evt.getComponent().getHeight();
   }
   evt.getComponent().setLocation(x, y);
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame("Window cannot be moved to hide part of it");
   frame.setSize(300,300);
   frame.addComponentListener(new Main());
   frame.setVisible(true);
 }

}


 </source>
   
  
 
  



Using anonymous inner classes

   <source lang="java">
  

// : c14:Button2b.java // Using anonymous inner classes. // <applet code=Button2b width=200 height=75></applet> // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; public class Button2b extends JApplet {

 private JButton b1 = new JButton("Button 1"), b2 = new JButton("Button 2");
 private JTextField txt = new JTextField(10);
 private ActionListener bl = new ActionListener() {
   public void actionPerformed(ActionEvent e) {
     String name = ((JButton) e.getSource()).getText();
     txt.setText(name);
   }
 };
 public void init() {
   b1.addActionListener(bl);
   b2.addActionListener(bl);
   Container cp = getContentPane();
   cp.setLayout(new FlowLayout());
   cp.add(b1);
   cp.add(b2);
   cp.add(txt);
 }
 public static void main(String[] args) {
   run(new Button2b(), 200, 75);
 }
 public static void run(JApplet applet, int width, int height) {
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.getContentPane().add(applet);
   frame.setSize(width, height);
   applet.init();
   applet.start();
   frame.setVisible(true);
 }

} ///:~



 </source>