begin process at 2010 02 10 11:06:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Débutant(e)

 > 

Résolution de l'écran


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Résolution de l'écran

jeudi 12 mars 2009 à 22:46:16 | Résolution de l'écran

Skyffer3

Membre Club
Bonjour,

j'aimerais changer la résolution de mon écran lorsque je fais tourner une application.
J'ai donc implémenter ce code :

        GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        DisplayMode mode = new DisplayMode(400, 400, 32, DisplayMode.REFRESH_RATE_UNKNOWN);
       
        if(device.isDisplayChangeSupported()){
            device.setDisplayMode(mode);
        }
    
Mais la résolution ne change pas.
J'ai donc mis une tempo pour laisser le temps, et la résolution ne change quand même pas.
J'ai donc pensé que seule l'application graphique du programme java lui-même avait une résolution changée.
Ainsi j'ai dessiné dans une JWindow un cercle et un carré, et j'ai mis la JWindow en mode plein écran.

J'ai bien sûr testé différentes résolutions, et le carré et le cercle garde toujours la même taille et le même emplacement, preuve que même la résolution dans mon application graphique reste inchangée.

Avez-vous une solution pour changer la résolution de l'écran et la remettre par défaut à la fin du programme, et sinon au moins changer la résolution de mon application graphique ?
Le but étant d'avoir une application graphique en mode plein écran, mais dont je contrôle la résolution, et je pense que cela passe nécessairement par un changement de résolution de tout l'écran.

Merci d'avance

++ et bonne prog

vendredi 13 mars 2009 à 01:23:25 | Re : Résolution de l'écran

gouessej

Salut

Il est possible que ton système supporte seulement le mode plein écran simulé et dans ce cas, tu ne pourras pas changer la résolution de l'écran. As-tu essayé de passer en mode debug? Cordialement

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
vendredi 13 mars 2009 à 01:24:06 | Re : Résolution de l'écran

gouessej

Montre aussi le code dont tu te sers pour passer en mode plein écran.

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
vendredi 13 mars 2009 à 07:40:06 | Re : Résolution de l'écran

Skyffer3

Membre Club
Merci beaucoup de t'intéresser à mon problème.

Je suis sous windows vista avec un ordinateur d'assez bonne puissance.

Voici le code :

<span style="color:#0000FF">import</span> java.awt.DisplayMode;
<br />
<br />
<br /><span style="color:#0000FF">import</span> java.awt.Color;
<br /><span style="color:#0000FF">import</span> java.awt.Dimension;
<br /><span style="color:#0000FF">import</span> java.awt.GraphicsDevice;
<br /><span style="color:#0000FF">import</span> java.awt.GraphicsEnvironment;
<br />
<br /><span style="color:#0000FF">import</span> java.awt.Graphics;
<br /><span style="color:#0000FF">import</span> java.awt.Graphics2D;
<br /><span style="color:#0000FF">import</span> java.awt.event.WindowAdapter;
<br /><span style="color:#0000FF">import</span> java.awt.event.WindowEvent;
<br />
<br /><span style="color:#0000FF">import</span> javax.swing.JComponent;
<br /><span style="color:#0000FF">import</span> javax.swing.JWindow;
<br />
<br />
<br />
<br /><span style="color:#0000FF">public</span> <span style="color:#0000FF">class</span> Test {
<br />
<br />    <span style="color:#008000">/**
<br />     * Classe main
<br />     * @param args
<br />     */</span>
<br />    <span style="color:#0000FF">public</span> <span style="color:#0000FF">static</span> <span style="color:#0000FF">void</span> main(String[] args) {
<br />       
<br />        <span style="color:#008000">//mettre l'&#233;cran en r&#233;solution 1280*1024</span>
<br />       
<br />        GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
<br />        DisplayMode mode = <span style="color:#0000FF">new</span> DisplayMode(400, 400, 32, DisplayMode.REFRESH_RATE_UNKNOWN);
<br />       
<br />        <span style="color:#0000FF">if</span>(device.isDisplayChangeSupported()){
<br />            device.setDisplayMode(mode);
<br />        }
<br />       
<br />       
<br />        Canvas jc = <span style="color:#0000FF">new</span> Canvas();
<br />        jc.setBackground(Color.WHITE);
<br />        device.setFullScreenWindow(jc);
<br />        GUIHelper.showOnFrame(jc);
<br />
<br />       
<br />    }
<br />
<br />}
<br />
<br />
<br />@SuppressWarnings(&quot;<span style="color:#8B0000">serial</span>&quot;)
<br /><span style="color:#0000FF">class</span> Canvas <span style="color:#0000FF">extends</span> JWindow {
<br />   
<br />    <span style="color:#0000FF">public</span> <span style="color:#0000FF">void</span> paint(Graphics g) {
<br />        Color c = g.getColor();
<br />        g.setColor(Color.RED);
<br />        g.fillRect(10,10,80,80);
<br />        g.setColor(Color.BLUE);
<br />        g.fillOval(150,50,80,80);
<br />        g.setColor(c);
<br />    }
<br />
<br />   
<br />}
<br />
<br />@SuppressWarnings(&quot;<span style="color:#8B0000">serial</span>&quot;)
<br /><span style="color:#0000FF">class</span> GUIHelper {
<br />   
<br />    <span style="color:#0000FF">public</span> <span style="color:#0000FF">static</span> <span style="color:#0000FF">void</span> showOnFrame(JWindow component) {
<br />        JWindow frame = <span style="color:#0000FF">new</span> JWindow();
<br />        WindowAdapter wa = <span style="color:#0000FF">new</span> WindowAdapter() {
<br />            <span style="color:#0000FF">public</span> <span style="color:#0000FF">void</span> windowClosing(WindowEvent e) {
<br />                System.exit(0);
<br />            }
<br />        };
<br />        frame.addWindowListener(wa);
<br />        frame.getContentPane().add(component);
<br />        frame.pack();
<br />        frame.setVisible(<span style="color:#0000FF">true</span>);
<br />       
<br />    }
<br />
<br />}<br />
<!-- Code colorisé via http://tools.codes-sources.com/colorizeCode.aspx
(Merci de conserver ce commentaire si vous utilisez ce code html) -->

