2014-03-25 4 views
5

Я пытаюсь создать приложение Java Desktop, в котором я использую две кнопки. Я хочу добавить эффект зависания в эти кнопки. Я хочу: когда я нажимаю любую кнопку, он должен менять цвет фона.Как наложить эффект Hover на jbutton?

Как я могу это достичь?

Вот мой код:

public class Party1Party2 extends JFrame 
{ 
    JButton b1; 
    JButton b2; 
    Container pane; 

    public Party1Party2() 
    { 
     getContentPane().setBackground(new java.awt.Color(255, 255, 255)); 

    b2.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent ae) 
     { 
      JOptionPane.showMessageDialog(frame, "Welcome to allhabad High Court"); 
     } 
    }); 

    b1.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent ae) 
     { 
      JOptionPane.showMessageDialog(frame, "Welcome to allhabad High Court"); 

     } 
    }); 
    } 
} 
+0

@peeskillet может рассказать мне, как я могу сделать jbutton как закругленный rectangel – user3456343

+0

Честно говоря, я бы просто посмотрел на меняющийся внешний вид. Мне не нравится возиться с внешним видом. См. [Этот пост] (http://stackoverflow.com/a/22166047/2587435) и см. [Изменение внешнего вида и ощущения] (http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/index. html) –

+0

все попытки прослушивателя мыши ошибочны, с побочным эффектом, чтобы игнорировать эти ответы – mKorbel

ответ

12

Вы можете использовать наведении мышки Entered и ExitedJButton, и делать то, что вы хотите.

Для примера:

jButton1.addMouseListener(new java.awt.event.MouseAdapter() { 
    public void mouseEntered(java.awt.event.MouseEvent evt) { 
     jButton1.setBackground(Color.GREEN); 
    } 

    public void mouseExited(java.awt.event.MouseEvent evt) { 
     jButton1.setBackground(UIManager.getColor("control")); 
    } 
}); 
+1

ответ неверен, все события мыши реализованы в API JButtons и правильно используют их вместо прослушивателя мыши – mKorbel

+6

О, eeeeasy, я думаю, вы пытаетесь сказать, что есть лучший способ сделать это, но это не НЕПРАВИЛЬНЫЙ ответ, по крайней мере для меня, потому что я делал это много раз, и, пожалуйста, будьте более современными в своих комментариях !!! – Salah

+1

1. «пожалуйста, будьте более современными в своих комментариях !!!» - не очень важно, использование MouseListener для JButton просто неверно, снова все эти события реализованы в JButtons API и правильно по сравнению с MouseListener, см., Что происходит в случай, когда вы перемещаете мышь над JButton, события реализованы, только для того, чтобы переопределить эти события 2. «по крайней мере, для меня, потому что я делал это много раз» - не следует использовать MosueListener для компонентов Jbuttons, 3.мой комментарий о «редактировании вопроса, где будут использоваться правильные события, чтобы предлагать использование правильных событий» – mKorbel

1

я однажды написал обычай JButton, который используется для изменения его уровня прозрачности, когда мышь завис над ней с помощью анимации. Вот код для этой кнопки:

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

public class HoverButton extends JButton 
{ 
    float alpha = 0.5f; 

    public HoverButton(String text) 
    { 
    super(text); 
    setFocusPainted(false); 
    setBorderPainted(false); 
    setContentAreaFilled(false); 
    addMouseListener(new ML()); 
    } 

    public float getAlpha() 
    { 
    return alpha; 
    } 

    public void setAlpha(float alpha) 
    { 
    this.alpha = alpha; 
    repaint(); 
    } 

    public void paintComponent(java.awt.Graphics g) 
    { 
    java.awt.Graphics2D g2 = (java.awt.Graphics2D) g; 
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); 
    super.paintComponent(g2); 
    } 

    public class ML extends MouseAdapter 
    { 
    public void mouseExited(MouseEvent me) 
    { 
     new Thread(new Runnable() 
     { 
     public void run() 
     { 
      for (float i = 1f; i >= .5f; i -= .03f) 
      { 
      setAlpha(i); 
      try 
      { 
       Thread.sleep(10); 
      } 
      catch (Exception e) 
      { 
      } 
      } 
     } 
     }).start(); 
    } 

    public void mouseEntered(MouseEvent me) 
    { 
     new Thread(new Runnable() 
     { 
     public void run() 
     { 
      for (float i = .5f; i <= 1f; i += .03f) 
      { 
      setAlpha(i); 
      try 
      { 
       Thread.sleep(10); 
      } 
      catch (Exception e) 
      { 
      } 
      } 
     } 
     }).start(); 
    } 

    public void mousePressed(MouseEvent me) 
    { 
     new Thread(new Runnable() 
     { 
     public void run() 
     { 
      for (float i = 1f; i >= 0.6f; i -= .1f) 
      { 
      setAlpha(i); 
      try 
      { 
       Thread.sleep(1); 
      } 
      catch (Exception e) 
      { 
      } 
      } 
     } 
     }).start(); 
    } 
    } 
} 

А вот быстрый демонстрация HoverButton:

import javax.swing.*; 
import java.awt.*; 

public class Demonstration 
{ 
    public Demonstration() 
    { 
    JFrame frame = new JFrame("Hover Button Demonstration"); 
    frame.setLayout(new GridBagLayout()); 
    frame.add(new HoverButton("Hover Button!!")); 

    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    } 

    public static void main(String args[]) 
    { 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
     new Demonstration(); 
     } 
    }); 
    } 
} 

Хорошая вещь, что вы можете изменить код, чтобы изменить цвет фона кнопки, а также, и это тоже, анимированным образом.

+1

иногда, нет больше .. ваш ответ в порядке, но слишком большой .. – Volazh

0

Ничего себе. Старый вопрос, я знаю, но ...

Чтобы изменить цвет фона, использование:

b1.setBackground(new java.awt.Color(r, g, b)); 

в ActionListener.

Для эффекта одновременного нажатия клавиш, вы можете использовать:

b1.setRolloverEnabled(true); 

, но вам нужно будет поставить иконки для кнопок, чтобы переключаться между.

В противном случае для других эффектов зависания вам необходимо использовать mouseListener.