Java按钮悬停

时间:2015-10-16 19:18:03

标签: java hover jbutton

我是Java编程的新手,我想知道如何搞乱按钮,我创建了一个" Home Screen"还有一些按钮和文字,但是它并不像我想的那样先进,我想知道如何创建像图像效果这样的东西,所以让我们说我将鼠标悬停在一个按钮,我希望它在它后面显示一个发光的动画,或者因为我没有那个动画,如果没有简单的方法来创建它,只需在它后面显示一个图像就可以了,我也是按下按钮时没有发生任何事情bcs IDK如何做到这一点,所以如果你可以提供帮助,那就太棒了! 这是我目前的代码:

package Menu;

import java.awt.FlowLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class BackgroundPanel extends JFrame {
private BufferedImage image;
public BackgroundPanel() {
    ImageIcon icon = new ImageIcon("image_path.png");
    JButton btn = new JButton(icon);
    btn.setOpaque(false);
    btn.setContentAreaFilled(false);
    btn.setBorderPainted(false);
    btn.setFocusPainted(false);
    try {
        image = ImageIO.read(new File("image_path.jpg"));
        // Set your Image Here.
        this.setContentPane(new JLabel(new ImageIcon(image)));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    JPanel panel = new JPanel();
    panel.add(new JLabel("Username:"));
    panel.add(new JTextField("",20));
    panel.add(new JLabel("Password:"));
    panel.add(new JTextField("",20));
    panel.add(btn);

    //Adding components to Panel and JFrame
    this.add(panel);    
    // JFrame Properties
    this.setSize(1280,720);
    this.setLayout(new FlowLayout());
    this.setResizable(true);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("Panel");
    this.setVisible(true);

}

public static void main(String[] args) {
    new BackgroundPanel();
}

}

2 个答案:

答案 0 :(得分:2)

  

[...]我也没有发生任何事情按下按钮bcs IDK如何做到这一点,所以如果你可以帮助它,它会很棒[...]

您需要在按钮中添加ActionListener。还有其他各种方法可以检测按钮是否被按下,但这个是(在我看来)最简单的方法。你就是这样做的:

btn.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
        // code you write in here will be executed if the button was pressed
    }
});
  

[...]让我说我将鼠标悬停在一个按钮上,我希望它在它后面显示一个发光的动画,或者因为我没有那个动画,如果没有简单的方法来创建它,只需显示一个图像它背后是好的[...]

为此,您必须处理JLayeredPaneMouseListener s。 Here是我在“运行中”创建的一个示例;布局非常脏,需要改进。无论如何,你会注意到,一旦你将鼠标悬停在按钮上,按钮后面会出现一个包含LA- -LL!的黑色边框。这是一个JLabel,您可以使用JLabel.setIcon方法来显示图像等。

答案 1 :(得分:1)

  

让我说我将鼠标悬停在一个按钮上,我希望它在它后面显示一个发光的动画,或者因为我没有那个动画,如果没有简单的方法来创建它,只需在它后面显示一个图像就可以了< / p>

这并不容易,它需要跳过一大堆箍,特别是当按钮不是矩形时。

我前一段时间做了一个“验证荧光笔”的原型,它突出显示了无效字段,它使用了JXLayer库,但应该可以转换为使用核心库上包含的JLayer库

有关详细信息,请参阅How can I change the highlight color of a focused JComboBox

另一种可能性是我们要创建自定义JPanel并覆盖其paintComponent方法并在那里绘制效果。你可以放置你的按钮,并结合布局管理器和边框,你应该能够将按钮放在你需要的位置。

这个问题是,它会影响表单的覆盖布局,因为在布置主表单时会考虑效果

  

按下按钮时我真的没有发生任何事情bcs IDK如何做到这一点,所以如果你可以帮忙那就太棒了

我建议您查看How to use buttonsHow to write ActionListeners