Introduction
This article explains listeners supported by Swing components. The NetBeans IDE is used to create "ComponentListener".
Common Listeners
The following listeners are common to all Swing components.
fires a key event when a key is pressed by the user.
changes the size, visibility or position of components.
occurs when the hierarchy of a component changes in size or movement.
shows an alert when the mouse cursor changes its position.
provides a focus to the components.
occurs when the hierarchy of components change.
generates an event when the mouse is moved, clicked, released or pressed.
shows an alert when the mouse wheel position changes.
Component Listener in Java
This listener works on components of Swing. A component is an object that has a graphical representation that's shown on the display. Components are like buttons, checkboxes, textfields, etcetera.
The following procedure is required to write a Component Listener as described below:
- First declare a class that implements its.
- Now define the component on which you want to fire this listener. For example: frame, panel, label, checkbox, and so on.
- Now add a component to your defined components. For example:
...
frm.addComponentListener(this);
- Finally, catch the various events of these components by using four methods of Component Listener as shown below:
public void componentShown(ComponentEvent ey)
{
showMessage(ey.getClass().getName() + ">Component Visible");
}
public void componentHidden(ComponentEvent ey)
{
showMessage(ey.getComponent().getClass().getName() + ">Component Hidden");
}
public void componentResized(ComponentEvent ey)
{
showMessage(ey.getComponent().getClass().getName() + ">Component Resized ");
}
public void componentMoved(ComponentEvent ey)
{
showMessage(ey.getComponent().getClass().getName() + ">Component Moved");
}
Let's use an example
In this example; we show the use of component listener. In this program we create a window that contains a panel that has a label and a check box. The visibility of the label is controlled by a check box. A text area is used to display the message when any component fires an event.
The following procedure is included in this example.
Step 1
Open the NetBeans IDE.
Step 2
Now go to the File Menu and choose "New Project", a new window appears like this.
Step 3
Choose "Java"-> "Java application" as shown below:
Step 4
Click on "Next" and then type your project name. I specified "ComponentDemo" as shown below:
Step 5
Click on "Finish"; your project is set up with a default Java file "ComponentDemo.java" as shown below.
Step 6
Now change the code and write the following code in the "ComponentDemo.java" file.
ComponentDemo.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ComponentDemo extends JPanel implements ItemListener,ComponentListener {
static JFrame frm;
JTextArea print;
JLabel labl;
String blankline = "\n";
public ComponentDemo() {
super(new BorderLayout());
print = new JTextArea();
print.setEditable(false);
JScrollPane scrll = new JScrollPane(print);
scrll.setPreferredSize(new Dimension(350, 200));
JPanel pnl = new JPanel(new BorderLayout());
labl = new JLabel("This is a label", JLabel.CENTER);
labl.addComponentListener(this);
pnl.add(labl, BorderLayout.CENTER);
JCheckBox chkbx = new JCheckBox("Label visible", true);
chkbx.addItemListener(this);
chkbx.addComponentListener(this);
pnl.add(chkbx, BorderLayout.PAGE_END);
pnl.addComponentListener(this);
add(scrll, BorderLayout.CENTER);
add(pnl, BorderLayout.PAGE_END);
frm.addComponentListener(this);
}
public void itemStateChanged(ItemEvent ey)
{
if (ey.getStateChange() == ItemEvent.SELECTED)
{
labl.revalidate();
labl.setVisible(true);
labl.repaint();
}
else
{
labl.setVisible(false);
}
}
protected void showMessage(String messg)
{
print.append(messg + blankline);
print.setCaretPosition(print.getDocument().getLength());
}
public void componentShown(ComponentEvent ey)
{
showMessage(ey.getClass().getName() + ">Component Visible");
}
public void componentHidden(ComponentEvent ey)
{
showMessage(ey.getComponent().getClass().getName() + ">Component Hidden");
}
public void componentResized(ComponentEvent ey)
{
showMessage(ey.getComponent().getClass().getName() + ">Component Resized ");
}
public void componentMoved(ComponentEvent ey)
{
showMessage(ey.getComponent().getClass().getName() + ">Component Moved");
}
private static void createAndShowGUI()
{
frm = new JFrame("Comp");
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent compnts = new ComponentDemo();
compnts.setOpaque(true);
frm.setContentPane(compnts);
frm.pack();
frm.setVisible(true);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
Step 7
Now our file is ready to run.
Right-click on the project then select "Run", as shown below.
Step 8
Now you get the same output as shown below.
Now click on the checkbox to hide the label.
Thanks for reading.