[Java] 2 JPanels tegelijk zichtbaar op 1 JFrame

Pagina: 1
Acties:

  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 03-04 12:13
Hi,

Ik ben een Java Applicatie aan het maken. Hiervoor wil ik een afbeelding op de achtergrond hebben, en daaroverheen een transparante laag, waar ik wat knoppen, tekstvakken etc in kan plaatsen.

Na veel gegoogled, en gezoek op GoT ben ik er nog niet uit.

Op dit moment is het zo.
- programma start (via de main)
- er wordt een frame aangemaakt (grootte = full screen)
- deze maakt op zijn beurt weer een panel aan en die panel bevat een afbeelding. deze wordt ook fullscreen weergegeven
- er wordt een nieuwe panel aangemaakt met de knop inloggen. Deze wil ik middenin weergeven. Dus OP het plaatje, maar niet in hetzetzelfde paneltje, want als ik op die knop geklikt hebt, moet'ie verdwijnen en komt er een hoofdmenu oid.

Probleem: alleen afbeelding wordt weergegeven. (de knop ook, maar is niet zichtbaar, staat onder de afbeelding) Als ik het afbeeldingspaneel uitschakel (setVisible(false)) dan zie ik de knop wel.

WIe kan mij de gouden tip geven?

Wie nooit tijd heeft, kan er niet mee omgaan.


  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Alle swing componenten hebben paint methods. Deze kan je dmv een anonymous block zelf een invulling geven.

Bijvoorbeeld

code:
1
2
3
4
5
JPanel panel = new JPanel() {
    public void paint(Graphics arg0) {
        super.paint(arg0);
    }
}

[ Voor 50% gewijzigd door ronaldmathies op 16-12-2004 20:18 ]

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 15:56

Robtimus

me Robtimus no like you

Je zoekt een manier om een achtergrondplaatje op je panel te zetten?
BackgroundPanel (CopyRight * Robtimus ;))

Met de search had je die wellicht kunnen vinden, want ik heb hem gemaakt als antwoord op een vraag hier.

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


  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 03-04 12:13
Zoals je waarschijnlijk hebt kunnen lezen in mijn inleiding hierboven lukt het mij om een plaatje op de achtergrond te laden :)

Nogmaals het probleem. Ik wil TEGELIJKERTIJD 2 JPanels zichtbaar hebben
structuur
Programma
- frame
- - -+ Panel met achtergrond
- - -+ Panel met knoppen, maar de rest transparant, zodat de achtergrond zichtbaar is

Dat transparante heb ik proberen op te lossen met 'opaque' maar dat werkt niet :(

Iemand?

[ Voor 6% gewijzigd door Black Hawk op 16-12-2004 21:02 ]

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 15:56

Robtimus

me Robtimus no like you

Black Hawk schreef op donderdag 16 december 2004 @ 21:00:
Zoals je waarschijnlijk hebt kunnen lezen in mijn inleiding hierboven lukt het mij om een plaatje op de achtergrond te laden :)

Nogmaals het probleem. Ik wil TEGELIJKERTIJD 2 JPanels zichtbaar hebben
structuur
Programma
- frame
- - -+ Panel met achtergrond
- - -+ Panel met knoppen, maar de rest transparant, zodat de achtergrond zichtbaar is

Dat transparante heb ik proberen op te lossen met 'opaque' maar dat werkt niet :(

Iemand?
Dat ene panel met achtergrond hoeft toch helemaal geen panel te zijn? Als je nog eens naar mijn code kijkt zie je dat het precies doet wat jij wilt: waar controls zitten zijn die controls zichtbaar, en verder het achtergrondplaatje.

Maar als jij zelf met die 2 panels wilt werken zul je ook waarschijnlijk zelf een layout manager moeten schrijven.

Dan krijgt de frame.getContentPane() die layout manager, die eerst je achtergrondpanel aande contentpane bindt op punt (0,0), en daarna het andere (opaque == false!) panel op precies hetzelfde punt. Beide panels hebben dan ook een grootte, kun je zelf bepalen.
Zo had ik het in een vorige versie van mijn panel ook ongeveer gedaan. Tweede panel werd zo over het eerste panel heengeplaatst.

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


  • Nibble
  • Registratie: Juli 2001
  • Laatst online: 28-04 08:05
@TS: Zoek eens op het keyword "glasspane"
oh en btw, ik zou paintcomponent gebruiken ipv paint in geval van swing.

[ Voor 50% gewijzigd door Nibble op 16-12-2004 21:41 ]

T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.


  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 03-04 12:13
Ik snap er nog niet veel van. De volgende code heb ik nu

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  public GUIController(FrmAchtergrond parent) 
  {
    this.parent = parent;
    
    PnlAfbeelding paneelAfb = new PnlAfbeelding();
    PnlLogin login = new PnlLogin();
    
    login.setVisible(true);
    login.setOpaque(false);
    
    parent.getContentPane().add(paneelAfb, null);
    parent.getContentPane().add(login, null);       
    parent.validate();    
  }


(de parent = dus het frame)
Dit zou toch moeten werken ???

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 15:56

Robtimus

me Robtimus no like you

Die contentpane heeft als default een FlowLayout, dus worden componenten naast elkaar geplaatst.
Zoals ik al zei, wat jij wil kan wel, maar dan moet je een (eigen?) layout manager gebruiken die de componenten op dezelfde plek kan neerzetten.

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


  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 03-04 12:13
Probleem is al opgelost :)

Een achtergrond frame, met daarop een panel met een afbeelding. De volgende panels die ik wil toevoegen (en dus aan/uit wil zetten via setVisible() ) plaats ik OP de panel van de afbeelding.

Dus:

Frame
---+ achtergrondpanel
--------+ panel 1
--------+ panel 2
--------+ enz.

en niet:

Frame
----+ achtergrondpanel
----+ panel 1
----+ panel 2
----+ enz.

Wie nooit tijd heeft, kan er niet mee omgaan.


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Black Hawk schreef op donderdag 06 januari 2005 @ 10:28:
. De volgende panels die ik wil toevoegen (en dus aan/uit wil zetten via setVisible() ) plaats ik OP de panel van de afbeelding.
Daar kun je ook een CardLayout voor gebruiken:

http://java.sun.com/j2se/.../java/awt/CardLayout.html
A CardLayout object is a layout manager for a container. It treats each component in the container as a card. Only one card is visible at a time, and the container acts as a stack of cards. The first component added to a CardLayout object is the visible component when the container is first displayed.
Pagina: 1