Luiz_Augusto_Prado 15 de jun. de 2013
Parece que encontrei a solução: setGlassPane
http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html
import java.awt.Color ;
import java.awt.Graphics ;
import javax.swing.JButton ;
import javax.swing.JPanel ;
public class DrawMain extends javax . swing . JFrame
{
public static class DrawPanel extends JPanel
{
@Override
protected void paintComponent ( Graphics g )
{
super . paintComponent ( g );
g . setColor ( Color . orange );
g . drawLine ( 0 , 0 , 80 , 80 );
}
}
public DrawMain ()
{
initComponents ();
}
private void initComponents () {
setDefaultCloseOperation ( javax . swing . WindowConstants . EXIT_ON_CLOSE );
javax . swing . GroupLayout layout = new javax . swing . GroupLayout ( getContentPane ());
getContentPane (). setLayout ( layout );
layout . setHorizontalGroup (
layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
. addGap ( 0 , 400 , Short . MAX_VALUE )
);
layout . setVerticalGroup (
layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
. addGap ( 0 , 300 , Short . MAX_VALUE )
);
pack ();
}
public static void main ( String args [] )
{
java . awt . EventQueue . invokeLater ( new Runnable ()
{
public void run ()
{
DrawMain f = new DrawMain ();
DrawPanel d = new DrawPanel ();
JPanel p = new JPanel ();
p . setLayout ( null );
JButton bt = new JButton ( "b" );
p . add ( bt );
bt . setBounds ( 10 , 10 , 40 , 40 ) ;
f . setContentPane ( p ) ;
f . setGlassPane ( d ) ;
d . setLayout ( null );
d . setVisible ( true );
d . setOpaque ( false );
f . setVisible ( true );
}
});
}
}
Luiz_Augusto_Prado 15 de jun. de 2013
O primeiro codigo encontrado funciona apenas para JFrames. Absurdo isso, mas fazer o que… Lendo mais a respeito consegui fazer o mesmo mas com o JRoot (No lugar de JPanel):
import java.awt.Color ;
import java.awt.Graphics ;
import javax.swing.JButton ;
import javax.swing.JLayeredPane ;
import javax.swing.JPanel ;
import javax.swing.JRootPane ;
public class DrawMain extends javax . swing . JFrame
{
public static class DrawPanel extends JPanel
{
@Override
protected void paintComponent ( Graphics g )
{
super . paintComponent ( g );
g . setColor ( Color . orange );
g . drawLine ( 0 , 0 , 80 , 80 );
}
}
public DrawMain ()
{
initComponents ();
}
private void initComponents () {
setDefaultCloseOperation ( javax . swing . WindowConstants . EXIT_ON_CLOSE );
javax . swing . GroupLayout layout = new javax . swing . GroupLayout ( getContentPane ());
getContentPane (). setLayout ( layout );
layout . setHorizontalGroup (
layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
. addGap ( 0 , 400 , Short . MAX_VALUE )
);
layout . setVerticalGroup (
layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
. addGap ( 0 , 300 , Short . MAX_VALUE )
);
pack ();
}
public static void main ( String args [] )
{
java . awt . EventQueue . invokeLater ( new Runnable ()
{
public void run ()
{
DrawMain f = new DrawMain ();
JRootPane conteudo = new JRootPane ();
JLayeredPane l1 = new JLayeredPane ();
f . setContentPane ( conteudo );
JPanel p1 = new JPanel ();
DrawPanel p2 = new DrawPanel ();
p1 . setBounds ( 0 , 0 , 230 , 230 ) ;
p2 . setBounds ( 0 , 0 , 230 , 230 ) ;
conteudo . setGlassPane ( p2 );
l1 . add ( p1 );
conteudo . setLayeredPane ( l1 );
JButton bt = new JButton ( "b" );
bt . setBounds ( 30 , 30 , 40 , 40 ) ;
p1 . add ( bt );
p1 . setLayout ( null );
p1 . setVisible ( true );
p1 . setOpaque ( false );
p2 . setLayout ( null );
p2 . setVisible ( true );
p2 . setOpaque ( false );
f . setVisible ( true );
}
});
}
}