I'm having A JLayeredPane where I add 3 JPanels.
I make the JPanels transparent (no background is set and setOpaque(false)). I draw lines on the JPanels and only the line on the last JPanel which has been added is visible. The lines of the other JPanels are not visible through that top JPanel (even if I have added different zIndexes when adding them).
Anybody who knows a solution for this? Why aren't they transparent?
I have created a little test program (3 classes). (TestJPanel and TestJPanel1 draw a line but on a different position but I only see the line of the last added JPanel. I don't see 2 lines, because it isn't transparent :( )
Main.Java
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
public class Main extends JFrame {
public Main() {
setSize(400, 350);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JLayeredPane lp = getLayeredPane();
lp.setLayout(new BorderLayout());
TestJPanel top = new TestJPanel();
top.setOpaque(false);
TestJPanel middle = new TestJPanel();
middle.setOpaque(false);
TestJPanel1 bottom = new TestJPanel1();
bottom.setOpaque(false);
lp.add(middle, BorderLayout.CENTER, new Integer(4));
lp.add(top, BorderLayout.CENTER, new Integer(3));
lp.add(bottom, BorderLayout.CENTER, new Integer(2));
// the last one I have added (bottom) is visible and can't see the others through it
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
TestJPanel.java
import java.awt.Graphics;
public class TestJPanel extends javax.swing.JPanel {
/** Creates new form TestJPanel */
public TestJPanel() {
initComponents();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(25, 0, 25, 50);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.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)
);
}// </editor-fold>
// Variables declaration - do not modify
// End of variables declaration
}
TestJPanel1.java
import java.awt.Graphics;
public class TestJPanel1 extends javax.swing.JPanel {
/** Creates new form TestJPanel */
public TestJPanel1() {
initComponents();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(50, 0, 50, 50);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.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)
);
}// </editor-fold>
// Variables declaration - do not modify
// End of variables declaration
}
I really hope somebody could help me out a.s.a.p. with this problem.