2017-09-26 114 views
0

我有JButton,它有一個ImageIcon和一些文本。 我想有透明的背景,沒有邊框,但也想有一些填充。Jbutton帶填充的隱形邊框

這是我曾嘗試:

Jbutton button = new JButton(); 

//Add image to the button 
ImageIcon img= new ImageIcon(imgUrl); 
button.setIcon(img); 

//make button transparent 
button.setBackground(new Color(255,255,255,0)); 

//Remove border 
button.setBorderPainted(false); 
button.setContentAreaFilled(false); 
button.setFocusPainted(false); 

//add padding 
button.setBorder(BorderFactory.createEmptyBorder(5,10,5,50)); 

我仍然看到灰色邊框的邊框。 當我做button.setBorder(null),灰色邊框線消失,但我無法添加填充。

如果有人可以請指導我我做錯了什麼。我對揮杆很陌生,嘗試過不同的答案,但他們都沒有成功。

謝謝。

+0

'button.setBackground(新顏色(255,255,255,0));'是不是你如何使組件透明,而是,你需要設置'setOpaque'並傳遞它false – MadProgrammer

+1

我也看看['JButton#setMargin'](https://docs.oracle.com/javase /8/docs/api/javax/swing/AbstractButton.html#setMargin-java.awt.Insets-)添加填充 – MadProgrammer

+0

@MadPro語法我試過button.setMargin(新的Insets(10,10,10,10)),但沒有使用border設置爲null。還有什麼我可以嘗試嗎? – LearningToCode

回答

0

如何設置頁邊距,以適應佈局管理器上的任何擺動組件。

如果您正在使用GridBagLayout,則應該將GridBagConstraint對象上的插圖設置爲所需的值。

1
  • 不要使用setBackground(new Color(255,255,255,0)),擺動僅支持完全不透明或完全透明的部件,經由opaque屬性控制,使用基於阿爾法顏色可以產生不希望的副作用
  • 考慮使用setMargins以產生填充

例...

Screen Shot

原始圖像...

Original Image

import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class Launcher { 

    public static void main(String[] args) { 
     new Launcher(); 
    } 

    public Launcher() { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        JButton button = new JButton(); 

        ImageIcon img = new ImageIcon(ImageIO.read(getClass().getResource("Cup.png"))); 
        button.setIcon(img); 
        button.setBorderPainted(false); 
        button.setContentAreaFilled(false); 
        button.setFocusPainted(false); 
        button.setOpaque(true); 
        button.setMargin(new Insets(10, 10, 10, 10)); 
        JFrame frame = new JFrame(); 
        // Just testing to see there are glitches 
        frame.setLayout(new GridBagLayout()); 
        frame.add(button); 
        frame.pack(); 
        frame.setLocationRelativeTo(null); 
        frame.setVisible(true); 
       } catch (IOException ex) { 
        Logger.getLogger(Launcher.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }); 
    } 
} 

我沒有發現,如果你使用的setBorder,它推翻了margin