Copyright Derek O'Reilly, Dundalk Institute of Technology (DkIT), Dundalk, Co. Louth, Ireland.
JLayeredPanes can be used to layer multiple components on top of each other.
To use a LayeredPane, ensure that the applet's View extends JLayeredPane.
LayeredPanes do not normally have a layout manager. Instead the position and size of each component must be given before it will be displayed on the InternalFrames surface.
setLocation() setSize()
LayeredPaneDemo Example (Run Applet)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class LayeredPaneDemo extends JApplet
{
@Override
public void init()
{
this.setContentPane(new View());
}
// note that View extends from JLayeredPane
public class View extends JLayeredPane implements MouseListener
{
private JComponent source;
private int offsetX;
private int offsetY;
public View()
{
super();
final JPanel redPanel = new JPanel();
final JPanel greenPanel = new JPanel();
final JPanel bluePanel = new JPanel();
redPanel.setBackground(Color.red);
greenPanel.setBackground(Color.green);
bluePanel.setBackground(Color.blue);
// add some components to the layeredPane
this.add(redPanel);
this.add(greenPanel);
this.add(bluePanel);
// a location and size must be set for each component that is
// being added to a LayeredPane. Components will not be visible
// until these two parameters are set
redPanel.setLocation(0, 0);
redPanel.setSize(100, 100);
greenPanel.setLocation(50, 50);
greenPanel.setSize(100, 100);
bluePanel.setLocation(100, 100);
bluePanel.setSize(100, 100);
// add mouse listeners
redPanel.addMouseListener(this);
greenPanel.addMouseListener(this);
bluePanel.addMouseListener(this);
}
@Override
public void mousePressed(MouseEvent e)
{
this.source = (JComponent) e.getSource();
this.offsetX = e.getX() - this.source.getX();
this.offsetY = e.getY() - this.source.getY();
if (e.getButton() == MouseEvent.BUTTON3) // right mouse button
{
moveToFront(this.source);
}
}
@Override
public void mouseReleased(MouseEvent e)
{
this.source.setLocation(e.getX() - this.offsetX, e.getY() - this.offsetY);
}
@Override
public void mouseClicked(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e)
{
}
}
}
When interactive components, such as Buttons and TextFields, receive the mouse focus, they automatically display as the top-most layer. Therefore, LayerPanes should not be used to hold interactive components.
LayeredPane_VariousComponents_Demo Example (Run Applet)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class LayeredPane_VariousComponents_Demo extends JApplet
{
@Override
public void init()
{
this.setContentPane(new View());
}
// note that View extends from JLayeredPane
public class View extends JLayeredPane implements MouseListener
{
private JComponent source;
private int offsetX;
private int offsetY;
public View()
{
super();
final JPanel panel = new JPanel();
final JButton button = new JButton("Button");
final JTextField textField = new JTextField("Textfield", 15);
final JLabel label = new JLabel("Label");
panel.add(new JLabel("Panel"));
panel.setBackground(Color.red);
// add some components to the layeredPane
add(panel);
add(button);
add(textField);
add(label);
// a location and size must be set for each component that is
// being added to a LayeredPane. Components will not be visible
// until these two parameters are set
panel.setLocation(0, 0);
panel.setSize(100, 100);
button.setLocation(150, 0);
button.setSize((int) (button.getPreferredSize().getWidth()),
(int) (button.getPreferredSize().getHeight()));
textField.setLocation(100, 100);
textField.setSize(100, (int) (textField.getPreferredSize().getHeight()));
label.setLocation(150, 150);
label.setSize((int) (label.getPreferredSize().getWidth()),
(int) (label.getPreferredSize().getHeight()));
// add mouse listeners
panel.addMouseListener(this);
button.addMouseListener(this);
textField.addMouseListener(this);
label.addMouseListener(this);
}
@Override
public void mousePressed(MouseEvent e)
{
this.source = (JComponent) e.getSource();
this.offsetX = e.getX() - this.source.getX();
this.offsetY = e.getY() - this.source.getY();
if (e.getButton() == MouseEvent.BUTTON3) // right mouse button
{
moveToFront(this.source);
}
}
@Override
public void mouseReleased(MouseEvent e)
{
this.source.setLocation(e.getX() - this.offsetX, e.getY() - this.offsetY);
}
@Override
public void mouseClicked(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e)
{
}
}
}
Copyright Derek O' Reilly, Dundalk Institute of Technology (DkIT), Dundalk, Co. Louth, Ireland.