⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curvespanel.java

📁 java实现浏览器等本地桌面的功能
💻 JAVA
字号:
/*
 * $Id: CurvesPanel.java,v 1.1 2005/05/25 23:13:25 rbair Exp $
 *
 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
 * Santa Clara, California 95054, U.S.A. All rights reserved.
 */

package org.jdesktop.demo.login.romain;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
import java.awt.geom.CubicCurve2D;
import java.awt.geom.GeneralPath;

public class CurvesPanel extends GradientPanel {
	private RenderingHints hints;
	private int counter = 0;

	public CurvesPanel() {
		hints = new RenderingHints(RenderingHints.KEY_ALPHA_INTERPOLATION,
				RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
		hints.put(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		hints.put(RenderingHints.KEY_COLOR_RENDERING,
				RenderingHints.VALUE_COLOR_RENDER_QUALITY);
		hints.put(RenderingHints.KEY_INTERPOLATION,
				RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		hints.put(RenderingHints.KEY_RENDERING,
				RenderingHints.VALUE_RENDER_QUALITY);
	}

	public void paintComponent(Graphics g) {
		counter++;

		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHints(hints);
		super.paintComponent(g2);

		float width = getWidth();
		float height = getHeight();

		g2.translate(0, -30);
		drawCurve(g2,
				20.0f, -10.0f, 20.0f, -10.0f,
				width / 2.0f - 40.0f, 10.0f,
				0.0f, -5.0f,
				width / 2.0f + 40, 1.0f,
				0.0f, 5.0f,
				50.0f, 5.0f, false);
		g2.translate(0, 30);

		g2.translate(0, height - 60);
		drawCurve(g2,
				30.0f, -15.0f, 50.0f, 15.0f,
				width / 2.0f - 40.0f, 1.0f,
				15.0f, -25.0f,
				width / 2.0f, 1.0f / 2.0f,
				0.0f, 25.0f,
				15.0f, 6.0f, false);
		g2.translate(0, -height + 60);

		drawCurve(g2,
				height - 35.0f, -5.0f, height - 50.0f, 10.0f,
				width / 2.0f - 40.0f, 1.0f,
				height - 35.0f, -25.0f,
				width / 2.0f, 1.0f / 2.0f,
				height - 20.0f, 25.0f,
				25.0f, 4.0f, true);
	}

	private void drawCurve(Graphics2D g2, 
			float y1, float y1_offset,
			float y2, float y2_offset,
			float cx1, float cx1_offset,
			float cy1, float cy1_offset,
			float cx2, float cx2_offset,
			float cy2, float cy2_offset,
			float thickness,
			float speed,
			boolean invert) {

		float width = getWidth();
		float height = getHeight();

		double offset = Math.sin(counter / (speed * Math.PI));
		float start_x = 0.0f;
		float start_y = y1 + (float) (offset * y1_offset);
		float end_x = width;
		float end_y = y2 + (float) (offset * y2_offset);
		float ctrl1_x = (float) offset * cx1_offset + cx1;
		float ctrl1_y = cy1 + (float) (offset * cy1_offset);
		float ctrl2_x = (float) (offset * cx2_offset) + cx2;
		float ctrl2_y = (float) (offset * cy2_offset) + cy2;

		CubicCurve2D curve = new CubicCurve2D.Double(start_x, start_y, ctrl1_x, ctrl1_y, ctrl2_x, ctrl2_y, end_x, end_y);
		
		GeneralPath path = new GeneralPath(curve);
		path.lineTo(width, height);
		path.lineTo(0, height);
		path.closePath();
		
		Area thickCurve = new Area((Shape) path.clone());
		AffineTransform translation = AffineTransform.getTranslateInstance(0, thickness);
		path.transform(translation);
		thickCurve.subtract(new Area(path));

		Color start = new Color(255, 255, 255, 200);
		Color end = new Color(255, 255, 255, 0);

		Rectangle bounds = thickCurve.getBounds();
		GradientPaint painter = new GradientPaint(0, curve.getBounds().y,
				invert ? end : start,
				0, bounds.y + bounds.height,
				invert ? start : end);
		Paint oldPainter = g2.getPaint();
		g2.setPaint(painter);
		
		g2.fill(thickCurve);
		
		g2.setPaint(oldPainter);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -