求Java中组件透明度的设置方法!

小弟最近在学Java,想对一个Panel实现透明度的渐变效果。在网上查阅很多资料后发现,好像都需要装额外的插件。。。我目前使用的jdk-6u21,哪位高人知道,在我已有的... 小弟最近在学Java,想对一个Panel实现透明度的渐变效果。在网上查阅很多资料后发现,好像都需要装额外的插件。。。我目前使用的jdk-6u21,哪位高人知道,在我已有的环境下应该用什么类库中的什么函数实现?请给小弟点拨一下!如果能配上简短的程序说明更好,万分感谢!
谢谢你在百忙之中帮我写程序,虽然这你的程序不能运行,但是我从你的程序中了解了你的意思,就是将普通绘图转化为2D绘图的思想。
非常感谢你啊!*_*
展开
 我来答
小傻

推荐于2017-10-14 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

java swing中设置组件透明度的方法如下:

package src;
import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public   class   MyPanel   extends   JPanel{   
private   Image   image   =   null;     
     public   MyPanel(Image image)   {   
               this.image   =   image;   
     }   
     //固定背景图片,允许这个JPanel可以在图片上添加其他组件
     protected   void   paintComponent(Graphics   g)   {   
    g.drawImage(image,   0,   0,   this.getWidth(),   this.getHeight(),   this);   
     }   
}
测试JFrame
package src;

import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test extends JFrame{
JPanel jpanel;
JLabel jlabel;
JButton jbutton;
Image image=new ImageIcon("image/a.jpg").getImage();
ImageIcon labIma=new ImageIcon("image/a.jpg");

Test(){  
   this.setIconImage(image);
   this.setTitle("hello");
   init();
   this.add(jpanel);
}
public void init(){//本方法里面有三种显示图片的方法,两个实现了在图片上添加按钮的功能
   /*第一种方法 通过JLabel简单的设置图片
   jpanel=new JPanel();
   jlabel=new JLabel();
   jlabel.setIcon(labIma);
   jpanel.add(jlabel);
   */
/*第二种方法 这是实现在JLabel添加图片同时在上面添加按钮功能,注意它里面的jpanel不用显示的添加到JFrame中,因此上面构造函数中的this.add(jpanel)要注释掉
jpanel = (JPanel) this.getContentPane(); //从JFrame 里面创建一个JPanel
   jpanel.setOpaque(false); //JPanel 透明模式
   jlabel = new JLabel(labIma); //创建个带背景图片的JLabel 
   this.getLayeredPane().add(jlabel, new Integer(Integer.MIN_VALUE));
   jlabel.setBounds(0, 0, labIma.getIconWidth(), labIma.getIconHeight());
   jpanel.setLayout(new FlowLayout());
   JButton jb = new JButton("我是按钮");
   jpanel.add(jb);
*/
/*第三种方法 通过重写JPanel中的paintComponent方法设置背景图片,然后在jpanel上添加组件
   //通过背景图片设置图片 注意MyPanel是自己定义的一个类
   jpanel=new MyPanel(image);
   jbutton=new JButton();
   jbutton.setText("haha");
   jpanel.add(jbutton);
*/
}
public static void main(String args[])
{
Test t=new Test();
t.setSize(400,400);
t.setVisible(true);
}
hardneedl
推荐于2017-10-07 · TA获得超过921个赞
知道小有建树答主
回答量:1353
采纳率:57%
帮助的人:603万
展开全部
如果认可,请您赏分60分,谢谢
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

/**
* @author Hardneedl
*/
class PanelComposite extends JFrame {
private static final Dimension minSize = new Dimension(300, 200);
private static final Dimension maxSize = new Dimension(1024, 768);
private static final Dimension preferredSize = new Dimension(600, 400);

public Dimension getMaximumSize() {return maxSize;}
public Dimension getMinimumSize() {return minSize;}
public Dimension getPreferredSize() {return preferredSize;}
public String getTitle() {return "Frame Title";}

private class CompositePanel extends JPanel {
private AlphaComposite cmp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1);
private float alpha;

private void setAlpha(float alpha) {
this.alpha = alpha;
if (isVisible()) paintImmediately(getBounds());
}
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setComposite(cmp.derive(alpha));
super.paintComponent(g2d);
}
}

PanelComposite() throws HeadlessException {
init();
doLay();
attachListeners();
}

private void init() {

}

private void doLay() {
Container container = getContentPane();
container.setLayout(null);

CompositePanel p = new CompositePanel();
p.setAlpha(.29f);
p.setBackground(Color.GREEN);
p.setBounds(10,10, 90, 90);

JButton b = new JButton("JBUTTON");
b.setBounds(20,20,100,40);

container.add(p);
container.add(b);
pack();
}

private void attachListeners() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new PanelComposite().setVisible(true);
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式