指定窗饰 : JFrame窗口 « Swing « Java 教程

En
Java 教程
1. 语言基础
2. 数据类型
3. 操作符
4. 流程控制
5. 类定义
6. 开发相关
7. 反射
8. 正则表达式
9. 集合
10. 线
11. 文件
12. 泛型
13. 本土化
14. Swing
15. Swing事件
16. 二维图形
17. SWT
18. SWT 二维图形
19. 网络
20. 数据库
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web服务SOA
27. EJB3
28. Spring
29. PDF
30. 电子邮件
31. 基于J2ME
32. J2EE应用
33. XML
34. 设计模式
35. 日志
36. 安全
37. Apache工具
38. 蚂蚁编译
39. JUnit单元测试
Java
Java 教程 » Swing » JFrame窗口 
14. 80. 11. 指定窗饰
指定窗饰
/*
 *
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
 * modify and redistribute this software in source and binary code form,
 * provided that i) this copyright notice and license appear on all copies of
 * the software; and ii) Licensee does not utilize the software in a manner
 * which is disparaging to Sun.
 *
 * 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 AND ITS LICENSORS SHALL NOT BE
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
 * OR DISTRIBUTING THE 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 SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */    
    
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;

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();
    }
  }
}
14. 80. JFrame窗口
14. 80. 1. 创建一个窗口创建一个窗口
14. 80. 2. 显示JFrame实例显示JFrame实例
14. 80. 3. 调整和定位JFrame调整和定位JFrame
14. 80. 4. JFrame窗口关闭行动常数JFrame窗口关闭行动常数
14. 80. 5. Windows的尺寸变化Windows的尺寸变化
14. 80. 6. 窗口居中窗口居中
14. 80. 7. 扩展JFrame :默认情况下关闭扩展JFrame :默认情况下关闭
14. 80. 8. 退出应用程序时关闭JFrame
14. 80. 9. JFrame with Label and Window Listener to Handle Closing the FrameJFrame with Label and Window Listener to Handle Closing the Frame
14. 80. 10. 处理JFrame事件
14. 80. 11. 指定窗饰指定窗饰
14. 80. 12. 设置默认的窗口关闭操作
14. 80. 13. SetIconImages和JFrame
14. 80. 14. 建立一个无边界Titleless的JFrame
14. 80. 15. 条件关闭JFrame
14. 80. 16. 建立一个无边界窗口
14. 80. 17. 创建窗口的背景图片
14. 80. 18. 为窗口设置图标
14. 80. 19. 获取所有创建的窗口
14. 80. 20. 去除标题栏框
14. 80. 21. Making a Frame Non-Resizable: use setResizable(false) to freeze a frame's size.
14. 80. 22. 使用组件事件,以确保窗口可见
14. 80. 23. 拖曳和移动窗口
14. 80. 24. 禁用关闭按钮JFrame
14. 80. 25. 最大化JFrame
14. 80. 26. JFrame始终可见
14. 80. 27. 防止窗口获得焦点
14. 80. 28. 容器组件的子组件
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.