From: <je...@ob...> - 2002-10-21 19:27:30
|
/*=0A test @(#)DisplayModeTest.java 1.4 01/07/17=0A @bug 4189326=0A @sum= mary Tests changing display mode=0A @author martak@eng: area=3DFullScreen= =0A @ignore This test enters full-screen mode, if available, and should no= t=0A be run as an applet or as part of the test harness.=0A*/=0A=0A/**=0A = * This test generates a table of all available display modes, enters=0A * f= ull-screen mode, if available, and allows you to change the display mode.= =0A * The application should look fine under each enumerated display mode.= =0A * On UNIX, only a single display mode should be available, and on Micro= soft=0A * Windows, display modes should depend on direct draw availability = and the=0A * type of graphics card.=0A */=0A=0Aimport java.awt.*;=0Aimport = java.awt.event.*;=0Aimport javax.swing.*;=0Aimport javax.swing.event.*;=0Ai= mport javax.swing.table.*;=0A=0Aclass DisplayModeModel extends DefaultTable= Model {=0A private DisplayMode[] modes;=0A=0A public DisplayModeModel= (DisplayMode[] modes) {=0A this.modes =3D modes;=0A }=0A=0A pu= blic DisplayMode getDisplayMode(int r) {=0A return modes[r];=0A }= =0A=0A public String getColumnName(int c) {=0A return DisplayMode= Test.COLUMN=5FNAMES[c];=0A }=0A=0A public int getColumnCount() {=0A = return DisplayModeTest.COLUMN=5FWIDTHS.length;=0A }=0A=0A publi= c boolean isCellEditable(int r, int c) {=0A return false;=0A }=0A= =0A public int getRowCount() {=0A if (modes =3D=3D null) {=0A = return 0;=0A }=0A return modes.length;=0A }=0A=0A = public Object getValueAt(int rowIndex, int colIndex) {=0A Display= Mode dm =3D modes[rowIndex];=0A switch (colIndex) {=0A ca= se DisplayModeTest.INDEX=5FWIDTH :=0A return Integer.toStrin= g(dm.getWidth());=0A case DisplayModeTest.INDEX=5FHEIGHT :=0A = return Integer.toString(dm.getHeight());=0A case Di= splayModeTest.INDEX=5FBITDEPTH : {=0A int bitDepth =3D dm.ge= tBitDepth();=0A String ret;=0A if (bitDepth = =3D=3D DisplayMode.BIT=5FDEPTH=5FMULTI) {=0A ret =3D "Mu= lti";=0A } else {=0A ret =3D Integer.toSt= ring(bitDepth);=0A }=0A return ret;=0A = }=0A case DisplayModeTest.INDEX=5FREFRESHRATE : {=0A = int refreshRate =3D dm.getRefreshRate();=0A String = ret;=0A if (refreshRate =3D=3D DisplayMode.REFRESH=5FRATE=5F= UNKNOWN) {=0A ret =3D "Unknown";=0A } els= e {=0A ret =3D Integer.toString(refreshRate);=0A = }=0A return ret;=0A }=0A }=0A = throw new ArrayIndexOutOfBoundsException("Invalid column value");=0A = }=0A=0A}=0A=0Apublic class DisplayModeTest extends JFrame implements Action= Listener,=0A ListSelectionListener {=0A=0A private boolean waiting = =3D false;=0A private GraphicsDevice device;=0A private DisplayMode o= riginalDM;=0A private JButton exit =3D new JButton("Exit");=0A privat= e JButton changeDM =3D new JButton("Set Display");=0A private JLabel cur= rentDM =3D new JLabel();=0A private JTable dmList =3D new JTable();=0A = private JScrollPane dmPane =3D new JScrollPane(dmList);=0A private boo= lean isFullScreen =3D false;=0A=0A public static final int INDEX=5FWIDTH= =3D 0;=0A public static final int INDEX=5FHEIGHT =3D 1;=0A public st= atic final int INDEX=5FBITDEPTH =3D 2;=0A public static final int INDEX= =5FREFRESHRATE =3D 3;=0A=0A public static final int[] COLUMN=5FWIDTHS = =3D new int[] {=0A 100, 100, 100, 100=0A };=0A public static f= inal String[] COLUMN=5FNAMES =3D new String[] {=0A "Width", "Height"= , "Bit Depth", "Refresh Rate"=0A };=0A=0A public DisplayModeTest(Grap= hicsDevice device) {=0A super(device.getDefaultConfiguration());=0A = this.device =3D device;=0A setTitle("Display Mode Test");=0A = originalDM =3D device.getDisplayMode();=0A setDMLabel(origina= lDM);=0A setDefaultCloseOperation(EXIT=5FON=5FCLOSE);=0A // M= ake sure a DM is always selected in the list=0A exit.addActionListen= er(this);=0A changeDM.addActionListener(this);=0A changeDM.se= tEnabled(device.isDisplayChangeSupported());=0A }=0A=0A public void a= ctionPerformed(ActionEvent ev) {=0A Object source =3D ev.getSource()= ;=0A if (source =3D=3D exit) {=0A device.setDisplayMode(o= riginalDM);=0A System.exit(0);=0A } else { // if (source = =3D=3D changeDM)=0A int index =3D dmList.getSelectionModel().get= AnchorSelectionIndex();=0A if (index >=3D 0) {=0A = DisplayModeModel model =3D (DisplayModeModel)dmList.getModel();=0A = DisplayMode dm =3D model.getDisplayMode(index);=0A d= evice.setDisplayMode(dm);=0A setDMLabel(dm);=0A = setSize(new Dimension(dm.getWidth(), dm.getHeight()));=0A = validate();=0A }=0A }=0A }=0A=0A public void value= Changed(ListSelectionEvent ev) {=0A changeDM.setEnabled(device.isDis= playChangeSupported());=0A }=0A=0A private void initComponents(Contai= ner c) {=0A setContentPane(c);=0A c.setLayout(new BorderLayou= t());=0A // Current DM=0A JPanel currentPanel =3D new JPanel(= new FlowLayout(FlowLayout.CENTER));=0A c.add(currentPanel, BorderLay= out.NORTH);=0A JLabel current =3D new JLabel("Current Display Mode := ");=0A currentPanel.add(current);=0A currentPanel.add(curren= tDM);=0A // Display Modes=0A JPanel modesPanel =3D new JPanel= (new GridLayout(1, 2));=0A c.add(modesPanel, BorderLayout.CENTER);= =0A // List of display modes=0A for (int i =3D 0; i < COLUMN= =5FWIDTHS.length; i++) {=0A TableColumn col =3D new TableColumn(= i, COLUMN=5FWIDTHS[i]);=0A col.setIdentifier(COLUMN=5FNAMES[i]);= =0A col.setHeaderValue(COLUMN=5FNAMES[i]);=0A dmList.= addColumn(col);=0A }=0A dmList.getSelectionModel().setSelecti= onMode(=0A ListSelectionModel.SINGLE=5FSELECTION);=0A dmL= ist.getSelectionModel().addListSelectionListener(this);=0A modesPane= l.add(dmPane);=0A // Controls=0A JPanel controlsPanelA =3D ne= w JPanel(new BorderLayout());=0A modesPanel.add(controlsPanelA);=0A = JPanel controlsPanelB =3D new JPanel(new GridLayout(2, 1));=0A = controlsPanelA.add(controlsPanelB, BorderLayout.NORTH);=0A // Exit= =0A JPanel exitPanel =3D new JPanel(new FlowLayout(FlowLayout.CENTER= ));=0A controlsPanelB.add(exitPanel);=0A exitPanel.add(exit);= =0A // Change DM=0A JPanel changeDMPanel =3D new JPanel(new F= lowLayout(FlowLayout.CENTER));=0A controlsPanelB.add(changeDMPanel);= =0A changeDMPanel.add(changeDM);=0A controlsPanelA.add(new JP= anel(), BorderLayout.CENTER);=0A }=0A=0A public void setVisible(boole= an isVis) {=0A super.setVisible(isVis);=0A if (isVis) {=0A = dmList.setModel(new DisplayModeModel(device.getDisplayModes()));= =0A }=0A }=0A=0A public void setDMLabel(DisplayMode newMode) {= =0A int bitDepth =3D newMode.getBitDepth();=0A int refreshRat= e =3D newMode.getRefreshRate();=0A String bd, rr;=0A if (bitD= epth =3D=3D DisplayMode.BIT=5FDEPTH=5FMULTI) {=0A bd =3D "Multi"= ;=0A } else {=0A bd =3D Integer.toString(bitDepth);=0A = }=0A if (refreshRate =3D=3D DisplayMode.REFRESH=5FRATE=5FUNKNOW= N) {=0A rr =3D "Unknown";=0A } else {=0A rr = =3D Integer.toString(refreshRate);=0A }=0A currentDM.setText(= =0A COLUMN=5FNAMES[INDEX=5FWIDTH] + ": " + newMode.getWidth() + = " "=0A + COLUMN=5FNAMES[INDEX=5FHEIGHT] + ": " + newMode.getHeig= ht() + " "=0A + COLUMN=5FNAMES[INDEX=5FBITDEPTH] + ": " + bd + "= "=0A + COLUMN=5FNAMES[INDEX=5FREFRESHRATE] + ": " + rr=0A = );=0A }=0A=0A public void begin() {=0A isFullScreen =3D = device.isFullScreenSupported();=0A setUndecorated(isFullScreen);=0A = setResizable(!isFullScreen);=0A if (isFullScreen) {=0A = // Full-screen mode=0A device.setFullScreenWindow(this);=0A= validate();=0A } else {=0A // Windowed mode= =0A pack();=0A setVisible(true);=0A }=0A }= =0A=0A public static void main(String[] args) {=0A GraphicsEnviro= nment env =3D GraphicsEnvironment.=0A getLocalGraphicsEnvironmen= t();=0A GraphicsDevice[] devices =3D env.getScreenDevices();=0A = // REMIND : Multi-monitor full-screen mode not yet supported=0A f= or (int i =3D 0; i < 1 /* devices.length */; i++) {=0A DisplayMo= deTest test =3D new DisplayModeTest(devices[i]);=0A test.initCom= ponents(test.getContentPane());=0A test.begin();=0A }=0A = }=0A}=0A= |