2012-04-24 168 views
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的東西)。對不起,如果這已被問及之前,並感謝您的任何幫助。Darken JButton(s)懸停/點擊

** 編輯 **

我試圖做到這一點,但它只是將圖像空白:

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

該函數將返回一個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)並在啓動時加載。上面的代碼將是過程密集型的,並會減慢你的應用運行時間。

+0

tmpCol =新顏色(img。的getRGB()); BufferedImage類型中的getRGB(int,int)方法不適用於參數() – KisnardOnline 2012-04-24 21:52:23

+1

非常確定它應該是getRGB(x,y);沒有試圖成爲一個痛苦,我真的很感謝幫助,只是想糾正任何人誰發現這個職位 – KisnardOnline 2012-04-24 21:54:54

+1

而是,使用'RescaleOp',說明[這裏](http://stackoverflow.com/a/10208380/) 230513)。 – trashgod 2012-04-24 23:22:33

0

看看這個tutorial。您可能對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) {} 

} 
+0

我可以使用setRolloverIcon(),但需要幫助,使圖像更暗 – KisnardOnline 2012-04-24 21:04:16

+0

@JayAvon:那麼爲什麼不讓更暗的圖像,把它們放在ImageIcons,然後將它們設置爲你的翻轉圖像?對此投票以取消您的倒票。 – 2012-04-24 21:07:37

+0

,因爲我不想在PhotoShop中打開每個按鈕並將它們變暗10%和20%,然後改變主意並且必須重新執行它們。我想寫代碼爲我做,所以如果我稍後改變主意,我可以鍵入一個新的XX%。有沒有辦法使ImageIcon變暗? – KisnardOnline 2012-04-24 21:15:36

5

有兩種方法

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

+1

+1使用'RescaleOp',說明[這裏](http:// stackoverflow.com/a/10208380/230513),爲每次使用更改一個「Icon」。 – trashgod 2012-04-24 23:23:42