Generates a table of all available display modes, enters full-screen mode and allows you to change the display mode : 图形环境 « 二维图形 « 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 教程 » 二维图形 » 图形环境 
16. 52. 16. Generates a table of all available display modes, enters full-screen mode and allows you to change the display mode
/*
 * 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.
 */

/*
 test @(#)DisplayModeTest.java 1.4 01/07/17
 @bug 4189326
 @summary Tests changing display mode
 @author martak@eng: area=FullScreen
 @ignore This test enters full-screen mode, if available, and should not
 be run as an applet or as part of the test harness.
 */

/**
 * This test generates a table of all available display modes, enters
 * full-screen mode, if available, and allows you to change the display mode.
 * The application should look fine under each enumerated display mode.
 * On UNIX, only a single display mode should be available, and on Microsoft
 * Windows, display modes should depend on direct draw availability and the
 * type of graphics card.
 */

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.DisplayMode;
import java.awt.FlowLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

class DisplayModeModel extends DefaultTableModel {
  private DisplayMode[] modes;

  public DisplayModeModel(DisplayMode[] modes) {
    this.modes = modes;
  }

  public DisplayMode getDisplayMode(int r) {
    return modes[r];
  }

  public String getColumnName(int c) {
    return DisplayModeTest.COLUMN_NAMES[c];
  }

  public int getColumnCount() {
    return DisplayModeTest.COLUMN_WIDTHS.length;
  }

  public boolean isCellEditable(int r, int c) {
    return false;
  }

  public int getRowCount() {
    if (modes == null) {
      return 0;
    }
    return modes.length;
  }

