FrameDemo2.java shows off the window decoration features added in 1.4 : 窗口 « 图形用户界面 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 图形用户界面 » 窗口屏幕截图 
FrameDemo2.java shows off the window decoration features added in 1.4
 
/*
 * 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.Component;
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(4040);
      if ((lastLocation.x > maxX|| (lastLocation.y > maxY)) {
        lastLocation.setLocation(00);
      }
      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(170100));
    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(10101010));

    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(5555));
    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(1616, BufferedImage.TYPE_INT_RGB);

    // Draw into it.
    Graphics g = bi.getGraphics();
    g.setColor(Color.BLACK);
    g.fillRect(001515);
    g.setColor(Color.RED);
    g.fillOval(5366);

    // 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();
    }
  }
}

   
  
Related examples in the same category
1. 用户图形界面
2. 使用匿名内部类使用匿名内部类
3. 没有直接互动JRootPane没有直接互动JRootPane
4. A demonstration of the WindowListener approach to closing JFramesA demonstration of the WindowListener approach to closing JFrames
5. 如何让对话框居中如何让对话框居中
6. 窗口关闭事件窗口关闭事件
7. 创建一个窗口创建一个窗口
8. 通过键盘绘制窗口通过键盘绘制窗口
9. 窗口和对话框数据交换窗口和对话框数据交换
10. 窗口组件窗口组件
11. 默认按钮窗口:按Enter键以激活默认按钮窗口:按Enter键以激活
12. 窗口图标窗口图标
13. 创建一个JFrame类,线程安全方式
14. 有更多的选择或更少选择方式有更多的选择或更少选择方式
15. 窗口图标格式窗口图标格式
16. FrameDemo:invoked from the event-dispatching thread FrameDemo:invoked from the event-dispatching thread
17. 屏幕边缘
18. 建立一个无边界窗口
19. JFrame关闭按钮失效
20. 退出应用程序时JFrame关闭
21. 使用组件监听,以确保其可见
22. 拖曳和移动JFrame
23. 设置窗口图标
24. 去除标题栏
25. 最大化窗口
26. Iconifies框架;最大化位不会受到影响。
27. Deiconifies框架;最大化位不会受到影响。
28. 点击关闭按钮隐藏框架
29. 应用程序退出时关闭窗口
30. 获取所有创建的窗口
31. 最大化窗口;iconified位不会受到影响
32. Making a Frame Non-Resizable: use setResizable(false) to freeze a frame's size.
33. 确定何时框架或窗口被打开或者关闭
34. 确定何时框架或窗口Iconized或最大化
35. Determining When a Component Has Been Made Visible, Moved, or Resized
36. 获得JFrame的一个组成部分
37. 禁用JFrame关闭按钮
38. 处理JFrame窗口事件
39. Define the default close operation of a JFrame to EXIT_ON_CLOSE, application will exit by calling System.exit()
40. JFrame居中
41. 添加背景图片到窗口
42. 防止窗口获得焦点
43. 创建undecorated窗口
44. JFrame始终可见
45. 最大化JFrame
46. 关闭JFrame条件
47. 建立一个无边界和标题栏的窗口
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.