I have a code with grid layout and two JLabel images. I wan't some text to appear everytime I roll over each image. I am familiar on how to do this when the image is not a JLabel, but have searched all over the web to find how to do this while it is an unnamed JLabel. The two images I wan't to have, with separate roll over messages are:
ImageIcon(getClass().getResource("giraffe.png"));
Icon windows = new ImageIcon(getClass().getResource("windows.png"));
Here is my code:
public class giraffe implements ActionListener{
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(null,
"Press ok, and see the amazing giraffe outside a window!");
JDialog giraffewindow = new JDialog();
Icon giraffe = new ImageIcon(getClass().getResource("giraffe.png"));
Icon windows = new ImageIcon(getClass().getResource("windows.png"));
giraffewindow.setLayout(new GridLayout(1, 2, 0, 0));
giraffewindow.add(new JLabel (windows));
giraffewindow.add(new JLabel (giraffe));
giraffewindow.pack();
giraffewindow.setTitle("GIRAFFE!");
giraffewindow.setVisible(true);
giraffewindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
/*
* I want to have a rollover on EACH IMAGE so that when they rollover the image you see different text.
*/
}
Thank you so much for the time you are taking for reading this, I really appreciate the effort you are putting into helping a fellow programmer!
Start by having a look at How to Write a Mouse Listener.
Basically, you want to attach a MouseListener
to each label and monitor the mouseEntered
and mouseExited
events, updating the label state as per your requirements
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
try {
JLabel left = new JLabel(new ImageIcon(ImageIO.read(...))));
left.setVerticalTextPosition(JLabel.BOTTOM);
left.setHorizontalTextPosition(JLabel.CENTER);
left.setHorizontalAlignment(JLabel.CENTER);
left.setVerticalAlignment(JLabel.CENTER);
left.setText(" ");
JLabel right = new JLabel(new ImageIcon(ImageIO.read(...))));
right.setVerticalTextPosition(JLabel.BOTTOM);
right.setHorizontalTextPosition(JLabel.CENTER);
right.setHorizontalAlignment(JLabel.CENTER);
right.setVerticalAlignment(JLabel.CENTER);
right.setText(" ");
setLayout(new GridLayout(1, 2));
add(left);
add(right);
left.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
left.setText("I'm on the left");
}
@Override
public void mouseExited(MouseEvent e) {
left.setText(" ");
}
});
right.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
right.setText("I'm on the right");
}
@Override
public void mouseExited(MouseEvent e) {
right.setText(" ");
}
});
} catch (IOException exp) {
exp.printStackTrace();
}
}
}
}
You might also want to have a look at Reading/Loading an Image
You can also create a generic listener by doing something like:
ImageIcon giraffe = new ImageIcon(...);
giraffe.setDescription("Giraffe Description");
Then your listener might look something like:
MouseListener ml = new MouseAdapter()
{
@Override
public void mouseEntered(MouseEvent e)
{
JLabel label = (JLabel)e.getSource();
ImageIcon icon = (ImageIcon)label;
label.setText( icon.getDescription() );
}
@Override
public void mouseExited(MouseEvent e)
{
JLabel label = (JLabel)e.getSource();
label.setText(" ");
}
}
And you add the listener to the label:
JLabel giraffeLabel = new JLabel( giraffe );
giraffe.addMouseListener( ml );
The same listener can be used for your other JLabel because the event code knows with component generated the event.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With