0
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;
}
4

3 に答える 3

5

2つの方法があります

1) JButtons API の組み込みメソッドを使用する

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

2) ボタンモデルを使用する

于 2012-04-24T21:07:30.837 に答える
1

この関数は、色のオフセット (明るい/暗い) を含む BufferedImage を返します。

public BufferedImage shiftColor(BufferedImage img, int rShift, int gShift,int bShift) {
    Color tmpCol;
    for (int x = 0; x < img.getWidth(); x++) {
        for (int y = 0; y < img.getHeight(); y++) {
            tmpCol=new Color(img.getRGB(x,y));
            tmpCol=new Color(tmpCol.getRed()-rShift,tmpCol.getGreen()-gShift,tmpCol.getBlue()-bShift);
            img.setRGB(x,y,tmpCol.getRGB());
        }
    }
    return img;
}

これでうまくいくとはいえ、明るいイメージと暗いイメージの両方をイメージ エディタ (Photoshop など) で作成し、起動時に両方をロードすることをお勧めします。上記のコードはプロセスを集中的に使用し、アプリのランタイムを遅くします。

于 2012-04-24T21:32:00.137 に答える
0

このチュートリアルをチェックしてください。あなたはおそらくmouseEnteredに興味があります。Javaでバックパックの色を変更する代わりに、明るいバックパックと暗いバックパックの2つの画像を検討してください。ボタンにカーソルを合わせたときに変更します。

public class MouseEventDemo implements MouseListener {
    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.addMouseListener(this);
    addMouseListener(this);

    backpackButton.setIcon(backpackImageIcon);
    backpackButton.setToolTipText("Backpack[B]");
    panel.add(backpackButton);  

    public void mousePressed(MouseEvent e) {}

    public void mouseReleased(MouseEvent e) {}

    public void mouseEntered(MouseEvent e) {
       //set button color to dark color
    }
    public void mouseExited(MouseEvent e) {
       //set button color to light color
    }
    public void mouseClicked(MouseEvent e) {}

}
于 2012-04-24T20:02:53.877 に答える