Como faço para que o bt (JButton) também tenha seu corpo desenhado?
Isso é possivel de forma simples?
vejam o codigo:
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();
d.setLayout(null);
JButton bt = new JButton("b");
d.add(bt);
bt.setBounds(10, 10, 40, 40) ;
f.setContentPane( d ) ;
f.setVisible(true);
}
});
}
}
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);
}
});
}
}
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);
}
});
}
}