Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    15

    [Grafica] JPanel su JPanel

    Salve a tutti, praticamente ho la necessità di sovrapporre 2 JPanel.
    Spiegando meglio, ho creato un JPanel che contiene una matrice di JLabel, e un'altro JPanel che contiene una matrice di JButton.
    A me servirebbe un modo per far si che il pannello di JLabel stia sotto e quello dei JButton stia sopra, in modo che quando premo un JButton, lo metto setVisible(false), così mi fa vedere la JLabel sottostante.
    Aiutino?

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

    Re: [Grafica] JPanel su JPanel

    Originariamente inviato da ryaas
    Salve a tutti, praticamente ho la necessità di sovrapporre 2 JPanel.
    Spiegando meglio, ho creato un JPanel che contiene una matrice di JLabel, e un'altro JPanel che contiene una matrice di JButton.
    A me servirebbe un modo per far si che il pannello di JLabel stia sotto e quello dei JButton stia sopra, in modo che quando premo un JButton, lo metto setVisible(false), così mi fa vedere la JLabel sottostante.
    Matrice gestita come? Con GridLayout? GridBagLayout? Un altro layout manager?

    Quindi il JButton e il rispettivo JLabel sono per così dire in "relazione" (sia logica che "fisica")? Una volta che hai premuto il JButton sparisce definitivamente e resta solo il JLabel??
    Allora fai una griglia di oggetti TuoPannello (che estende JPanel) che contiene JButton/JLabel e mostri semplicemente uno o l'altro togliendo uno e aggiungendo l'altro nel tuo-pannello.
    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
    Apr 2009
    Messaggi
    15
    è gestito da GridLayout, quindi non posso metterci le coordinate del pulsante premuto e metterci al posto di questo la JLabel...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ryaas
    è gestito da GridLayout, quindi non posso metterci le coordinate del pulsante premuto e metterci al posto di questo la JLabel...
    Non ho capito .... cosa non hai capito.
    Io intendo: in ogni cella del tuo GridLayout ci metti un TuoPannello, che "incapsula" JButton+JLabel e la relativa gestione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    15
    Ok, questo l'ho capito, in ogni cella del GridLayout metto un pannello, ma in questo pannello, che layout metto? E mettendo un JButton e una JLabel, mi si sovrappongono?

    Perchè ora io ho fatto un pannello con la matrice di pulsanti e un pannello con la matrice di etichette.
    Poi faccio:
    add(jpL) //pannello JLabels
    add(jpB) //pannello JButtons

    quindi prima metto il pannello delle labels sotto, e poi quello dei pulsanti sopra.
    Però quando clicco su un pulsante, col relativo gestore, il pulsante scompare (ed è giusto) ma non mi vede sotto la JLabel.

    Se faccio come dici te non è che il problema rimane?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ryaas
    Ok, questo l'ho capito, in ogni cella del GridLayout metto un pannello, ma in questo pannello, che layout metto? E mettendo un JButton e una JLabel, mi si sovrappongono?
    BorderLayout o CardLayout.

    Se usi BorderLayout sei tu che a seguito della pressione sul pulsante devi proprio rimuovere il pulsante, aggiungere la label e quindi fare un validate() (per validare il layout visto che è cambiato).

    Se usi CardLayout è un po' più semplice perché inserisci sia JButton che JLabel subito nel CardLayout e poi fai uno switch da uno all'altro con show() di CardLayout.
    E c'è un altro vantaggio (che non so se ti serve). Se vuoi che la griglia sia dimensionata in modo tale che tutte le celle siano della dimensione (uguale per tutte ovviamente .... è un GridLayout, no?) massima tale per cui ci stia "bene" come dimensione sia il contenuto del JButton sia del JLabel .... con CardLayout e con un pack su frame lo fai.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    15
    mm... grazie, xò col cardlayout mi crea le schede, cioè l'utente può scegliere se visualizzare una scheda o l'altra.
    Hai presente il campo minato? Giochino di windows? Devo fare una cosa simile, cioè premi un pulsante e visualizza il numero o la mina. Per questo faccio label sotto e pulsante sopra, xò ce ne sono un centinaio di celle, non poche, quindi il border layout e il cardlayout non vanno mlt bene...

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ryaas
    mm... grazie, xò col cardlayout mi crea le schede, cioè l'utente può scegliere se visualizzare una scheda o l'altra.
    No. Quello è JTabbedPane (le pagine con le "linguette").
    Un CardLayout è completamente sotto il controllo del programmatore. L'utente non cambia nulla per conto suo! È solamente il codice che può mostrare uno degli N componenti. E basta.

    Originariamente inviato da ryaas
    Hai presente il campo minato? Giochino di windows? Devo fare una cosa simile, cioè premi un pulsante e visualizza il numero o la mina.
    Allora c'è ancora una ulteriore soluzione. Il "custom painting" completo. Ovvero "disegni" tu quello che serve, dove e come serve.
    E la cosa si può diramare in 2 sotto-soluzioni:
    a) Un pannello unico in cui "disegni" e gestisci l'intera area di gioco.
    b) Un pannello in cui disegni e gestisci una singola cella e raggruppi più celle appunto in un GridLayout.

    In questi due casi comunque non hai JButton/JLabel ... puoi disegnare e gestire tu i click come vuoi.

    Originariamente inviato da ryaas
    Per questo faccio label sotto e pulsante sopra, xò ce ne sono un centinaio di celle, non poche, quindi il border layout e il cardlayout non vanno mlt bene...
    Perché non andrebbero bene???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    15
    allora, siccome devo farlo con JButton e JPanel, uso il metodo del cardlayout.
    Vedi se sbaglio qualcosa pls?
    codice:
    //Gestione pannelli
    jpAll= new JPanel();         
    jpB= new JPanel();         
    jpL= new JPanel();          
    
    //Layout pannello JButton         
    jpB.setLayout(new GridLayout(10,10));          
    
    //Contenuto pannello JButton         
    for(int i= 0; i< griglia.length; i++)             
        for(int j= 0; j< griglia[0].length; j++)                 
            jpB.add(griglia[i][j]);          
    
    //Layout pannello JLabel         
    jpL.setLayout(new GridLayout(10,10));          
    
    //Contenuto pannello JLabel         
    for(int i= 0; i< rete.length; i++)             
        for(int j= 0; j< rete[0].length; j++)                 
            jpL.add(rete[i][j]);          
    
    //Aggiungi pannelli   
    jpAll.setLayout(new CardLayout());      
    jpAll.add(jpL);         
    jpAll.add(jpB);

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ryaas
    allora, siccome devo farlo con JButton e JPanel, uso il metodo del cardlayout.
    Vedi se sbaglio qualcosa pls?
    Ma con il codice che hai postato hai un CardLayout che contiene 2 pannelli, quello con tutti i pulsanti e quello con tutte le label.
    CardLayout visualizzerebbe o l'uno o l'altro pannello, quindi o solo le label o solo i pulsanti ..... e non è questo che vuoi!! Quindi quello che hai scritto non ti serve a nulla.

    Vuoi un aiutino???

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        public TestFrame() {
            super("Test");
    
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
            Container contentPane = getContentPane();
            contentPane.setLayout(new GridLayout(10, 10));
    
            int n = 1;
    
            for (int y = 0; y < 10; y++) {
                for (int x = 0; x < 10; x++) {
                    contentPane.add(new CellPanel(""+n));
                    n++;
                }
            }
    
            pack();
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new TestFrame().setVisible(true);
                }
            });
        }
    }
    
    
    class CellPanel extends JPanel {
        private CardLayout cardLayout;
        private JButton button;
        private JLabel label;
    
        public CellPanel(String labelText) {
            button = new JButton((String) null);
            button.setMargin(new Insets(0, 0, 0, 0));
            button.setFocusPainted(false);
    
            label = new JLabel(labelText);
            label.setHorizontalAlignment(JLabel.CENTER);
    
            cardLayout = new CardLayout();
            setLayout(cardLayout);
            add(button, "B");
            add(label, "L");
    
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    cardLayout.show(CellPanel.this, "L");
                }
            });
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.