java面板透明_Java透明面板和面板上的自定义效果

请参阅教程

How to Create Translucent and Shaped Windows和*

How to Create Translucent and Shaped Windows *.请在

@camickr之前链接到优秀的示例站点.

例如,

import java.awt.event.*;

import java.awt.Color;

import java.awt.AlphaComposite;

import javax.swing.*;

import javax.swing.UIManager.LookAndFeelInfo;

public class ButtonTest {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

new ButtonTest().createAndShowGUI();

}

});

}

private JFrame frame;

private JButton opaqueButton1;

private JButton opaqueButton2;

private SoftJButton softButton1;

private SoftJButton softButton2;

public void createAndShowGUI() {

opaqueButton1 = new JButton("Opaque Button");

opaqueButton2 = new JButton("Opaque Button");

softButton1 = new SoftJButton("Transparent Button");

softButton2 = new SoftJButton("Transparent Button");

opaqueButton1.setBackground(Color.GREEN);

softButton1.setBackground(Color.GREEN);

frame = new JFrame();

frame.getContentPane().setLayout(new java.awt.GridLayout(2, 2, 10, 10));

frame.add(opaqueButton1);

frame.add(softButton1);

frame.add(opaqueButton2);

frame.add(softButton2);

frame.setSize(567, 350);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

Timer alphaChanger = new Timer(30, new ActionListener() {

private float incrementer = -.03f;

@Override

public void actionPerformed(ActionEvent e) {

float newAlpha = softButton1.getAlpha() + incrementer;

if (newAlpha < 0) {

newAlpha = 0;

incrementer = -incrementer;

} else if (newAlpha > 1f) {

newAlpha = 1f;

incrementer = -incrementer;

}

softButton1.setAlpha(newAlpha);

softButton2.setAlpha(newAlpha);

}

});

alphaChanger.start();

Timer uiChanger = new Timer(3500, new ActionListener() {

private LookAndFeelInfo[] laf = UIManager.getInstalledLookAndFeels();

private int index = 1;

@Override

public void actionPerformed(ActionEvent e) {

try {

UIManager.setLookAndFeel(laf[index].getClassName());

SwingUtilities.updateComponentTreeUI(frame);

} catch (Exception exc) {

exc.printStackTrace();

}

index = (index + 1) % laf.length;

}

});

uiChanger.start();

}

public static class SoftJButton extends JButton {

private static final JButton lafDeterminer = new JButton();

private static final long serialVersionUID = 1L;

private boolean rectangularLAF;

private float alpha = 1f;

public SoftJButton() {

this(null, null);

}

public SoftJButton(String text) {

this(text, null);

}

public SoftJButton(String text, Icon icon) {

super(text, icon);

setOpaque(false);

setFocusPainted(false);

}

public float getAlpha() {

return alpha;

}

public void setAlpha(float alpha) {

this.alpha = alpha;

repaint();

}

@Override

public void paintComponent(java.awt.Graphics g) {

java.awt.Graphics2D g2 = (java.awt.Graphics2D) g;

g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));

if (rectangularLAF && isBackgroundSet()) {

Color c = getBackground();

g2.setColor(c);

g.fillRect(0, 0, getWidth(), getHeight());

}

super.paintComponent(g2);

}

@Override

public void updateUI() {

super.updateUI();

lafDeterminer.updateUI();

rectangularLAF = lafDeterminer.isOpaque();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值