我有JButton,它有一个ImageIcon和一些文本。 我希望透明背景没有边框,但也希望有一些填充。
以下是我的尝试:
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 :(得分:1)
setBackground(new Color(255,255,255,0))
,Swing仅支持完全不透明或完全透明的组件,通过opaque
属性控制,使用基于alpha的颜色会产生不良副作用setMargins
生成填充示例...
原始图片......
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
值
答案 1 :(得分:0)
如何设置边距,以及布局管理器上的任何摆动组件deoends。
如果您正在使用GridBagLayout,则应将GridBagConstraint对象上的insets设置为所需的值。