Newsgroup: it.comp.java
Titolo: Ho un problema abbastanza fastidioso che non riesco a risolvere.

Ciao a tutti....
Ho un problema abbastanza fastidioso che non riesco a risolvere, e mi pare
che sia lo stesso che ha "TelespallaBob" (vedi qualche post indietro....)
Ho una classe che estende i JPanel, che non riesco a rendere
"opaca",nonostante lo dichiari in fase di inizializzazione.
In realtá io aggiungo a run time (ad esempio tramite un click su un menú
menú) la classe al getContentPane() del Frame principale, e eseguo la
visualizzazione. Il risultato é che visualizzo i pannelli contenuti nella
classe che estende il JPanel solo se ridimensiono da Windows la finestra
dell'applicazione... Di
seguito c'é un esempio di questo comportamneto; se provate a lanciare il
programmino vedrete che si vedono dei pannelli colorati solo se lanciate
l'applicazione e poi ridimensionate la finestra. Inutile dire che non ho
trovato nulla del genere nelle varie faq.
C'é qualche anima osservatrice e buona che ha capito che succede dentro
st'affare?
Fabrizio
//-----Esempio
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/**
* Application1
* <P>
* @author Fabrizio Sibeni
*/
public class Application1 {
static frmMain frame;
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
new Application1();
}
/**
* Constructor
*/
public Application1() {
/**
* main
* @param args
*/
frame = new frmMain();
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width)/2,
(screenSize.height - frameSize.height)/2);
frame.addWindowListener(new WindowAdapter() { public void
windowClosing(WindowEvent e) { System.exit(0); } });
frame.setVisible(true);
frame.repaint();
}
}
/**
* A Swing-based top level window class.
* <P>
* @author
*/
class frmMain extends JFrame {
//JPanel panMain = new JPanel();
JMenuBar mnuBarMain = new JMenuBar();
JMenu mnuFile = new JMenu();
JMenuItem mnuFileExit = new JMenuItem();
JMenuItem mnuHelpAbout = new JMenuItem();
JMenuItem mnuFilePannelli = new JMenuItem();
JMenuItem mnuFileAquacolture = new JMenuItem();
JMenu mnuHelp = new JMenu();
JMenu mnuPanels = new JMenu();
JMenuItem mnuFileLogin = new JMenuItem();
/**
* Constructs a new instance.
*/
public frmMain() {
super();
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* Initializes the state of this instance.
*/
private void jbInit() throws Exception {
this.setSize(new Dimension(1024, 768));
this.setTitle("Form principale");
mnuFile.setText("File");
mnuFileExit.setText("Exit");
mnuFileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileExit_ActionPerformed(e);
}
});
mnuFile.setText("File");
mnuPanels.setText("Panels");
mnuFilePannelli.setText("Pannelli");
mnuFilePannelli.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileCapture_ActionPerformed(e);
}
});
mnuFile.add(mnuFileExit);
mnuBarMain.add(mnuFile);
mnuBarMain.add(mnuPanels);
mnuHelp.add(mnuHelpAbout);
mnuBarMain.add(mnuHelp);
this.setJMenuBar(mnuBarMain);
this.setDefaultCloseOperation(3);
mnuPanels.add(mnuFilePannelli);
mnuPanels.add(mnuFileAquacolture);
//this.setContentPane(panMain);
this.setResizable(true);
this.setBackground(new Color(212, 208, 220));
this.setEnabled(true);
//this.getContentPane().setLayout(null);
}
/**
* Performs the action defined for "File|Capture".
* @param e
*/
void fileCapture_ActionPerformed(ActionEvent e) {
pannelli Pan = new pannelli();
//this.getContentPane.setSize(panMain.getSize());
//panMain.setOpaque(false);
Pan.setOpaque(true);
Pan.setVisible(true);
Pan.repaint();
this.getContentPane().add(Pan);
this.getContentPane().repaint();
Pan.repaint();
}
/**
* Performs the action defined for "File|Exit".
* @param e
*/
void fileExit_ActionPerformed(ActionEvent e) {
System.exit(0);
}
/**
* A Swing-based panel class.
* <P>
* @author Fabrizio Sibeni
*/
public class pannelli extends JPanel {
JPanel panNorth = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
JPanel panCenter = new JPanel();
JPanel panSouth = new JPanel();
/**
* Constructs a new instance.
*/
public pannelli() {
super();
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* Initializes the state of this instance.
*/
private void jbInit() throws Exception {
this.setOpaque(true);
this.setLayout(borderLayout1);
borderLayout1.setVgap(15);
panCenter.setOpaque(true);
panCenter.setEnabled(true);
panCenter.setMaximumSize(new Dimension(500, 500));
panCenter.setBackground(new Color(191, 208, 200));
this.setPreferredSize(new Dimension(900, 750));
this.setMaximumSize(new Dimension(1024, 768));
this.setMinimumSize(new Dimension(500, 700));
panNorth.setPreferredSize(new Dimension(100, 100));
panNorth.setBackground(new Color(212, 191, 200));
panNorth.setMinimumSize(new Dimension(200, 200));
panSouth.setPreferredSize(new Dimension(10, 50));
panSouth.setMaximumSize(new Dimension(200, 200));
panSouth.setBackground(new Color(182, 255, 182));
panSouth.setMinimumSize(new Dimension(200, 200));
borderLayout1.setHgap(10);
this.add(panCenter, BorderLayout.CENTER);
this.add(panSouth, BorderLayout.SOUTH);
this.add(panNorth, BorderLayout.NORTH);
}
}
}

Ho trovato la soluzione su una remota mailing list!!!
Bisogna usare validate() sul pannello subito dopo avergli aggiunto qualcosa.
nel tuo caso:
private void jbInit() throws Exception {
...
...
  mnuFilePannelli.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  fileCapture_ActionPerformed(e);
  validate();  <--------------
   }
  });
ciao libeX

}
puoi usare pack o validate (elimina pure i vari repaint)
Pan.setOpaque(true);
Pan.setVisible(true);
this.getContentPane().add(Pan);
frmMain.this.validate();
//frmMain.this.pack();
comunque in altre situazioni (pannello dentro ad un pannello)
funziona anche il semplice repaint
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2e ]
_______________________________________
http://digilander.iol.it/schiele

trovato nulla del genere nelle varie faq.
[CUT]
Avete già risolto il problema, ma volevo dare il mio contributo...
http://java.sun.com/docs/books/tutorial/uiswing/overview/draw.html
HTH
-- 
Ciao
	Fabrizio C.