[JAVA] wisselen tussen jframe met fullscreen

Pagina: 1
Acties:

  • RickyHeijnen
  • Registratie: Maart 2005
  • Laatst online: 30-04-2025
Hoi medetweakers,

Ik ben bezig met een spel maken in Java en dat zet ik op 800x600 fullscreen formaat. Nu werkt mijn code zo dat ik een hoofdscherm heb en als ik dan een spel wil spelen sluit het huidige JFrame en opent er een nieuwe JFrame. Nu ben ik dus bezig op FullScreen mode en elke keer als hij een frame sluit en opent zet hij ook de resolutie weer terug naar standaard en weer terug naar 800x600, dit duurt onnodig lang en ziet er beetje onprofessioneel uit.

Weet iemand hoe ik dat kan oplossen?

Ik heb een klasse FullScreen geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.awt.DisplayMode;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;

public class FullScreen {
    
    public FullScreen(JFrame frame) {
        GraphicsDevice dev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
        GraphicsConfiguration gc = dev.getDefaultConfiguration();
        DisplayMode mode = new DisplayMode(800, 600, 32, DisplayMode.REFRESH_RATE_UNKNOWN);        
        
        frame.setUndecorated(true); 
        dev.setFullScreenWindow(frame);
        if(dev.isDisplayChangeSupported()) dev.setDisplayMode(mode);
    }
    
}

En gebruik dan new FullScreen(this);om een JFrame fullscreen te maken.

Ik zat zelf te denken om een 'main'-JFrame te maken en daarin allemaal losse JFrame-pjes te laden en dan tussen die te wisselen, maar dit krijg ik niet helemaal voor elkaar... Iemand anders nog tips of ideeën (of een oplossing :Y) )?

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 14:32
JPanel op je frame?

Je UI keil je er dan in zijn geheel af en vervang je door het render panel of waar je ook op rendert.

Eventueel kun je dan ook de UI nog resident houden, als je wilt. Die paar kb, lekker boeien. :P

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:44

Robtimus

me Robtimus no like you

zoetericky schreef op donderdag 08 juni 2006 @ 15:58:
<code>
En gebruik dan new FullScreen(this);om een JFrame fullscreen te maken.
Slighlty offtopic, maar is het geen beter idee om dit mbv een static method te doen? Nu creeer je elke keer dat je een JFrame fullscreen wilt maken een nieuw object. Als je daarentegen een Fullscreen.fullscreen(frame); zou aanroepen scheelt dat toch weer een object creatie.

Verder kun je de daadwerkelijke screensize aanroepen dmv Toolkit.getDefaultToolkit().getScreenSize(). Dan werkt dit ook op schermen met een grotere resolutie.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • martennis
  • Registratie: Juli 2005
  • Laatst online: 16-01 14:17
het meest ideale zou zijn wanneer je maar één FullScreen object hebt, waarbinnen je, door middel van panels zoals DDD aangaf, kunt switchen van 'scherm'.

het FullScreen object bevat dan één panel waarop je werkt en wanneer deze klaar is, laat je deze gewoon naar een andere panel verwijzen. Of dit goed gaat met het repainten ed weet ik niet, maar het is het proberen waard :)

  • qless
  • Registratie: Maart 2000
  • Laatst online: 12:45

qless

...vraag maar...

Ik doe dit soort dingen altijd door een nieuw panel op de oude frame te laten tekenen, gaat veel sneller...

Website|Air 3s|Mini 4 Pro|Avata 2|Canon R6|Canon 5d2|8 fisheye|14f2.8|24f2.8|50f1.8|135f2|10-22|17-40|24-105|70-300|150-600


  • Kwistnix
  • Registratie: Juni 2001
  • Nu online
martennis schreef op donderdag 08 juni 2006 @ 22:16:
het meest ideale zou zijn wanneer je maar één FullScreen object hebt, waarbinnen je, door middel van panels zoals DDD aangaf, kunt switchen van 'scherm'.

