label setCursor not working when main frame is maximized

Discussion in 'Java' started by Chris, May 16, 2008.

  1. Chris

    Chris Guest

    I have a label in a JInternalFrame. The label has a mouseListener on
    it, to listen for clicks but also when the mouse is over the label.
    When the mouse is over it, I want to change the cursor to a hand
    cursor, and back to normal when exiting the label. All this works
    when my frame & internal frame are their start up sizes, but if I
    maximize the main JFrame and then move the mouse over the label, no
    hand! But it's still clickable. For some reason teh setCursor isn't
    working. But un-maximize the JFrame & things work again.

    In the sample code below, I have 2 classes, the main application frame
    that extends JFrame, and MyInternalFrame that extends JInternalFrame.
    It's in the internal frame that holds the label & mouseListener.

    Any help appreciated!!

    import java.awt.BorderLayout;
    import java.awt.Cursor;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.*;

    public class TestLabelLink extends JFrame {
    JDesktopPane desktop;

    public TestLabelLink() {
    super("Test");

    setSize(400,400);

    //Set up the GUI.
    desktop = new JDesktopPane(); //a specialized layered pane

    MyInternalFrame frame = new MyInternalFrame();
    frame.setVisible(true); //necessary as of 1.3
    desktop.add(frame);
    try {
    frame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {}

    setContentPane(desktop);

    //Make dragging a little faster but perhaps uglier.
    desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
    }

    //Quit the application.
    protected void quit() {
    System.exit(0);
    }

    /**
    * Create the GUI and show it. For thread safety,
    * this method should be invoked from the
    * event-dispatching thread.
    */
    private static void createAndShowGUI() {
    //Make sure we have nice window decorations.
    JFrame.setDefaultLookAndFeelDecorated(true);

    //Create and set up the window.
    TestLabelLink frame = new TestLabelLink();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Display the window.
    frame.setVisible(true);
    }

    public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    createAndShowGUI();
    }
    });
    }
    }

    class MyInternalFrame extends JInternalFrame {

    JLabel label = new JLabel("<html><body><a href=\"\">click me</a></
    body></html>");

    public MyInternalFrame() {
    super();
    setSize(200,200);

    this.getContentPane().add(label, BorderLayout.NORTH);

    label.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
    System.out.println("bang!");
    }

    public void mouseEntered(MouseEvent e) {
    label.setCursor(new Cursor(Cursor.HAND_CURSOR));
    }

    public void mouseExited(MouseEvent e) {
    label.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    }
    });
    }
    }
    Chris, May 16, 2008
    #1
    1. Advertising

  2. Chris

    Jeff Higgins Guest

    Chris wrote:
    >I have a label in a JInternalFrame. The label has a mouseListener on
    > it, to listen for clicks but also when the mouse is over the label.
    > When the mouse is over it, I want to change the cursor to a hand
    > cursor, and back to normal when exiting the label. All this works
    > when my frame & internal frame are their start up sizes, but if I
    > maximize the main JFrame and then move the mouse over the label, no
    > hand! But it's still clickable. For some reason teh setCursor isn't
    > working. But un-maximize the JFrame & things work again.
    >
    > In the sample code below, I have 2 classes, the main application frame
    > that extends JFrame, and MyInternalFrame that extends JInternalFrame.
    > It's in the internal frame that holds the label & mouseListener.
    >
    > Any help appreciated!!
    >
    > import java.awt.BorderLayout;
    > import java.awt.Cursor;
    > import java.awt.event.MouseAdapter;
    > import java.awt.event.MouseEvent;
    > import javax.swing.*;
    >
    > public class TestLabelLink extends JFrame {
    > JDesktopPane desktop;
    >
    > public TestLabelLink() {
    > super("Test");
    >
    > setSize(400,400);
    >
    > //Set up the GUI.
    > desktop = new JDesktopPane(); //a specialized layered pane
    >
    > MyInternalFrame frame = new MyInternalFrame();
    > frame.setVisible(true); //necessary as of 1.3
    > desktop.add(frame);
    > try {
    > frame.setSelected(true);
    > } catch (java.beans.PropertyVetoException e) {}
    >
    > setContentPane(desktop);
    >
    > //Make dragging a little faster but perhaps uglier.
    > desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
    > }
    >
    > //Quit the application.
    > protected void quit() {
    > System.exit(0);
    > }
    >
    > /**
    > * Create the GUI and show it. For thread safety,
    > * this method should be invoked from the
    > * event-dispatching thread.
    > */
    > private static void createAndShowGUI() {
    > //Make sure we have nice window decorations.
    > JFrame.setDefaultLookAndFeelDecorated(true);
    >
    > //Create and set up the window.
    > TestLabelLink frame = new TestLabelLink();
    > frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    >
    > //Display the window.
    > frame.setVisible(true);
    > }
    >
    > public static void main(String[] args) {
    > //Schedule a job for the event-dispatching thread:
    > //creating and showing this application's GUI.
    > javax.swing.SwingUtilities.invokeLater(new Runnable() {
    > public void run() {
    > createAndShowGUI();
    > }
    > });
    > }
    > }
    >
    > class MyInternalFrame extends JInternalFrame {
    >
    > JLabel label = new JLabel("<html><body><a href=\"\">click me</a></
    > body></html>");
    >
    > public MyInternalFrame() {
    > super();
    > setSize(200,200);
    >
    > this.getContentPane().add(label, BorderLayout.NORTH);
    >
    > label.addMouseListener(new MouseAdapter() {
    > public void mouseClicked(MouseEvent e) {
    > System.out.println("bang!");
    > }
    >
    > public void mouseEntered(MouseEvent e) {
    > label.setCursor(new Cursor(Cursor.HAND_CURSOR));
    > }
    >
    > public void mouseExited(MouseEvent e) {
    > label.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    > }
    > });


    Just a guess. Do the mouseEnter and Mouse Exit events ever fire when
    MyInternalFrame is maximised?

    > }
    > }
    Jeff Higgins, May 16, 2008
    #2
    1. Advertising

  3. Chris

    Jeff Higgins Guest

    Jeff Higgins wrote:
    >> class MyInternalFrame extends JInternalFrame {
    >>
    >> JLabel label = new JLabel("<html><body><a href=\"\">click me</a></
    >> body></html>");
    >>
    >> public MyInternalFrame() {
    >> super();
    >> setSize(200,200);
    >>
    >> this.getContentPane().add(label, BorderLayout.NORTH);
    >>
    >> label.addMouseListener(new MouseAdapter() {
    >> public void mouseClicked(MouseEvent e) {
    >> System.out.println("bang!");
    >> }
    >>
    >> public void mouseEntered(MouseEvent e) {
    >> label.setCursor(new Cursor(Cursor.HAND_CURSOR));
    >> }
    >>
    >> public void mouseExited(MouseEvent e) {
    >> label.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    >> }
    >> });

    >
    > Just a guess. Do the mouseEnter and Mouse Exit events ever fire when
    > MyInternalFrame is maximised?
    >

    Oops! The listener is on the label, sorry.
    Jeff Higgins, May 16, 2008
    #3
  4. Chris

    Jeff Higgins Guest

    Chris wrote:
    >I have a label in a JInternalFrame. The label has a mouseListener on
    > it, to listen for clicks but also when the mouse is over the label.
    > When the mouse is over it, I want to change the cursor to a hand
    > cursor, and back to normal when exiting the label. All this works
    > when my frame & internal frame are their start up sizes, but if I
    > maximize the main JFrame and then move the mouse over the label, no
    > hand! But it's still clickable. For some reason teh setCursor isn't
    > working. But un-maximize the JFrame & things work again.
    >

    Seems to work as you hope here. WinXP Java 1.6
    Jeff Higgins, May 16, 2008
    #4
  5. Chris

    Jeff Higgins Guest

    Peter Duniho wrote:
    > On Fri, 16 May 2008 15:43:06 -0700, Jeff Higgins <>
    > wrote:
    >
    >>> Just a guess. Do the mouseEnter and Mouse Exit events ever fire when
    >>> MyInternalFrame is maximised?
    >>>

    >> Oops! The listener is on the label, sorry.

    >
    > Well, it is. But that would still be something for the OP to verify.
    > It's possible there's some bug preventing those events from firing when
    > the container is maximized, even though he's listening on the label
    > control.


    A quick web search reveals Bug Id 6242833, status fixed. Linux, 5.0 , b05.
    >
    > Pete
    Jeff Higgins, May 17, 2008
    #5
  6. Chris

    Chris Guest

    On May 16, 6:56 pm, "Jeff Higgins" <> wrote:
    > Peter Duniho wrote:
    > > On Fri, 16 May 2008 15:43:06 -0700, Jeff Higgins <>
    > > wrote:

    >
    > >>> Just a guess. Do the mouseEnter and Mouse Exit events ever fire when
    > >>> MyInternalFrame is maximised?

    >
    > >> Oops! The listener is on the label, sorry.

    >
    > > Well, it is. But that would still be something for the OP to verify.
    > > It's possible there's some bug preventing those events from firing when
    > > the container is maximized, even though he's listening on the label
    > > control.

    >
    > A quick web search reveals Bug Id 6242833, status fixed. Linux, 5.0 , b05.
    >
    >
    >
    > > Pete


    I am running on Ubuntu Linux 7.10 using NetBeans 6 IDE.
    Chris, May 19, 2008
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. desh
    Replies:
    1
    Views:
    416
    Brzezi
    Apr 17, 2006
  2. sjoerd

    display "maximized"

    sjoerd, Oct 15, 2003, in forum: HTML
    Replies:
    27
    Views:
    1,137
    Hywel Jenkins
    Oct 17, 2003
  3. Replies:
    4
    Views:
    464
  4. ~john
    Replies:
    0
    Views:
    326
    ~john
    Sep 1, 2006
  5. Knut Krueger
    Replies:
    8
    Views:
    265
    Knut Krueger
    Aug 20, 2013
Loading...

Share This Page