Uso Di JPanel

di BobB il
1 risposte

Salve, devo inserire in una finestra dei pulsanti, sto provando con JPanel, non riesco a definire una grandezza e posizione sia per Jpanel sia per i bottoni all'interno di JPanel, il codice che ho scritto è questo :

package com.mycompany.provelibere;
import javax.swing.*;
import java.awt.*;
import java.awt.Dimension;
/**
*
* @author dacer
*/
public class Provelibere {
   public static void main(String[] args) {
       JFrame frame = new JFrame("Esempio JPanel");
       frame.setSize(600, 400);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       // Creazione del JPanel
       JPanel pannello = new JPanel();
       pannello.setBackground(Color.LIGHT_GRAY);
       pannello.setPreferredSize(new Dimension(200, 150));
       // Aggiunta di componenti al pannello
       JButton bottone = new JButton("Clicca");
       bottone.setBounds(200, 100, 200, 50);
       pannello.add(bottone);
       // Aggiunta del pannello al JFrame
       frame.add(pannello);
       frame.setVisible(true);
   }
}
Potete consigliarmi come sviluppare il tutto, Grazie

1 Risposte

  • Le interfacce grafiche in Java richiedono la conoscenza del meccanismo di funzionamento delle GUI. Ci sono concetti che non possono essere tralasciati. Swing, in particolare, ha diversi aspetti che bisogna conoscere bene (EDT = Event Dispatching Thread in primis).

    Per quanto riguarda la gestione del posizionamento e del dimensionamento dei componenti all'interno dei contenitori entra in gioco uno dei componenti più importanti (introdotto fin dagli albori di AWT): il LayoutManager.

    Consiglio di documentarsi partendo magari da qui: https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html

    Il LayoutManager è il componente preposto a gestire posizionamento e dimensionamento dei componenti. LayoutManager diversi posizionano e modellano i componenti in modo diverso.

    Si può anche dire ad un contenitore di non utilizzare nessun LayoutManager: in questo caso ci si deve occupare in prima persona del posizionamento e del dimensionamento dei componenti al suo interno, tenendo conto del possibile ridimensionamento della finestra da parte dell'utente.

    Perchè il pulsante che hai aggiunto al JPanel non rispetta le dimensioni che tu gli hai dato con setBounds()? Perchè JPanel utilizza, di default, un LM (abbrevio LayoutManager): il FlowLayout. E' lui a decidere dove mettere il tuo pulsante e che dimensione deve avere.

    Se vuoi dire al tuo pannello di posizionare e dimensionare il pulsante come vuoi tu, allora devi "rimuovere" il suo LM:

    pannello.setLayout( null );

    Attenzione: anche il JFrame a cui hai aggiunto il pannello ha un suo LM: di default viene usato il BorderLayout (e, di conseguenza, l'aggiunta dei componenti non andrebbe fatta in quel modo).

    Qui un esempio di costruzione di una finestra (molto minimale):

    // Istanziazione della finestra
    JFrame frame = new JFrame();
    frame.setTitle("Titolo");
    frame.setSize(LARGHEZZA, ALTEZZA);
    frame.setLocationRelativeTo( null );   // Posiziona al centro dello schermo
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );   // DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, ...
    
    // Istanziare i componenti
    JPanel pannello = new JPanel();
    pannello.setLayout( null );   // Non voglio il LM nel pannello
    
    JButton button = new JButton("Pulsante");
    button.addActionListener(e -> { ... } );
    button.setBounds( ... );
    
    // Aggiungo i componenti ai loro contenitori
    pannello.add( button );
    
    Container c = frame.getContentPane();   // Ottengo il contenitore corretto della finestra
    c.add(pannello, BorderLayout.NORTH);   // Aggiungo il pannello IN ALTO (nel NORD)
    
    // Solo alla fine
    frame.setVisible( true );

    Studia bene l'ambiente Swing perchè ci sono moltissimi aspetti di cui tenere conto.

Devi accedere o registrarti per scrivere nel forum
1 risposte