  public Object getValueAt(int rowIndex, int colIndex) {
    DisplayMode dm = modes[rowIndex];
    switch (colIndex) {
    case DisplayModeTest.INDEX_WIDTH:
      return Integer.toString(dm.getWidth());
    case DisplayModeTest.INDEX_HEIGHT:
      return Integer.toString(dm.getHeight());
    case DisplayModeTest.INDEX_BITDEPTH: {
      int bitDepth = dm.getBitDepth();
      String ret;
      if (bitDepth == DisplayMode.BIT_DEPTH_MULTI) {
        ret = "Multi";
      else {
        ret = Integer.toString(bitDepth);
      }
      return ret;
    }
    case DisplayModeTest.INDEX_REFRESHRATE: {
      int refreshRate = dm.getRefreshRate();
      String ret;
      if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {
        ret = "Unknown";
      else {
        ret = Integer.toString(refreshRate);
      }
      return ret;
    }
    }
    throw new ArrayIndexOutOfBoundsException("Invalid column value");
  }

}

public class DisplayModeTest extends JFrame implements ActionListener,
    ListSelectionListener {

  private boolean waiting = false;
  private GraphicsDevice device;
  private DisplayMode originalDM;
  private JButton exit = new JButton("Exit");
  private JButton changeDM = new JButton("Set Display");
  private JLabel currentDM = new JLabel();
  private JTable dmList = new JTable();
  private JScrollPane dmPane = new JScrollPane(dmList);
  private boolean isFullScreen = false;

  public static final int INDEX_WIDTH = 0;
  public static final int INDEX_HEIGHT = 1;
  public static final int INDEX_BITDEPTH = 2;
  public static final int INDEX_REFRESHRATE = 3;

  public static final int[] COLUMN_WIDTHS = new int[] { 100100100100 };
  public static final String[] COLUMN_NAMES = new String[] { "Width""Height",
      "Bit Depth""Refresh Rate" };

  public DisplayModeTest(GraphicsDevice device) {
    super(device.getDefaultConfiguration());
    this.device = device;
    setTitle("Display Mode Test");
    originalDM = device.getDisplayMode();
    setDMLabel(originalDM);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    // Make sure a DM is always selected in the list
    exit.addActionListener(this);
    changeDM.addActionListener(this);
    changeDM.setEnabled(device.isDisplayChangeSupported());
  }

  public void actionPerformed(ActionEvent ev) {
    Object source = ev.getSource();
    if (source == exit) {
      device.setDisplayMode(originalDM);
      System.exit(0);
    else // if (source == changeDM)
      int index = dmList.getSelectionModel().getAnchorSelectionIndex();
      if (index >= 0) {
        DisplayModeModel model = (DisplayModeModeldmList.getModel();
        DisplayMode dm = model.getDisplayMode(index);
        device.setDisplayMode(dm);
        setDMLabel(dm);
        setSize(new Dimension(dm.getWidth(), dm.getHeight()));
        validate();
      }
    }
  }

  public void valueChanged(ListSelectionEvent ev) {
    changeDM.setEnabled(device.isDisplayChangeSupported());
  }

  private void initComponents(Container c) {
    setContentPane(c);
    c.setLayout(new BorderLayout());
    // Current DM
    JPanel currentPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    c.add(currentPanel, BorderLayout.NORTH);
    JLabel current = new JLabel("Current Display Mode : ");
    currentPanel.add(current);
    currentPanel.add(currentDM);
    // Display Modes
    JPanel modesPanel = new JPanel(new GridLayout(12));
    c.add(modesPanel, BorderLayout.CENTER);
    // List of display modes
    for (int i = 0; i < COLUMN_WIDTHS.length; i++) {
      TableColumn col = new TableColumn(i, COLUMN_WIDTHS[i]);
      col.setIdentifier(COLUMN_NAMES[i]);
      col.setHeaderValue(COLUMN_NAMES[i]);
      dmList.addColumn(col);
    }
    dmList.getSelectionModel().setSelectionMode(
        ListSelectionModel.SINGLE_SELECTION);
    dmList.getSelectionModel().addListSelectionListener(this);
    modesPanel.add(dmPane);
    // Controls
    JPanel controlsPanelA = new JPanel(new BorderLayout());
    modesPanel.add(controlsPanelA);
    JPanel controlsPanelB = new JPanel(new GridLayout(21));
    controlsPanelA.add(controlsPanelB, BorderLayout.NORTH);
    // Exit
    JPanel exitPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    controlsPanelB.add(exitPanel);
    exitPanel.add(exit);
    // Change DM
    JPanel changeDMPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    controlsPanelB.add(changeDMPanel);
    changeDMPanel.add(changeDM);
    controlsPanelA.add(new JPanel(), BorderLayout.CENTER);
  }

  public void setVisible(boolean isVis) {
    super.setVisible(isVis);
    if (isVis) {
      dmList.setModel(new DisplayModeModel(device.getDisplayModes()));
    }
  }

  public void setDMLabel(DisplayMode newMode) {
    int bitDepth = newMode.getBitDepth();
    int refreshRate = newMode.getRefreshRate();
    String bd, rr;
    if (bitDepth == DisplayMode.BIT_DEPTH_MULTI) {
      bd = "Multi";
    else {
      bd = Integer.toString(bitDepth);
    }
    if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {
      rr = "Unknown";
    else {
      rr = Integer.toString(refreshRate);
    }
    currentDM.setText(COLUMN_NAMES[INDEX_WIDTH": " + newMode.getWidth()
        " " + COLUMN_NAMES[INDEX_HEIGHT": " + newMode.getHeight() " "
        + COLUMN_NAMES[INDEX_BITDEPTH": " + bd + " "
        + COLUMN_NAMES[INDEX_REFRESHRATE": " + rr);
  }

  public void begin() {
    isFullScreen = device.isFullScreenSupported();
    setUndecorated(isFullScreen);
    setResizable(!isFullScreen);
    if (isFullScreen) {
      // Full-screen mode
      device.setFullScreenWindow(this);
      validate();
    else {
      // Windowed mode
      pack();
      setVisible(true);
    }
  }

  public static void main(String[] args) {
    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] devices = env.getScreenDevices();
    // REMIND : Multi-monitor full-screen mode not yet supported
    for (int i = 0; i < /* devices.length */; i++) {
      DisplayModeTest test = new DisplayModeTest(devices[i]);
      test.initComponents(test.getContentPane());
      test.begin();
    }
  }
}
16. 52. 图形环境
16. 52. 1. 列出所有的系统安装的字体
16. 52. 2. Different buffer capabilities for each GraphicsConfiguration on each GraphicsDevice
16. 52. 3. 获取字体
16. 52. 4. 获取屏幕尺寸
16. 52. 5. 刷新率
16. 52. 6. 颜色数
16. 52. 7. Getting the Current Screen Refresh Rate and Number of Colors
16. 52. 8. 字型字体家庭
16. 52. 9. 获得可用的字体名称
16. 52. 10. 加速图像
16. 52. 11. Create an image that does not support transparency from GraphicsConfiguration
16. 52. 12. Create an image that supports transparent pixels from GraphicsConfiguration
16. 52. 13. Create an image that supports arbitrary levels of transparency from GraphicsConfiguration
16. 52. 14. 创建缓冲图像
16. 52. 15. 检索和打印图形设备信息
16. 52. 16. Generates a table of all available display modes, enters full-screen mode and allows you to change the display mode
16. 52. 17. 设置屏幕尺寸,刷新率或色彩数
16. 52. 18. If more than one screen is available, gets the size of each screen
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.