2015-05-07 69 views
3

我正在製作坦克遊戲。在我的菜單中,我想用圖片作爲jbuttons,它們部分透明,當它們出現在屏幕上時,透明部分變成白色。我想使用.setOpaque,但這是行不通的。我想不出任何其他方法擺脫白色部分。我一直在尋找堆棧溢出,但沒有任何方法似乎有幫助。任何有想法的人?如何保持JButtons(java)的透明度

謝謝!

package menu; 

    import java.awt.*; 
    import java.awt.event.*; 

    import javax.swing.*; 

    @SuppressWarnings("serial") 
    public class MenuPanel extends JPanel implements ActionListener 
    { 

     private Button playKnop, highScoreKnop, quitKnop, HTPKnop; 
     private JTextField naam; 
     private Image achtergrond; 
     private Tanks mainVenster; 
     public static String naam_input; 

     int x = 95, width = 200, height = 50; 



     public MenuPanel(Tanks mainVenster) 
     { 
      this.mainVenster = mainVenster; 
      this.setLayout(null); 

      playKnop = new Button("/buttons/PLAY.png", 350, this);  
      highScoreKnop = new Button("/buttons/HS.png", 460, this); 
      HTPKnop = new Button("/buttons/HTP.png", 515, this); 
      quitKnop = new Button("/buttons/QUIT.png", 570, this); 



      this.add(playKnop); 
      this.add(quitKnop); 
      this.add(HTPKnop); 
      this.add(highScoreKnop); 

      validate(); 

     } 

     public class Button extends JButton 
     { 
      JButton button; 
      ImageIcon buttonImage; 

      String backgroundPath; 
      int y; 


      public Button(String backgroundPath, int y, MenuPanel menuPanel) 
      { 
       super(); 
       this.backgroundPath = backgroundPath; 
       this.y = y; 

       buttonImage = new     
         ImageIcon(PlayPanel.class.getResource(backgroundPath)); 
       this.setIcon(buttonImage); 
       this.setBounds(x, y, width, height);; 
       this.addActionListener(menuPanel); 
      } 

     } 

     public void paintComponent(Graphics g) 
     { 
      super.paintComponent(g); 
      g.drawImage(achtergrond, 0, 0, this.getWidth(), this.getHeight(), 
       this); 
     } 

     } 
+0

試試這個.. button.setContentAreaFilled(false); – sethu

回答

6

刪除某些默認的渲染JButton的屬性,包括

  • contentAreaFilled
  • borderPainted
  • focusPainted

這將減少按鈕,好了,什麼都沒有。 JButton已經支持圖標的繪畫(和可以爲國家的真理這樣做的),所以應該不需要重寫它的paintComponent方法......

Button

public class TestPane extends JPanel { 

    public TestPane() { 
     setBackground(Color.RED); 
     setLayout(new GridBagLayout()); 
     try { 
      BufferedImage img = ImageIO.read(getClass().getResource("/1xaN3.png")); 
      JButton btn = new JButton(new ImageIcon(img)); 
      btn.setOpaque(false); 
      btn.setContentAreaFilled(false); 
      btn.setBorderPainted(false); 
      btn.setFocusPainted(false); 

      add(btn); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

} 

就個人而言,我更喜歡使用ImageIO而不是ImageIcon(或其他方法)加載我的圖像,主要是因爲如果出現錯誤(而不是以靜默方式失敗),它將會拋出IOException,並且在圖像加載之前不會返回(並且如果您執行此操作,則支持進度反饋右)

查看Reading/Loading an Image瞭解更多詳情

相關問題