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上机练习题主要考察的是Java编程基础以及Swing图形用户界面(GUI)设计。此题目的重点在于理解和运用事件监听、图形操作以及Swing组件的使用。 1. **事件监听**: - Java中的`ActionListener`...
此外,书中可能还会涵盖动画和交互性,讲解如何通过键盘、鼠标或游戏控制器输入来响应用户操作,以及如何实现时间依赖的图形变化。这在创建动态场景和游戏时尤其重要。 在Java方面,读者会学习如何集成Java AWT和...
对于学习Java编程的学生来说,使用Java Swing构建小型游戏如FlappyBird,是提升技能、理解面向对象编程以及图形用户界面(GUI)设计的绝佳实践。本文将围绕“基于Java Swing实现的FlappyBird游戏”这一主题,详细...
总之,“使用Java+Swing写的一个贪吃蛇小游戏”不仅是一个有趣的编程练习,也是学习和巩固Java基础、Swing应用的实用案例。它鼓励开发者动手实践,将理论知识转化为实际技能,进一步提升编程能力。
在本项目中,"Java小程序---弹球游戏"是一个适合初学者练习的编程项目,它主要涉及了Java语言的基础知识,以及如何利用Java实现简单的游戏逻辑。以下将详细阐述这个项目可能涵盖的关键知识点: 1. **Java基础知识**...
在描述中提到的“java毕设”表明这个项目可能是一个Java图形用户界面(GUI)的编程练习,学生通过此项目可以学习到如何在Java环境中创建窗口、添加控件、处理用户输入、以及使用图形API进行图形绘制。在Java图形学中...
总之,"U10316011_taAssign2_normal"项目是一个综合性的Java GUI编程练习,涵盖了用户交互、数学计算、异常处理等多个关键概念。通过完成这个项目,学生不仅可以熟悉Java Swing的基本用法,还能增强对几何问题解决的...
在本项目中,"使用Java Swing创建飞机大战小游戏.zip" 提供了一个使用Java编程语言开发的桌面游戏——飞机大战的源代码。Java Swing是Java AWT(Abstract Window Toolkit)库的一部分,它提供了一组轻量级组件,用于...
Java图形化编程基础是Java SE(标准版)平台的一部分,主要通过Java的AWT(Abstract Window Toolkit)和Swing库来实现。在这个场景中,我们关注的是如何利用这些库来创建一个静态的时钟钟面。这个项目的目标是展示...
在2D图形方面,Java提供了丰富的API,如Java AWT(Abstract Window Toolkit)和Swing,这两个库允许开发者创建用户界面,绘制几何形状,以及处理事件。例如,你可以使用Graphics类的drawRect()方法画出一个矩形,...
Java GUI(图形用户界面)是一种使用Java编程语言创建交互式图形界面的方法。在Java中,我们可以使用Swing或JavaFX库来构建GUI应用程序。本项目"Java-GUI生命球"是一个基于Java Swing实现的有趣程序,它展示了生命...
此外,还有`java.awt.geom`用于2D几何图形,`java.awt.image`处理图像,以及`java.awt.print`支持打印功能等。 在AWT中,`Component`类是所有可视组件的父类,包括按钮(Button)、画布(Canvas)、复选框...
Java语言实现的俄罗斯方块是一款经典的编程练习项目,它展示了游戏设计、图形用户界面(GUI)编程以及事件处理等核心编程概念。以下是基于这个“java俄罗斯方块源码”涉及的一些重要知识点: 1. **Java基础**:首先...
总的来说,"Java 编写的小型画板"是一个典型的Java GUI编程实例,它涵盖了Swing组件的使用、事件处理、图形绘制以及文件操作等多个知识点。对于学习Java GUI编程的初学者而言,这个项目提供了一个很好的实践平台,...
Java3D编程指南是一本专为开发者准备的深入学习Java三维图形编程的资源。通过英文版的书籍,读者可以了解到如何利用Java3D API来创建复杂的3D场景和交互式应用。Java3D是Sun Microsystems开发的一个开源库,它提供了...
通过这个项目,开发者不仅可以练习Java GUI编程,还能深入理解事件处理、几何计算和设计模式等多方面的知识。同时,这样的程序对于初学者来说,是很好的实践和学习工具,有助于提升对Java图形界面编程的理解。
《Java逐步实现俄罗斯方块》 在编程世界中,经典的俄罗斯方块游戏是学习和实践编程技巧的一个绝佳案例。...总的来说,"Java逐步实现俄罗斯方块"是一个极好的实战练习,能够全方位地锻炼和提高编程能力。
Java程序设计实验报告的核心是构建一个弹球游戏,这个游戏旨在教授和练习Java的图形用户界面(GUI)编程、事件处理、多线程编程以及简单的物理模拟。以下是关键知识点的详细说明: 1. **Swing图形用户界面编程**: ...
这个项目对于初学者来说是一个很好的练习,因为它涵盖了基本的Swing组件使用、事件处理以及图形绘制。 总结,"java画板demo"是一个基于Java Swing的简单应用程序,它使用了`Graphics2D`和鼠标事件处理来实现用户...