Java按钮悬停

Java按钮悬停,java,hover,jbutton,Java,Hover,Jbutton,我是Java编程新手,我想知道如何处理按钮,我已经创建了一个“主屏幕”和一些按钮以及文本,但是它没有我希望的那么先进,我想知道如何创建图像效果之类的东西,所以假设我将鼠标悬停在一个按钮上,我希望它后面显示一个发光的动画,或者,因为我没有动画,如果没有简单的方法来创建它,只是在它后面显示一个图像就可以了,而且当按下bcs IDK按钮时,我也没有任何事情发生。如何做到这一点,所以如果你能帮上忙,那将是非常棒的! 以下是我目前拥有的代码: package Menu; import java.awt.

我是Java编程新手,我想知道如何处理按钮,我已经创建了一个“主屏幕”和一些按钮以及文本,但是它没有我希望的那么先进,我想知道如何创建图像效果之类的东西,所以假设我将鼠标悬停在一个按钮上,我希望它后面显示一个发光的动画,或者,因为我没有动画,如果没有简单的方法来创建它,只是在它后面显示一个图像就可以了,而且当按下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();
}

}
[…]而且我在按下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
    }
});
[…]假设我将鼠标悬停在一个按钮上,我希望它后面显示一个发光的动画,或者因为我没有那个动画,如果没有简单的方法来创建它,只在它后面显示一个图像就可以了[…]

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

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

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

不久前,我做了一个“validation highlighter”的原型,它突出显示了无效字段,它利用了JXLayer库,但应该可以转换为使用核心库上附带的JLayer库

有关更多详细信息,请参阅

另一种可能性是创建一个定制的
JPanel
,覆盖它的
paintComponent
方法并在那里绘制效果。你可以把你的按钮放在它上面,通过布局管理器和边框的组合,你应该能够把按钮放在你需要的地方

这样做的问题是,它会影响表单的过度布局,因为在布局主表单时会考虑这种影响

我真的没有任何事情发生时,按下按钮bcs IDK如何做到这一点,所以如果你可以帮助这将是可怕的


我建议你看一看,谢谢,我刚刚在这里注册,所以我还不能升级投票:p我会看一下代码,我用来显示按钮图标的方法也有问题,我不知道如何调整它的大小,btn.大小似乎不起作用,所以我最终调整了图像本身的大小,这在这里没有问题,但如果我想在不同的东西中使用不同大小的相同图像,我需要各种不同的图像,你知道有什么简单的方法吗?我真的不想改变太多的编码,因为我仍然试图完全理解这一点,但谢谢你的帮助:)谢谢,我会尝试在我的按钮上实现这一点,现在对我来说有点复杂,因为我对JComboBox甚至JFrame都不太熟悉,这对我来说还是有点新鲜,但我会四处看看:请记住,你所要求的(悬停效果)并不是那么简单,虽然可能有很多解决方案,但每一个都会带来一定程度的复杂性