`

swing编程练习----操作几何图形

 
阅读更多
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;

public class TypeGame extends JFrame{
	public TypeGame(){
		initComponent();
	}
	private void initComponent(){
		//居中显示
		Toolkit kit = Toolkit.getDefaultToolkit();
		int windowWidth   = kit.getScreenSize().width;
		int windowHeight  = kit.getScreenSize().height;
		setBounds((windowWidth-fameWidth)/2,(windowHeight-fameHeight)/2,fameWidth,fameHeight);
		
		add(new MyCanvas());
	}
	private class MyCanvas extends JComponent{
		public MyCanvas(){
			addMouseListener(new MouseHandler());
			addMouseMotionListener(new MouseMotionHandler());
			list = new ArrayList<Rectangle2D>();
		}
		public void paintComponent(Graphics g){
			Graphics2D g2 = (Graphics2D)g;
			for(Rectangle2D rect : list){
				g2.draw(rect);
			}
		}
		public void add(Rectangle2D rect){
			list.add(rect);
			repaint();
		}
		public void remove(Rectangle2D rect){
			if(rect==null) return;
			list.remove(rect);
			repaint();
		}
		public Rectangle2D find(Point point){
			for(Rectangle2D rect : list){
				if(rect.contains(point)){
					return rect;
				}
			}
			return null;
		}

		private class MouseHandler extends MouseAdapter{
			private Point start;

			public void mousePressed(MouseEvent evt){
				this.start = (find(evt.getPoint()) == null)?evt.getPoint():null;
			}
			public void mouseReleased(MouseEvent evt){
				if(start == null||start.equals(evt.getPoint())) return;
				Rectangle2D rect = new Rectangle2D.Float((float)(start.getX()<evt.getX()?start.getX():evt.getX()),(float)(start.getY()<evt.getY()?start.getY():evt.getY()),(float)Math.abs(evt.getX()-start.getX()),(float)Math.abs(evt.getY()-start.getY()));
				add(rect);
			}
			public void mouseClicked(MouseEvent evt){
				if(evt.getClickCount()>=2){
					setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
					Rectangle2D rect = find(evt.getPoint());
					if(rect!=null){
						remove(rect);
						setCursor(Cursor.getDefaultCursor());
						return;
					}
				}
			}
		}
		private class MouseMotionHandler extends MouseMotionAdapter{
			private Rectangle2D rect = null;
			private Point currentPoint = null;

			public void mouseMoved(MouseEvent evt){
				Rectangle2D rectTemp = find(evt.getPoint());
				if(rectTemp!=null){
					rect = rectTemp;
					currentPoint = evt.getPoint();
					setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
				}else{
					rect = null;
					currentPoint = null;
					setCursor(Cursor.getDefaultCursor());
				}
			}
			public void mouseDragged(MouseEvent evt){
				if(rect!=null){
					Point point = evt.getPoint();
					double x = currentPoint.getX()-point.getX();
					double y = currentPoint.getY()-point.getY();
					Rectangle2D rectAdd = new Rectangle.Double(rect.getX()-x,rect.getY()-y,rect.getWidth(),rect.getHeight());
					remove(rect);
					add(rectAdd);
					rect = rectAdd;
					currentPoint = evt.getPoint();
				}
			}
		}
	}
	public static void main(String[] args){
		EventQueue.invokeLater(new Runnable(){
			public void run(){
				TypeGame game = new TypeGame();
				game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				game.setVisible(true);
				//初始化感官
				UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
				try{
					UIManager.setLookAndFeel(infos[1].getClassName());
				}catch(Exception e){
					e.printStackTrace();
				}
					SwingUtilities.updateComponentTreeUI(game);
				}
		});
	}
	private int fameWidth  = 500;
	private int fameHeight = 400;
	private java.util.List<Rectangle2D> list = null;
}
分享到:
评论

相关推荐

    全国计算机二级java上机练习题.pdf

    全国计算机二级Java上机练习题主要考察的是Java编程基础以及Swing图形用户界面(GUI)设计。此题目的重点在于理解和运用事件监听、图形操作以及Swing组件的使用。 1. **事件监听**: - Java中的`ActionListener`...

    introduction-computer-graphics-3rd(英)2023计算机图形学-基于opengl 和java

    此外,书中可能还会涵盖动画和交互性,讲解如何通过键盘、鼠标或游戏控制器输入来响应用户操作,以及如何实现时间依赖的图形变化。这在创建动态场景和游戏时尤其重要。 在Java方面,读者会学习如何集成Java AWT和...

    小游戏:基于Java Swing实现的FlappyBird游戏.zip

    对于学习Java编程的学生来说,使用Java Swing构建小型游戏如FlappyBird,是提升技能、理解面向对象编程以及图形用户界面(GUI)设计的绝佳实践。本文将围绕“基于Java Swing实现的FlappyBird游戏”这一主题,详细...

    使用java+Swing写的一个贪吃蛇小游戏.zip

    总之,“使用Java+Swing写的一个贪吃蛇小游戏”不仅是一个有趣的编程练习,也是学习和巩固Java基础、Swing应用的实用案例。它鼓励开发者动手实践,将理论知识转化为实际技能,进一步提升编程能力。

    Java小程序---弹球游戏

    在本项目中,"Java小程序---弹球游戏"是一个适合初学者练习的编程项目,它主要涉及了Java语言的基础知识,以及如何利用Java实现简单的游戏逻辑。以下将详细阐述这个项目可能涵盖的关键知识点: 1. **Java基础知识**...

    java图形学画图程序.zip

    在描述中提到的“java毕设”表明这个项目可能是一个Java图形用户界面(GUI)的编程练习,学生通过此项目可以学习到如何在Java环境中创建窗口、添加控件、处理用户输入、以及使用图形API进行图形绘制。在Java图形学中...

    U10316011_taAssign2_normal:使用 GUI 获取三个几何图形的面积和周长

    总之,"U10316011_taAssign2_normal"项目是一个综合性的Java GUI编程练习,涵盖了用户交互、数学计算、异常处理等多个关键概念。通过完成这个项目,学生不仅可以熟悉Java Swing的基本用法,还能增强对几何问题解决的...

    使用Java Swing创建飞机大战小游戏.zip

    在本项目中,"使用Java Swing创建飞机大战小游戏.zip" 提供了一个使用Java编程语言开发的桌面游戏——飞机大战的源代码。Java Swing是Java AWT(Abstract Window Toolkit)库的一部分,它提供了一组轻量级组件,用于...

    java图形化编程基础,用java编写时钟钟面

    Java图形化编程基础是Java SE(标准版)平台的一部分,主要通过Java的AWT(Abstract Window Toolkit)和Swing库来实现。在这个场景中,我们关注的是如何利用这些库来创建一个静态的时钟钟面。这个项目的目标是展示...

    计算机图形学:应用java 2D和3D

    在2D图形方面,Java提供了丰富的API,如Java AWT(Abstract Window Toolkit)和Swing,这两个库允许开发者创建用户界面,绘制几何形状,以及处理事件。例如,你可以使用Graphics类的drawRect()方法画出一个矩形,...

    Java-GUI生命球

    Java GUI(图形用户界面)是一种使用Java编程语言创建交互式图形界面的方法。在Java中,我们可以使用Swing或JavaFX库来构建GUI应用程序。本项目"Java-GUI生命球"是一个基于Java Swing实现的有趣程序,它展示了生命...

    Java图形用户界面

    此外,还有`java.awt.geom`用于2D几何图形,`java.awt.image`处理图像,以及`java.awt.print`支持打印功能等。 在AWT中,`Component`类是所有可视组件的父类,包括按钮(Button)、画布(Canvas)、复选框...

    java俄罗斯方块源码

    Java语言实现的俄罗斯方块是一款经典的编程练习项目,它展示了游戏设计、图形用户界面(GUI)编程以及事件处理等核心编程概念。以下是基于这个“java俄罗斯方块源码”涉及的一些重要知识点: 1. **Java基础**:首先...

    Java 编写的小型画板

    总的来说,"Java 编写的小型画板"是一个典型的Java GUI编程实例,它涵盖了Swing组件的使用、事件处理、图形绘制以及文件操作等多个知识点。对于学习Java GUI编程的初学者而言,这个项目提供了一个很好的实践平台,...

    java3d编程指南

    Java3D编程指南是一本专为开发者准备的深入学习Java三维图形编程的资源。通过英文版的书籍,读者可以了解到如何利用Java3D API来创建复杂的3D场景和交互式应用。Java3D是Sun Microsystems开发的一个开源库,它提供了...

    Java画圆,可根据滚动条变化

    通过这个项目,开发者不仅可以练习Java GUI编程,还能深入理解事件处理、几何计算和设计模式等多方面的知识。同时,这样的程序对于初学者来说,是很好的实践和学习工具,有助于提升对Java图形界面编程的理解。

    Java逐步实现俄罗斯方块

    《Java逐步实现俄罗斯方块》 在编程世界中,经典的俄罗斯方块游戏是学习和实践编程技巧的一个绝佳案例。...总的来说,"Java逐步实现俄罗斯方块"是一个极好的实战练习,能够全方位地锻炼和提高编程能力。

    Java程序设计实验报告2(弹球游戏)[1]1.pdf

    Java程序设计实验报告的核心是构建一个弹球游戏,这个游戏旨在教授和练习Java的图形用户界面(GUI)编程、事件处理、多线程编程以及简单的物理模拟。以下是关键知识点的详细说明: 1. **Swing图形用户界面编程**: ...

    java画板demo

    这个项目对于初学者来说是一个很好的练习,因为它涵盖了基本的Swing组件使用、事件处理以及图形绘制。 总结,"java画板demo"是一个基于Java Swing的简单应用程序,它使用了`Graphics2D`和鼠标事件处理来实现用户...

Global site tag (gtag.js) - Google Analytics