Newsgroup: it.comp.java
Titolo: disegno in un jFrame, ma non in un jPanel

Questa è la situazione Ho un jFrame ( chiamiamolo Frame0 ) al cui interno
c'è un jPanel ( chiamiamolo jPanel1). Voglio disegnare un cerchio e un testo
in un cewrto punto del jPanel1.
Riesco a fare tutto correttamente se creo un nuovo frame in quella posizione
e chiamo una classe in cui c'è l'overload del metodo paintComponent, se però
invece che creando il nuovo frame voglio far disegnare il tutto in jPanel1
contenuto nel jFrame0, non riesco a visualizzare nulla.
Potete aiutarmi?
-- 
Ciao Runner73

Runner73 wrote:

Ah, vedo adesso che ci hai pensato da solo.
Chiedo venia :)
Se ridimensioni il frame disegna? Se si ti manca validate()
Marco
public class Prova extends JFrame {
   public Prova() {
     setBounds(100, 100, 200, 200);
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);	
     setVisible(true);	// il componente(JFrame) viene realizzato qui, le
			// successive modifiche vanno notificate tramite
                         // validate()!
     getContentPane().add(new DrawPanel());
     validate(); //senza questo non disegna(a meno che non ridimensioni il frame)
   }
   class DrawPanel extends JPanel {
     public void paintComponent(Graphics g) {
       g.drawOval(0, 0, 50, 50);
     }
   }
   public static void main(String args[])  {
     new Prova();
   }
}

> Se ridimensioni il frame disegna? Se si ti manca validate()
No, non funziona nemmeno con validate. Il problema č che io devo disegnare
nel jpanel e non nel jframe.
Prov ad allegare un semplicissimo esempio per vedere se riesci ad aiutarmi.
Penso che non sia lungo e quindi lo allego, non riesco ad essere piů
esemplificativo.
COme faccio a far disegnarele forme invece che sul jframe, nel jpanel?
Grazie per l'aiuto che vorrai darmi
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class DrawRectPanel extends JPanel{
  public void paintComponent(Graphics g)
  { super.paintComponent(g);
    g.setColor(Color.blue);
    g.drawRect(10,10,80,30);
    g.drawRoundRect(100,10,80,30,15,15);
    g.drawOval(10,100,80,30);
  }
}
class DrawRectFrame extends JFrame{
  public DrawRectFrame(){
    JPanel jPanel1 = new JPanel();
    jPanel1.setBackground(SystemColor.controlLtHighlight);
    jPanel1.setSize(50,50);
    setTitle("DrawRect");
    setSize(300,200);
    addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }
    });
    Container contentPane = getContentPane();
    contentPane.add(jPanel1);
    contentPane.add(new DrawRectPanel());
  }
}
public class Untitled1 {
  public static void main(String[] args) {
      JFrame frame = new DrawRectFrame();
    frame.show();
  }
}

 Grazie per l'aiuto che vorrai darmi
Non ho capito bene cosa intendi, tu stai gia disegnado in un 
JPanel(DrawRectPanel). Vorresti che il secondo Panel(jPanel1) fosse trasparente 
cosi da poter vedere quello che c'è disegnato sotto?
Marco
P.S. Non è necessario definire un listener per far chiudere l'applicazione.
   addWindowListener(new WindowAdapter(){
     public void windowClosing(WindowEvent e){
       System.exit(0);
     }
   });
puo essere sostituito da
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Risparmi ben 4 righe ;)

 Risparmi ben 4 righe ;)
Interessante, io avevo trovato quel metodo sul mio libro di java "Java 2 i
fondamenti - Mc Graw Hill". Tu hai imparato queste scorciatoie con
l'esperienza o puoi consigliarmi un libro migliore e magari piů aggiornato?

 
Per Swing il tutorial e l'API mi sono sempre bastati(eventualmente Swing 
Connection ha alcuni ottimi articoli, specialmente su come funziona il package 
Text).
http://java.sun.com/products/jfc/tsc/articles/

 > l'esperienza o puoi consigliarmi un libro migliore e magari più


 
Hmmm..
le figure blu sullo sfondo grigio le stai GIA disegnado in un JPanel(cioè quello 
che tu vorresti fare lo stai gia facendo), non nel Frame.
Facendo
   contentPane.add(new DrawRectPanel());
hai poi aggunto il JPanel DrawRectPanel nel ContentPane del frame.
Non so se mi spiego.
Marco

 che tu vorresti fare lo stai gia facendo), non nel Frame.
Si questo l'ho capito, ma io invece che disegnarle sul contentpanel del
jframe, le voglio disegnare in un altro pannello ( il jpanel1) appunto


Non mi sembra, tu NON stai disegnando nel contentPane del Frame...
Tu crei un panel, lo aggiungi al content pane e disegni in quel pannello(non nel 
contentPane).
Se vuoi disegnare in un altro pannello crei un altra classe che estende JPanel, 
riscrivi paintComponent, gli fai disegnare quello che vuoi, e lo aggiungi al 
content pane del frame. Se vuoi disegnare in un altra finestra crei un nuovo 
frame(o un internalFrame) e aggiungi al contentPane del nuovo frame il tuo pannello.
Non so se sono io che non ti capisco o viceversa.
Marco


Beh mi sono scaricato il tutorial, ( sai se ne esiste una versione
stampabile ? ). Farň un pň di prove, se non ci riesco riposterň un nuovo
messaggio sul newsgroup cercando di essere piů esemplificativo
Ciao e grazie