het FullScreen object bevat dan één panel waarop je werkt en wanneer deze klaar is, laat je deze gewoon naar een andere panel verwijzen. Of dit goed gaat met het repainten ed weet ik niet, maar het is het proberen waard :)
Volgens mij wel, als je maar JFrame.pack() aanroept na het wisselen van Panel.

  • martennis
  • Registratie: Juli 2005
  • Laatst online: 16-01 14:17
FallenAngel666 schreef op donderdag 08 juni 2006 @ 22:40:
[...]


Volgens mij wel, als je maar JFrame.pack() aanroept na het wisselen van Panel.
lijkt me ook, maar je weet maar nooit :)

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 14:32
Mwoah, pack is misschien overkill.

Validate of repaint zal al wel voldoende zijn.

Overigens zal een cardlayout ook primawerken, daarmee stack je namelijk 2 of meer JPanels. Werkt zeker mooi als je je menu half doorzichtig maakt, zie je nog wel je content, maar heb je een UI.

Overigens ook leuk als je tijdens het spel onscreen info of controls wil laten zien:
http://java.sun.com/docs/...rootpane.html#layeredpane

Gewoon op een laag hoger dan de default zetten.

  • Kwistnix
  • Registratie: Juni 2001
  • Nu online
The - DDD schreef op donderdag 08 juni 2006 @ 23:29:
Mwoah, pack is misschien overkill.

Validate of repaint zal al wel voldoende zijn.
De validate() en repaint() passen de afmetingen van het JFrame niet aan op basis van de preferredSize van de subcompontenten in het JFrame.
Als je het contentpane van het JFrame een LayoutManger meegeeft die naar preferredSize luistert, dan hoef je alleen het JPanel te vervangen dat als container dient voor de GUI componenten en pack() aan te roepen. Het JFrame heeft dan gelijk het juiste formaat.
Als je op een andere manier de grootte van het JFrame aanpast dan hoef/wil je pack() inderdaad niet gebruiken.

Het ligt er dus maar aan hoe je het aanpakt, of niet? :)

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 14:32
Ja, maar als je al fullscreen bent, dan lijkt het me dat je de omvang van de JFrame niet wilt aanpassen. De resolutie van de JFrame heb je dan namelijk al lang gedefinieerd in je fullscreen configuratie.

Overigens vind ik pack niet zo'n fijne methode om tijdens executie te gebruiken. Het is niet gebruiksvriendelijk om een frame terug te snappen naar de preferred size als je als gebruiker net je best gedaan hebt het frame naar jou favoriete afmeting te resizen. :+

  • Kwistnix
  • Registratie: Juni 2001
  • Nu online
The - DDD schreef op vrijdag 09 juni 2006 @ 09:32:
Ja, maar als je al fullscreen bent, dan lijkt het me dat je de omvang van de JFrame niet wilt aanpassen. De resolutie van de JFrame heb je dan namelijk al lang gedefinieerd in je fullscreen configuratie.

Overigens vind ik pack niet zo'n fijne methode om tijdens executie te gebruiken. Het is niet gebruiksvriendelijk om een frame terug te snappen naar de preferred size als je als gebruiker net je best gedaan hebt het frame naar jou favoriete afmeting te resizen. :+
Daar heb je gelijk in. Als je continue fullscreen wil blijven werken is het niet handig.
Vanuit het oogpunt van gebruiksvriendelijkheid is het ook niet erg netjes, hoewel je de preferredSize wel op een handig formaat kan instellen. Feit blijft dat je toch geen rekening houdt met de wensen van de gebruiker.

Wat is het coden van GUIs toch een dankbaar werk! :+

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 14:32
Het is inderdaad nooit goed als je een UI bouwt. :D

Moet ook weer is wat maffe dingen met Swing gaan doen. Veel te leuk namelijk om niet te doen.

[ Voor 49% gewijzigd door The - DDD op 09-06-2006 10:11 ]

Pagina: 1