`
yuancihang
  • 浏览: 145007 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

太极图swing实现

    博客分类:
  • java
阅读更多

1. 环境

JDK1.6

 

2.代码

 

package tmp.j2d;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JPanel;

import com.yuan.common.swing.Circle;

public class AreaPanel extends JPanel {

	private static final long serialVersionUID = 1L;
	
	public AreaPanel(){
		super();
		super.setPreferredSize(new Dimension(600, 600));
	}
	
	public void paintComponent(Graphics g){
		super.paintComponents(g);
		
		Graphics2D g2 = (Graphics2D)g;
		Shape s1 = new Ellipse2D.Double(100, 100, 400, 400);
		Shape s2 = new Ellipse2D.Double(200, 100, 200, 200);
		Shape s3 = new Ellipse2D.Double(200, 300, 200, 200);
		Shape leftRect = new Rectangle2D.Double(100, 100, 200, 400);
		Shape rightRect = new Rectangle2D.Double(300, 100, 200, 400);
		
		Area a2 = new Area(s2);
		Area a3 = new Area(s3);
		Area leftRectArea = new Area(leftRect);
		Area rightRectArea = new Area(rightRect);
		
		Area leftCircleArea = new Area(s1);
		leftCircleArea.subtract(rightRectArea);
		leftCircleArea.add(a2);//radius
		leftCircleArea.subtract(a3);
		
		Area rightCircleArea = new Area(s1);
		rightCircleArea.subtract(leftRectArea);
		rightCircleArea.subtract(a2);
		rightCircleArea.add(a3);
		
		g2.setColor(Color.white);
		g2.fill(leftCircleArea);
		g2.setColor(Color.black);
		g2.fill(rightCircleArea);
		
		g2.fill(new Circle(300, 200, 10));
		g2.setColor(Color.white);
		g2.fill(new Circle(300, 400, 10));
	}

}
 
package com.yuan.common.swing;

import java.awt.geom.*; 
public class Circle extends Ellipse2D.Double {

	private static final long serialVersionUID = 1L;
	protected double cx;
	protected double cy;
	protected double radius;
	
	public Circle(double cx, double cy, double radius){
		super(cx - radius, cy - radius, 2*radius, 2*radius);
		this.cx = cx;
		this.cy = cy;
		this.radius = radius;
	}

	public double getCx() {
		return cx;
	}

	public double getCy() {
		return cy;
	}

	public double getRadius() {
		return radius;
	}

}

 

3.测试

 

package tmp.j2d;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	
	public ImageFrame(String title){
		super();
		this.setTitle(title);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //必须,否则内存泄露
	}
	
	/**
	 * 设置窗口图标, 可以是png,gif等
	 * @param iconFile String
	 */ 
	public void setIcon(String iconFile){
		try {
			super.setIconImage(ImageIO.read(new File(iconFile)));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void fullScreen(){
		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		GraphicsDevice gd = ge.getDefaultScreenDevice(); 
		if ( gd.isFullScreenSupported() ){
			gd.setFullScreenWindow(this); 
		}
		if (gd.isDisplayChangeSupported()) {
//		     gd.setDisplayMode(new DisplayMode(800, 600, DisplayMode.BIT_DEPTH_MULTI, 60));
		 }
	}
	
	private void center(){
		double screenWidth = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		double screenHeight = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		this.setLocation((int) (screenWidth - this.getWidth()) / 2, (int) (screenHeight - this.getHeight()) / 2); 
		
//		new Robot().createScreenCapture(new Rectangle(0, 0, (int)screenWidth, (int)screenHeight));
	}
	
	private void renderToScreen(){
//		fullScreen();
		this.pack();
		center();
		this.setVisible(true);
	}
	
	public void showImage(BufferedImage bufferedImage){
		this.getContentPane().add(new ImagePanel(bufferedImage));
		renderToScreen();
	}
	
	public void showPanel(JPanel panel){
		this.getContentPane().add(panel);
		renderToScreen();
	}
	
	public void showComponent(Component comp){
		this.getContentPane().add(comp);
		renderToScreen();
	}
	

}

class ImagePanel extends JPanel{

	private static final long serialVersionUID = 1L;
	
	private BufferedImage bufferedImage;
	
	public ImagePanel(BufferedImage bufferedImage){
		this.bufferedImage = bufferedImage;
		
		//设置组件首选大小
		this.setPreferredSize(new Dimension(bufferedImage.getWidth(), bufferedImage.getHeight()));
	}
	
	public void paintComponent(Graphics g){
		super.paintComponents(g);
		Graphics2D g2d = (Graphics2D)g;
		g2d.drawImage(bufferedImage, 0, 0, null);
	}
	
}
 

 

public static void main(String[] args) throws Exception{
        EventQueue.invokeLater(new Runnable() {
	    public void run() {
                ImageFrame imageFrame = new ImageFrame("Java2D 演示");
		
		imageFrame.showPanel(new AreaPanel());
	   }
       });
}

 

运行效果:


 

 

  • 大小: 10.3 KB
分享到:
评论

相关推荐

    画太极图的C++代码实现

    在C++编程中,我们可以利用MFC(Microsoft Foundation Classes)框架来实现图形界面的应用程序,这里我们关注的是如何使用MFC来绘制太极图。太极图由两个相反颜色的半圆组成,中间通过两个小圆来形成阴阳鱼眼,整体...

    太极图的二维方程描述方法

    "太极图的二维方程描述方法" 太极图是一种古典的中国象征符号,表示宇宙的平衡和对立统一。太极图的二维方程描述方法是将太极图转化为数学方程式,以便更好地理解和分析太极图的结构和特征。 在太极图的二维方程...

    太极图VB源代码

    【太极图VB源代码】是基于Visual Basic(VB)编程语言实现的一个图形程序,它能够绘制出具有中国传统哲学象征意义的太极图案。VB是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的应用软件开发...

    JS用Canvas绘制太极图.

    3. 绘制曲线:太极图中间的S型曲线可以通过多段直线或贝塞尔曲线(`quadraticCurveTo()`或`bezierCurveTo()`)来实现,这些方法可以创建平滑的曲线路径。 4. 动画效果:为了让太极图看起来更生动,可能还添加了动画...

    太极图(c#利用GDI+实现)

    本篇将详细探讨如何使用C#结合GDI+实现一个动态的太极图。 首先,我们要理解太极图的基本构成,它通常由黑白两部分组成,代表着阴阳哲学,中间有一条曲线分隔,两边各有一个小圆。在编程中,我们可以通过定义图形的...

    OpenGL实现的太极图

    这就是个用OpenGL实现的太极图没有什么的了就是画几个圆

    计算机图形学(MFC)-太极图

    在这个特定的项目中,我们关注的是利用Microsoft Foundation Classes (MFC)库在C++环境中实现太极图的绘制。MFC是微软为Windows应用程序开发提供的一套类库,它基于面向对象编程,简化了Windows API的使用。 太极图...

    太极图.txt

    适合新学的,练习 java swing画图,利用 BufferedImage 类 ,通过fillArc函数实现太极图绘制。I

    自定义view太极图案

    为了实现动画效果,开发者可能会在自定义View的onDraw()方法中加入时间和状态的判断,动态调整Path的形状,例如改变圆的大小、位置或旋转角度,从而实现太极图的动态流动效果。 文件`OpView.java`很可能是这个...

    自定义view实现太极图、时钟

    本项目中的"自定义view实现太极图、时钟"是一个很好的示例,它利用了Canvas对象来绘制复杂的图形,同时结合系统时间进行动态更新。接下来,我们将详细探讨这两个自定义View的实现原理和关键知识点。 首先,我们来看...

    用C#绘制太极图

    在C#编程环境中,利用`System.Drawing`命名空间可以实现图形绘制,包括绘制复杂的太极图。太极图,作为中国传统文化的象征,由黑白两色的鱼形图案组成,中间以一条S形曲线分隔,代表着阴阳哲学。下面将详细介绍如何...

    C语言画图,太极图

    C语言最基本的画图,实现了画出一个太极图

    静态的图太无趣?旋转的太极图,参见!

    使用matlab实现图形的旋转--旋转的太极图

    ActionScript 画太极图案

    在本案例中,"ActionScript 画太极图案"是一个练习,旨在教授如何利用ActionScript进行图形绘制,特别是对太极图案这种具有复杂对称性的图形的编程实现。 首先,我们要理解太极图案的基本结构。太极图由黑白两个...

    静态太极图(css考试试题).rar

    在太极图的例子中,可能需要利用伪元素创建太极图的黑白两半部分,或者添加太极图的中心分界线。 使用伪元素的语法如下: ```css selector::before { content: "your content"; /* other styles */ } ``` 2...

    taijitu.rar_太极图

    这个程序的开发者利用JAVA的图形用户界面(GUI)库,如JavaFX或Swing,创建了一个可以显示太极图的应用。在JAVA中,图形的生成通常涉及对像素的精确控制,通过画布(Canvas)类或者组件(Component)类来实现。 ...

    scratch绘制太极图

    详细讲解用scratch绘制太极图,主要要点是绘制实心半圆。

    旋转太极图

    flash as3.0 旋转太极图

    C语言画图之画个太极图

    呵呵昨天花了一个圆,想画个太极图,我知道没啥技术含量,但是挺有意思的,希望各位看官不要鄙视我不务正业,画完此图,不再做这些事情。  先展示下画出来的图像的情况,因为不支持pgm格式的图像,所以我用的 QQ...

    太极图 psd

    太极图psd,可以依照这个来用PS坐一个太极图。可以依照这个来用PS坐一个太极图。

Global site tag (gtag.js) - Google Analytics