java - 悬停/单击时使 JButton 变暗

标签 java swing mouseover jbutton imageicon

ImageIcon backpackImageIcon = new ImageIcon("images/gui/button_backpack.png");
JButton backpackButton = new JButton();
backpackButton.setBounds(660,686,33,33);
backpackButton.setBorderPainted(false);
backpackButton.setFocusPainted(false);
backpackButton.setVisible(true);
backpackButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("B"), "backpackButtonPress");
backpackButton.getActionMap().put("backpackButtonPress", ClassBackpackButton);
backpackButton.setAction(ClassBackpackButton);
backpackButton.setIcon(backpackImageIcon);
backpackButton.setToolTipText("Backpack[B]");
panel.add(backpackButton);      

我有多个按钮按照这种方式设置。我希望能够做的是让它们在悬停时变暗 10%,在点击时变暗 20%。我试图四处寻找如何做到这一点,但没有运气(只找到了 javascript 的东西)。抱歉,如果之前有人问过这个问题,感谢您的帮助。

** 编辑 **

我尝试过这样做,但它只是将图像变成空白:

BufferedImage bufferedImage = null;
try {
    bufferedImage = ImageIO.read(new File("images/gui/button_backpack.png"));
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
BufferedImage darkerBackpackBufferedImage = new BufferedImage(32, 32, BufferedImage.TYPE_BYTE_INDEXED);
RescaleOp op = new RescaleOp(1.3f, 0, null);
darkerBackpackBufferedImage = op.filter(bufferedImage, null);
ImageIcon darkerBackpackImageIcon = new ImageIcon((Image) darkerBackpackBufferedImage);
backpackButton.setRolloverIcon((ImageIcon) darkerBackpackImageIcon);

** 编辑 ** 包含解决方案

这是我为阅读上面这篇文章的任何人提供的修改后的 shiftColor 函数...祝你好运:)

public BufferedImage shiftColor(BufferedImage img, int rShift, int gShift, int bShift) {
    Color tmpCol;
    int tmpRed, tmpGreen, tmpBlue;
    for (int x = 0; x < img.getWidth(); x++) {
        for (int y = 0; y < img.getHeight(); y++) {
            tmpCol=new Color(img.getRGB(x,y));
            tmpRed = (tmpCol.getRed()-rShift < 0) ? 0 : tmpCol.getRed()-rShift; //if shifted color is less than 0 change to 0
            tmpGreen = (tmpCol.getGreen()-gShift < 0) ? 0 : tmpCol.getGreen()-gShift; //if shifted color is less than 0 change to 0
            tmpBlue = (tmpCol.getBlue()-bShift < 0) ? 0 : tmpCol.getBlue()-bShift; //if shifted color is less than 0 change to 0
            tmpCol=new Color(tmpRed, tmpGreen, tmpBlue);
            img.setRGB(x,y,tmpCol.getRGB());
        }
    }
    return img;
}

最佳答案

有两种方法

1) 使用built-in methods in JButtons API

button.setIcon((Icon i));
button.setRolloverIcon((Icon i));
button.setPressedIcon(Icon i));
button.setDisabledIcon(Icon i));

2) 使用ButtonModel

关于java - 悬停/单击时使 JButton 变暗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305047/

相关文章:

java - wicket/hibernate 的 LazyInitialization 异常

java - SQLiteOpenHelper 类中的调用 Activity

java - 如何在java swing中左、右、上、下移动形状

java - 自动调整 JButton 图标大小

javascript - Magento Java 脚本将鼠标悬停在静态 block 中的图像

javascript - 使用鼠标悬停调用函数。 (不同的选择)

java - java中如何从URL字符串中获取路径参数

java - FFmpeg 音频不同步问题

java - 找不到正确的匹配时,java程序崩溃

html - 将鼠标悬停在按钮上,另一个 div 或 HTML 标记将出现在按钮的左侧