Сделайте фон JLabel снова прозрачным - PullRequest
6 голосов
/ 03 октября 2011

У меня есть JLabel, который меняет цвет фона, когда мышь входит в него.У меня проблема в том, что я хочу, чтобы JLabel стал прозрачным после выхода из мыши.

Есть ли оператор, который я могу использовать для этого?

Ответы [ 2 ]

18 голосов
/ 03 октября 2011

Здесь, в Германии, ленивый отпуск, поэтому объединение двух ответов:

    final JLabel label = new JLabel("some label with a nice text");
    label.setBackground(Color.YELLOW);
    MouseAdapter adapter = new MouseAdapter() {

        /** 
         * @inherited <p>
         */
        @Override
        public void mouseEntered(MouseEvent e) {
            label.setOpaque(true);
            label.repaint();
        }

        /** 
         * @inherited <p>
         */
        @Override
        public void mouseExited(MouseEvent e) {
            label.setOpaque(false);
            label.repaint();
        }

    };
    label.addMouseListener(adapter);

Проблема (на самом деле я склонен расценивать это как ошибку) состоит в том, что установка непрозрачного свойства не срабатываетперекрасить как было бы уместно.JComponent запускает событие изменения, но кажется, что никто не слушает:

public void setOpaque(boolean isOpaque) {
    boolean oldValue = getFlag(IS_OPAQUE);
    setFlag(IS_OPAQUE, isOpaque);
    setFlag(OPAQUE_SET, true);
    firePropertyChange("opaque", oldValue, isOpaque);
}
2 голосов
/ 03 октября 2011

JLabel по умолчанию прозрачный и непрозрачный. Если вы хотите изменить фон при выходе из мыши, вам необходимо:

...