Newsgroup: it.comp.java
Titolo: Problemi con Swing

Salve a tutti!
Sto cercando di capire un po' la grafica in Java con le Swing.
Ho fatto un esempio cretino:
============INIZIO ESEMPIO=====================================
import java.awt.Color;
import java.io.IOException;
import javax.swing.*;
public class ProvaFrame extends JFrame {
	public static void main(String[] args) throws IOException {
		new ProvaFrame();
 
	}
	public ProvaFrame() throws IOException {
		this.setSize(500,500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("Hello World!");
		JPanel panel = new JPanel();
		this.setVisible(true);
		JButton button1 = new JButton("Click me!");
 
 
 
		String testo="Questa è una prova\nqui sono andato a capo\nterza
Linea\nQuarta linea\nQuinta linea\n.";
		JTextArea textarea=new JTextArea(testo,20,50);
		textarea.setSelectionColor(Color.BLUE);
		textarea.select(1,50);
		textarea.setSelectionColor(Color.BLUE);
		textarea.setForeground(Color.RED);
		textarea.setEditable(false);
		textarea.setAutoscrolls(true);
		textarea.setVisible(true);
		panel.add(textarea);
 
 
 
 
		this.getContentPane().add(panel);
 
 
 
	}
 
}
==============FINE ESEMPIO==========================
Pero' quando lo lancio (uso Eclipse) viene una finestra vuota,
e solo dopo che la ridimensiono viene visualizzato quello che c'e' dentro
(tra l'altro tagliato a sinistra, devo allargare la finestra per avere le
scritte
non tagliate).
Perche' fa cosi'??
Come posso rimediare??
Grazie a quelli che mi vorranno aiutare!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Salve,
Allora all'interno della classe JPanel vi è la definizione del metodo 
paintComponent(Graphics G) dove graphics è la classe che rappresente il 
contesto grafico del frame (vedi documentazione).
Il metodo serve per disegnare le componenti che fanno parte dell'oggetto 
component (credo) da cui eredita JPanel.
JPanel o un'altra classe che estende da esso chiama il metodo 
paintComponent(Graphics g) nel momento in cui viene designato o viene 
richiesto un aggiornamento del contesto grafico.
In poche parole paintComponent viene richiamato automaticamente nel 
momento in cui (esempio x ridimensionamento) serve modificare le 
caratteristiche del pannello (non so come spiegarlo).
Tutto il problema nasce (tuo codice) nel momento in cui tu richiami il 
metodo setVisible(true) del frame.
Infatti a quel punto viene richiesto al jframe di ridisegnare il tutto, 
ma sul frame e sul contentPane del frame non c'è assolutamente nulla.
Se sposti la chiamata setVisible(true) del frame dopo l'aggiunta del 
pannello al contentPane vedrai apparire tutto, semplicemente perkè la 
chiamata a tale metodo chiede automaticamente di avviare 
paintComponent(g) di tutti gli oggetti Component di quel frame (JPanel 
inclusi) e quindi il tuo pannello verrà visualizzato.
Spero di essere stato chiaro.
Christian
Gino ha scritto:


 Grazie a quelli che mi vorranno aiutare!
di nula! abbiamo tutti imparato sbagliandoe  chiedendo aiuto
Marco


Ti ringrazio tantissimo per i tuoi consigli.
Per favore, potresti spiegarmi cosa sono i "layout manager" (scusa
l'ignoranza)????
Grazie ancora!


 Grazie ancora!
I layout manager sono, come dice il nome, degli oggetti che gestiscono
per te il layout di una finestra. Con questi oggetti hai la
possibilità di ottenere finestre che sono portabilit su schermi di di
qualsiasi dimensione, senza che tu ti preoccupi delle operazioni di
rescale delle componenti ogni volta che modififchi la dimensioni di
una finestra.
Ovviamente il comportamento di questi avviene in base anche alle
dimensioni dei componenti inseriti nella finestra.
Nelle API li trovi facilmente perchè il nome della classe in genere
termina con "Layout" ad esempio BoxLayout, GridLayout, Flow Layout, e
chi più ne ha più ne metta
Dai una occhiata alle api di Sun e cerca in giro con google, trovi
molte guide più esaurienti di me.
Ciao Marco


Grazie oo (<= INFINITE)
