天天看點

SWING透明窗體,顔色漸變。

建立完全透明窗體,主要先了解以下步驟:

  • 設定JFrame視窗完全透明:AWTUtilities.setWindowOpaque(frame, false);
  • 設定JPanel視窗半透明: G2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
  • 設定JPanel窗體是否透明透明:setOpaque(false);
  • 設定JPanel的Paint顔色漸變使用:GradientPaint(0, 0, color, width, height, color1, false);
  • 效果如下:
    SWING透明窗體,顔色漸變。
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import com.sun.awt.AWTUtilities;


public class Test2 extends JPanel{
	
	public Test2() {
		// TODO 自動生成構造函數存根
		this.setLayout(null);
		this.setOpaque(false);
		JButton button=new JButton("xxxxxxxx");
		button.setBounds(0, 0, 100, 100);
		this.add(button);
		setBackground(Color.red);
	}

	private GradientPaint paint;

	public Color color = Color.CYAN;

	public Color color1 = Color.WHITE;
	
	
	@Override
	public void paint(Graphics g) {
		// TODO 自動生成方法存根
		Graphics2D g2 = (Graphics2D) g.create();
		g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
				0.5f));
		super.paint(g2);
		int height = getHeight();
		int width = getWidth();
		setColor(color, color1, width, height);
		g2.setPaint(paint);
		g2.fillRoundRect(0, 0, this.getWidth() - 100, this.getHeight() - 100,
				25, 25);
		int[] x1={this.getWidth() - 200, this.getWidth() - 200+30,this.getWidth() - 200+60};
		int[] y1={this.getHeight() - 100, this.getHeight() - 100,this.getHeight() - 100+60};
		g2.drawPolyline(x1, y1, 3);
		g2.fillPolygon(x1, y1, 3 );
	}

	private void setColor(Color  color, Color color1, int width, int height) {
		paint = new GradientPaint(0, 0, color, width, height, color1, false);
	}


	public static void main(String[] args) {
		JFrame frame=new JFrame() {

//			 @Override
//			 public void paint(Graphics g) {
//			 // TODO 自動生成方法存根  半透明
//			 Graphics2D G2=(Graphics2D) g.create();
//			 G2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
//			 0.5f));
//			 super.paint(G2);
//			 }

		};;
		frame.setUndecorated(true);
		frame.add(new Test2());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(new Dimension(800,600));
		AWTUtilities.setWindowOpaque(frame, false);
		frame.setVisible(true);
	}

}
           

繼續閱讀