Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    se metto un label non vedo il resto

    ciao a tutti! ho questo script:
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    class MyCanvas extends JComponent 
    {
    	public void paint(Graphics g) 
    	{
    		g.setColor(Color.GREEN);
        	        g.fillRect (10, 10, 200, 200);
    	}
    }
    
    public class EsSwing4 
    {
    	public static void main(String[] a) 
    	{
    		JFrame window = new JFrame("Esempio");
    		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		window.setBounds(30, 30, 500, 300);
    		window.getContentPane().add(new MyCanvas());
    
    		JLabel label = new JLabel("Testo della label");
    		window.getContentPane().add(label);
    
    		window.setVisible(true);
    	}
    }
    le penultime due righe di codice inseriscono una label, solo che se eseguo il programma leggo SOLO la label mentre la prima classe che richiamo nel main dovrebbe stampare un quadrato verde che non vedo...o meglio, vedo se rimuovo la label... perchè? non posso veder tutto?

  2. #2

    Re: se metto un label non vedo il resto

    Originariamente inviato da iacoposk8
    le penultime due righe di codice inseriscono una label, solo che se eseguo il programma leggo SOLO la label mentre la prima classe che richiamo nel main dovrebbe stampare un quadrato verde che non vedo...o meglio, vedo se rimuovo la label... perchè? non posso veder tutto?
    Prima di aggiungere la label ed il componente, scrivi questa riga di codice:
    codice:
    window.setLayout( new GridLayout(0, 1) );
    In poche parole definisce un LayoutManager di tipo GridLayout al tuo JFrame.
    Non puoi disporre elementi su un frame/panel senza aver assegnato ad esso un LayoutManager, ovvero un oggetto che gestisce il posizionamento, secondo come è definito, degli elementi.
    Ci sono vari LayoutManagers in java...la differenza sta proprio nella "strategia" di posizionamento degli elementi all'interno di un componente.

    Ti consiglio di leggere qui:
    LayoutManagers di Java

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: se metto un label non vedo il resto

    Originariamente inviato da iacoposk8
    ciao a tutti! ho questo script:
    Per essere pignoli: non è uno script.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Re: Re: se metto un label non vedo il resto

    Originariamente inviato da VincenzoTheBest
    Non puoi disporre elementi su un frame/panel senza aver assegnato ad esso un LayoutManager, ovvero un oggetto che gestisce il posizionamento, secondo come è definito, degli elementi.
    A voler essere precisi, è consigliato fare uso di un LayoutManager, ma non è strettamente necessario.
    Ciascun Container definisce, solitamente, un LayoutManager di default, quindi se non si assegna un LayoutManager esplicitamente, automaticamente viene preso quello di default.

    E' altresì possibile togliere di mezzo il LayoutManager e provvedere al posizionamento/dimensionamento manuale dei componenti: si deve però usare setBounds() o la coppia setLocation() e setSize() per definire posizione e dimensione dei componenti prima di aggiungerli al Container e si deve provvedere sempre manualmente ad intercettare gli eventi di ridimensionamento del Container per l'adattamento (cosa che un LayoutManager fa da solo).

    Esempio:
    codice:
    // In automatico un JPanel possiede un FlowLayout
    JPanel jp = new JPanel();
    
    // Tolgo il LayoutManager
    jp.setLayout( null );
    
    // Costruisco una JTextField
    JTextField txt = new JTextField();
    
    // Setto posizione e dimensioni della JTextField
    // Posizione dell'angolo in alto a sinistra: (x=25, y=30)
    // Dimensioni: (width=130, height=20)
    txt.setBounds(25, 30, 130, 20);
    
    // Aggiungo la JTextField al pannello
    jp.add( txt );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    Re: Re: se metto un label non vedo il resto

    Originariamente inviato da VincenzoTheBest
    Prima di aggiungere la label ed il componente, scrivi questa riga di codice:
    codice:
    window.setLayout( new GridLayout(0, 1) );
    Funziona che è un piacere
    Originariamente inviato da VincenzoTheBest Ti consiglio di leggere qui:
    LayoutManagers di Java
    Lo leggerò sicuramente che sembra una cosa strafondamentale questa del layout.
    Originariamente inviato da LeleFT
    A voler essere precisi, è consigliato fare uso di un LayoutManager, ma non è strettamente necessario.
    E allora usiamolo! eheheheh comunque il codice l'hai scritto l'ho letto che siccome sto imparando per completezza tutto quello che non so mi conviene imparare

    una cosa volevo sapere, in sostanza aggiungendo quella riga che è successo? perchè prima non lo ptevo vedere?

  6. #6

    Re: Re: Re: se metto un label non vedo il resto

    Originariamente inviato da iacoposk8
    una cosa volevo sapere, in sostanza aggiungendo quella riga che è successo? perchè prima non lo ptevo vedere?
    Associa all'istanza window di JFrame un GridLayout, dove il primo argomento del costruttore indica il numero di righe, il secondo il numero di colonne.
    Per come è stato impostato il layout, window può contenere un qualsiasi numero di righe e solo 1 colonna, quindi se provi ad aggiungere altre componenti (ad oltranza) potrai vedere che queste verranno disposte una sotto l'altra su un'unica colonna.

    L'uso del GridLayout è solo un esempio. Puoi usare il LayoutManager che per te va bene in un determinato contesto, oppure come ti diceva Lele potresti anche usare il posizionamento manuale.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    però non capisco perchè con il metodo che ho scritto all'inizio mi cancellava tutto il resto

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.