如何制作带有透明图标和非透明文本的JButton?
How to make JButton with transparent icon and non-transparent text?
我需要制作一个带有图像图标和常规文本的 JButton。这个问题与 How to make JButton with transparent background and regular text? 不重复,因为我需要将图像上传为图标并使其透明。我尝试使用重写的 paintComponent() 方法
@Override
public void paintComponent(java.awt.Graphics g) {
java.awt.Graphics2D g2 = (java.awt.Graphics2D) g;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
super.paintComponent(g2);
}
但它所做的只是将图标和文本都绘制成透明的,而且按钮没有正确刷新。
是否有任何可能的解决方法?
更新
我设置按钮的方式如下(item.getImage() returns 字节数组):
setFocusable(true);
setFocusPainted(true);
setVerticalTextPosition(SwingConstants.CENTER);
setHorizontalTextPosition(SwingConstants.CENTER);
if(item.getImage() != null) {
int w = BUTTON_SIZE - 10;
int h = BUTTON_SIZE - 10;
if(menuItem.isShowImageOnly()) {
setIcon(menuItem.getScaledImage(w, h));
}
else {
w = 80;
h = 40;
setIcon(menuItem.getScaledImage(w, h));
}
先在Image上画出透明度
Image im = ...;
java.awt.Graphics2D g2 = (java.awt.Graphics2D) im.getGraphics();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
g2.drawImage(0,0, im, null);
g2.dispose();
ImageIcon icon = ...
我需要制作一个带有图像图标和常规文本的 JButton。这个问题与 How to make JButton with transparent background and regular text? 不重复,因为我需要将图像上传为图标并使其透明。我尝试使用重写的 paintComponent() 方法
@Override
public void paintComponent(java.awt.Graphics g) {
java.awt.Graphics2D g2 = (java.awt.Graphics2D) g;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
super.paintComponent(g2);
}
但它所做的只是将图标和文本都绘制成透明的,而且按钮没有正确刷新。 是否有任何可能的解决方法?
更新
我设置按钮的方式如下(item.getImage() returns 字节数组):
setFocusable(true);
setFocusPainted(true);
setVerticalTextPosition(SwingConstants.CENTER);
setHorizontalTextPosition(SwingConstants.CENTER);
if(item.getImage() != null) {
int w = BUTTON_SIZE - 10;
int h = BUTTON_SIZE - 10;
if(menuItem.isShowImageOnly()) {
setIcon(menuItem.getScaledImage(w, h));
}
else {
w = 80;
h = 40;
setIcon(menuItem.getScaledImage(w, h));
}
先在Image上画出透明度
Image im = ...;
java.awt.Graphics2D g2 = (java.awt.Graphics2D) im.getGraphics();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
g2.drawImage(0,0, im, null);
g2.dispose();
ImageIcon icon = ...