La classe de dessin est codé de manière "bourrin", c'est juste pour un test je ne sais pas dessiner dans une JWindow sinon.

Le but au final, c'est de travailler grâce à jogl en opengl dans la JWindow, pour ça je fais une jwindow, je change ma résolution d'écran, et je mets la JWindow en mode plein écran.
Ensuite je compte mettre un canvas de JOGL pour swing dedans pour faire de l'open GL.

Merci d'avance si tu vois la solution pour la résolution d'écran.

++ et bonne prog

PS : c'est quoi le problème de serial sous eclipse pour mes deux classes à la fin, serializable class ?

PS 2: chapeau pour ton FPS, j'y avais déjà joué, connaitrais-tu des tutos sympas en JOGL, j'en ai peu pour commencer.

PS 3: c'est bien un canvas de jogl qu'il faut mettre dans ma jwindow, et ce canvas doit être celui adapté pour swing, c'est le ***Panel (je ne sais plus le nom, je regarderai cela ce soir) ?

vendredi 13 mars 2009 à 07:43:49 | Re : Résolution de l'écran

Skyffer3

Membre Club
Voici le code, je ne sais pas pourquoi il ne veut pas mettre mon code colorisé.

import java.awt.DisplayMode;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JComponent;
import javax.swing.JWindow;




public class Test {

    /**
     * Classe main
     * @param args
     */
    public static void main(String[] args) {
       
        //mettre l'écran en résolution 1280*1024
       
        GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        DisplayMode mode = new DisplayMode(400, 400, 32, DisplayMode.REFRESH_RATE_UNKNOWN);
       
        if(device.isDisplayChangeSupported()){
            device.setDisplayMode(mode);
        }
       
        Canvas jc = new Canvas();
        jc.setBackground(Color.WHITE);
        device.setFullScreenWindow(jc);
        GUIHelper.showOnFrame(jc);

       
    }

}


@SuppressWarnings("serial")
class Canvas extends JWindow {
   
    public void paint(Graphics g) {
        Color c = g.getColor();
        g.setColor(Color.RED);
        g.fillRect(10,10,80,80);
        g.setColor(Color.BLUE);
        g.fillOval(150,50,80,80);
        g.setColor(c);
    }

   
}

@SuppressWarnings("serial")
class GUIHelper {
   
    public static void showOnFrame(JWindow component) {
        JWindow frame = new JWindow();
        WindowAdapter wa = new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        };
        frame.addWindowListener(wa);
        frame.getContentPane().add(component);
        frame.pack();
        frame.setVisible(true);
       
    }

}

++ et bonne prog

vendredi 13 mars 2009 à 11:00:17 | Re : Résolution de l'écran

gouessej

Réponse acceptée !
Bonjour

Premièrement, je te déconseille d'utiliser Swing avec JOGL, ça passe très mal sur certaines machines, mieux vaut faire une Frame et mettre un GLCanvas dedans. Evite de mélanger un canvas fait pour AWT avec un conteneur Swing. Si tu tiens à Swing, utilise plutôt un GLJPanel.

Je te conseille de jeter un coup d'oeil dans le tutoriel de Sun (en anglais) sur l'exclusive full-screen mode.

