Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Layout del Frame

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957

    Layout del Frame

    Ciao a tutti,
    ho un piccolo problema con la gestione dei vari Panel nel Frame.

    Vorrei 3 pannelli:
    due secondo il BorderLayout, in modo che uno sia al centrato e l'altro a sud.
    Il terzo vorrei fosse sovrapposto in alto a sinistra a tutti, questo dovrà contenere un'immagine con un logo. Perciò vorrei rimanesse sempre in primo piano, ma ancorato in altro a sx.

    Attualmente sono arrivato a mettere i primi due:
    codice:
    Container mainContainer = getContentPane();
    mainContainer.setLayout(new BorderLayout());
                   
    mainContainer.add(centerPanel,BorderLayout.CENTER);   
    mainContainer.add(southPanel,BorderLayout.SOUTH);
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Layout del Frame

    Originariamente inviato da GoldEmish
    Vorrei 3 pannelli:
    due secondo il BorderLayout, in modo che uno sia al centrato e l'altro a sud.
    Il terzo vorrei fosse sovrapposto in alto a sinistra a tutti, questo dovrà contenere un'immagine con un logo. Perciò vorrei rimanesse sempre in primo piano, ma ancorato in altro a sx.
    No, alt ... chiariamo bene. Vuoi che questo terzo pannello possa coprire parte (o tutto ... non so) degli altri due pannelli???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Si esatto, perchè ho la necessità di avere sempre un logo sovrapposto al resto del Frame.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Oddio... poi, non so se c'è un altro metodo veloce per avere un'immagine sempre in primo piano.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da GoldEmish
    Si esatto, perchè ho la necessità di avere sempre un logo sovrapposto al resto del Frame.
    Puoi usare JLayeredPane (non è un layout manager!! è un componente che fa da contenitore).
    E nota che il root pane di un JFrame ha già un JLayeredPane, quindi si può sfruttare quello.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Mi faresti un esempio pratico con un file jpeg da caricare in alto a sx?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da GoldEmish
    Mi faresti un esempio pratico con un file jpeg da caricare in alto a sx?
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        public TestFrame() {
            super("Test");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300, 200);
    
            Container contentPane = getContentPane();
    
            contentPane.add(new JButton("Uno"), BorderLayout.CENTER);
            contentPane.add(new JButton("Due"), BorderLayout.SOUTH);
    
            JButton b3 = new JButton("Tre");
            b3.setBounds(10, 100, 100, 60);
    
            JLayeredPane layeredPane = getLayeredPane();
            layeredPane.add(b3, JLayeredPane.PALETTE_LAYER);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run () {
                    TestFrame f = new TestFrame();
                    f.setVisible(true);
                }
            });
        }
    }
    Non ho messo una immagine .... il pulsante "Tre" sta sopra gli altri due perché il PALETTE_LAYER è uno strato più "alto" rispetto al resto.

    JLayeredPane per default non ha un layout manager, quindi i componenti vanno posizionati/dimensionati esplicitamente (setBounds() che ho usato).

    Se vuoi mettere una immagine, basterebbe una semplice JLabel che visualizza un ImageIcon (vedi javadoc di ImageIcon e JLabel).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Grazie mille, molto gentile!

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Il tuo esempio mi funziona... il mio no :-)
    Riporto il codice:
    codice:
    Container mainContainer = getContentPane();
    mainContainer.setLayout(new BorderLayout());
                  
    label =new Label("Prova di testo");
    
    drawingPanel = new ArrowPanel(config);    
    drawingPanel.setVisible(true);
    drawingPanel.setLayout(new BorderLayout());
    drawingPanel.setPreferredSize(new java.awt.Dimension(700, 700));
                   
    mainContainer.add(drawingPanel,BorderLayout.CENTER);   
    mainContainer.add(label,BorderLayout.SOUTH);
                   
    JButton b3 = new JButton("Tre");
    b3.setBounds(10, 100, 100, 60);
    
    JLayeredPane layeredPane = getLayeredPane();
    layeredPane.add(b3, JLayeredPane.PALETTE_LAYER);
    l'oggetto ArrowPanel estende Panel e carica all'interno un Canvans3D. Il mio problema è che attualmente il pulsante "tre" rimane sotto a tutto, non sopra come nel tuo esempio. Eppure mi sembra di averlo seguito passo passo. Ho provato anche a cambiare con JLayeredPane.POPUP_LAYER ma non è cambiato nulla, sta sotto sia al ArrowPanel sia al Label...
    hai qualche idea?

    Grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Ho provato anche a mettere il logo sul GlassPane, ma non va neanche lì, sta sempre sotto a tutto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.