Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

MouseListener with JComboBox gives troubles. (compact code-sample inside)

843806Nov 5 2008 — edited Oct 20 2009
I have added a MouseListener to a JComboBox however, parts of the JComboBox are not listening to the mouselistener. Whenever I move my cursor over the JComboBox list or the JComboBox button the mouse-over is "lost". Why is this and even better, how can I work arround this problem?

Thanks!

edit: The code sample can be run out of the box.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

/**
 *
 * @author killingdjef
 */
public class ComboBoxListenerBug extends JFrame {

    public ComboBoxListenerBug()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(new ComboBoxListenerBugPanel());
        this.pack();
    }

    public static void main(String[] args)
    {
        ComboBoxListenerBug app = new ComboBoxListenerBug();
        app.setVisible(true);
    }
}

class ComboBoxListenerBugPanel extends JPanel implements MouseListener {

    private boolean mouseOver;
    private int h;
    private int w;
    private Color topGradientColour = Color.black;
    private Color bottomGradientColour = Color.white;
    private GradientPaint gradient;
    private LineBorder visibleBorder = new LineBorder(new Color(204, 204, 204));
    private int rectX1;
    private int rectX2;
    private int rectY1;
    private int rectY2;
    private JComboBox testComboBox;

    public ComboBoxListenerBugPanel()
    {
        this.setPreferredSize(new Dimension(400, 400));
        this.setOpaque(false);
        
        testComboBox = new JComboBox();
        testComboBox.setPreferredSize(new Dimension(200, 30));
        testComboBox.addItem("why");
        testComboBox.addItem("wont");
        testComboBox.addItem("it");
        testComboBox.addItem("work");
        testComboBox.addMouseListener(this);
        this.add(testComboBox);
        
    }
    
     protected void paintComponent(Graphics g)
    {

        h = getHeight();
        w = getWidth();
        Graphics2D g2 = (Graphics2D) g;


        if (isMouseOver() == false)
        {
            gradient = new GradientPaint(0, 0, topGradientColour, 0, h, bottomGradientColour);
            setBorder(null);
        }
        else
        {
            gradient = new GradientPaint(0, 0, bottomGradientColour, 0, h, topGradientColour);
            setBorder(visibleBorder);
        }

        g2.setPaint(gradient);
        g2.fillRect(0, 0, w, h);
        super.paintComponent(g);

        rectX1 = this.getLocationOnScreen().x + 10;
        rectY1 = this.getLocationOnScreen().y + 10;
    }

    public boolean isMouseOver()
    {
        return mouseOver;
    }

    public void setMouseOver(boolean mouseOver)
    {
        this.mouseOver = mouseOver;
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
    }

    @Override
    public void mousePressed(MouseEvent e)
    {
    }

    @Override
    public void mouseReleased(MouseEvent e)
    {
    }

    @Override
    public void mouseEntered(MouseEvent e)
    {
        setMouseOver(true);
        repaint();
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        setMouseOver(false);
        repaint();
    }
}
Edited by: killingdjef on Nov 5, 2008 6:38 PM
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 17 2009
Added on Nov 5 2008
9 comments
700 views