J'ai du mal à comprendre la structuration de ton code, tu compliques les choses inutilement. Je te conseille de faire ainsi :
Frame frame = new Frame();
frame.setLocation(0,0);//sets the window at the top left corner
frame.setUndecorated(true);//makes the decoration disappear
frame.setIgnoreRepaint(true);//prevents the system from calling repaint automatically
//gets the size of the screen
int screenWidth=(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int screenHeight=(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
frame.setSize(screenWidth,screenHeight);
//bug fix : under Linux, sometimes the window was drawn below the taskbar
frame.setResizable(true);
GLCapabilities capabilities=new GLCapabilities();
capabilities.setDoubleBuffered(true);//enables double buffering
capabilities.setHardwareAccelerated(true);//enables hardware acceleration
GLCanvas canvas=new GLCanvas(capabilities);
canvas.setAutoSwapBufferMode(false);//prevents any auto buffer swapping
//TODO: add your GLEventListener here
//TODO: call display() once here
frame.add(canvas);
frame.setVisible(true);
canvas.requestFocus();
GraphicsDevice device=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(device.isDisplayChangeSupported() && device.isFullScreenModeSupported())
{
DisplayMode oldDisplayMode = device.getDisplayMode();
DisplayMode newDisplayMode = new DisplayMode(400, 400,oldDisplayMode.getBitDepth(),oldDisplayMode.getDisplayRate());
      
try {
device.setFullScreenWindow(frame);
device.setDisplayMode(newDisplayMode);
} finally {
myDevice.setDisplayMode(oldDisplayMode);
myDevice.setFullScreenWindow(null);
}
}      

Ton erreur a été principalement de changer le mode d'affichage avant de passer en exclusive full-screen mode, il faut lire la documentation Java :
http://java.sun.com/docs/books/tutorial/extra/fullscreen/exclusivemode.html

Enfin, pour le tutoriel, va voir sur mon site, j'en ai fait un, il n'est pas fini mais au pire, tu peux toujours me demander un coup de main et passe nous voir sur javagaming.org, nous serons heureux d'aider un programmeur de jeux en Java :D

Bonne programmation.

P.S: n'oublie pas de désactiver DirectDraw sous Windows quand tu déploies ton application sur le web sinon tu vas avoir de mauvaises surprises.


TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
vendredi 13 mars 2009 à 11:02:00 | Re : Résolution de l'écran

gouessej

Utilise ça quand tu lances ton application de préférence :
-Dsun.java2d.noddraw=true
Tu as l'équivalent aussi pour les applets et pour Java Webstart. Bon courage.


TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
vendredi 13 mars 2009 à 12:52:05 | Re : Résolution de l'écran

Skyffer3

Membre Club
Merci beaucoup de ton aide.
Sinon je n'ai pas trouvé de tutorial sur ton site

Je vais tester dès ce soir ta méthode.

Si je peux te poser quelques questions :

- je vais donc utiliser awt, cependant swing gère l'affichage dans un thread à part il me semble, faut-il alors créer soi-même un thread pour gérer l'affichage awt, ou comme il s'agit juste d'une simple fenêtre où je travaille dedans avec opengl, faut-il faire le thread sur ce que je fais avec opengl et jogl ?
- c'est quoi directdraw (je ne développe pas pour le web )
- si je veux distribuer mon appli, je mets le jogl.jar dans le bon package où j'ai mon appli, mais où dois-je mettre la dll de jogl ?
- si j'ai bien compris, il faut d'abord créer sa fenêtre, et après changer la résolution de l'écran ?
- enfin, pourquoi faire une frame undecorated et pas l'équivalent d'une jwindow qui doit être une window en awt ?

Merci d'avance et désolé pour toutes ces questions, j'ai la doc de l'api java, mais c'est pas toujours clair, il faut sûrement prendre l'habitude.





++ et bonne prog

vendredi 13 mars 2009 à 13:23:23 | Re : Résolution de l'écran

gouessej

Pardon j'ai oublié de mettre le lien je crois : http://tuer.developpez.com/

Que tu sois dans Swing ou dans AWT, l'affichage est toujours fait dans l'Event Dispatching Thread. OpenGL ne doit être appelé que dans ce thread mais c'est assez facile, seule la méthode display(GLAutoDrawable drawable) doit dessiner dans le canevas, c'est aussi simple que ça. Tu peux soit utiliser un Animator qui va raffraîchir le canevas tout seul, soit raffraîchir le canevas explicitement dans ta boucle principale.

OpenGL et DirectDraw/Direct3D sont deux API qui permettent d'accéder à l'accélération graphique matérielle. Il ne faut pas les utiliser en même temps. C'est pourquoi il faut désactiver DirectDraw pour éviter que ça pose problème au niveau de la couche de pilotes.

Pour distribuer ton application, oublie les DLL sauf si tu veux absolument priver les utilisateurs de Linux de la possibilité de tester ton programme. Regarde dans mon tutoriel, j'explique comment faire ça. Il faut juste rajouter une ligne dans le fichier JNLP et Java Webstart va charger l'extension JOGL avec les bons JAR et les bons modules natifs, ce n'est pas à toi de t'en préoccuper. Regarde dans la rubrique 5.4 de mon tutoriel.

Il faut d'abord créer la fenêtre, passer en mode exclusive fullscreen et alors tu as le droit de changer la résolution (certains systèmes n'autorisent que le mode plein écran mais pas le changement de résolution).

N'utilise pas une Window pour cette raison :
A window must have either a frame, dialog, or another window defined as its owner when it's constructed.
Ca sort de la documentation. Dans tous les cas, il te faut au moins une Frame en AWT.

Tiens-moi au courant pour la suite.

Bonne programmation :)


TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
vendredi 13 mars 2009 à 14:16:00 | Re : Résolution de l'écran

Skyffer3

Membre Club
Merci beaucoup pour toute ton aide, je vais tester tout ça ce soir.

A window must have either a frame, dialog, or another window defined as its owner when it's constructed.
Cela signifie que pour avoir une window, il faut la mettre dans un conteneur comme une frame ?
Quel est l'intérêt d'une window, je pensais que c'était comme une frame mais sans barre (undecorated) ?

J'ai de toute façon beaucoup de mal entre les différents termes canvas, container, component, ...

"Pour distribuer ton application, oublie les DLL"
Ce sera à chaque utilisateur d'aller chercher les dll ou les .so selon le système, c'est ça ?
Je ne compte pas faire une javawebstart pour le moment, peut-être quand l'application sera plus ou moins développé.

Est-ce qu'on peut désactiver le directdraw directement dans le code java, et le remettre à la fin de l'application ?

"javagaming.org, nous serons heureux d'aider un programmeur de jeux en Java :D"
Merci beaucoup pour tout le temps que tu prends à aider des pauvres programmeurs comme moi.
Mais je ne programme pas de jeu, en tout cas pas pour le moment, j'essaye avec un ami de coder un modeste moteur 3D, par la suite un moteur de jeu, dans le but de faire quelque chose de simple mais que nous connaitrons dans les moindres détails pour faire des jeux, et qui serait adapté à nos besoins exacts (orientation RTS du moteur).

++ et bonne prog


PS : ne t'inquiète pas, je te tiendrai au courant de l'avancée du projet, mais pour le moment nous sommes en SUP, et donc pas le temps de programmer ET DE faire un site web, donc je poserai sûrement beaucoup de questions sur le forum, ce qui permettera de voir où on en est.

De toute façon on veut faire un code open source, donc si tu veux les sources y a aucn problème, mais pour le moment y a rien, on en est juste à réfléchir à l'architecture du moteur et on veut tester JOGL awt.


1 2 3

Cette discussion est classée dans : application, graphique, écran, résolution, mode


Répondre à ce message

Sujets en rapport avec ce message

Runtime [ par EducJava ] Salut,Je viens d'apprendre à l'école comment charger une page HTML avec le browser de Microsoft dans une application Java, avec la méthode Runtime.ge Focus [ par refre ] Bonjour à tous... J'ai un probleme de focus avec une application... j'ai une zone graphique et j'aimerai qu'elle prenne le focus... mais dans la fenet comment vider l'écran en mode console [ par johanb ] bonjour à tous, alors voilà, je viens de commencer dans le java et j'aimerais savoir quelle librairie utiliser pour vider l'écran dans un programme en Aide pour une Application graphique [ par Jarod1980 ] Bonjour tout le monde,Voilà, j'aurais besoin d'aide pour développer une application graphique. En effet, j'ai developpé un petit programme qui permet Non informaticien cherche assistance pour développer un complément d'application (interface graphique) [ par Euphon50 ] Bonjour,Faut-il hésiter avant d'envoyer une bouteille à la mer ? En réalité, n'ayant indentifé aucun rique à le faire, sauf celui d'être ridicule, je réaliser application en mode web [ par Morphatef ] taftoufa Tutoriels pour concevoir une application graphique [ par demcoul ] Bonjour,Je suis à la recherche de tutoriels ou exemples de code de dévéloppement d'application graphique permettant de travailler avec une barre de me Probleme avec l'editeur graphique de NetBean [ par killerb0b ] Bonjour, J'ai repris une application java develloppée sur NetBean 1.4 (nouvel editeur pour moi), et tout se passe bien mise à part que je rencontre u Mode graphique pour la gestion des droits d'accès en SVN [ par amalf ] salut tout le mondeje cherche à paramétrer SVN (gérer les droits d'accès par utilisateur/projet/fichier) de manieère graphique sans me rendre au fichi Application plein écran [ par Mikonyx ] Slt,est il possible de mettre une application java en plein écran? (plus de barre de titre...) et comment fait on?MERCIMiko


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales