|
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= |