package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class ToolBarListener extends MouseAdapter implements ActionListener,MouseMotionListener
{
private JPanel paintPanel=null;
private static int paintFlag=-1;
private double x1,y1,x2,y2;
private double newX1,newY1,newX2,newY2;
private Shape shape;
public ToolBarListener(JPanel panel)
{
this.paintPanel=panel;
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("直线"))
{
paintFlag=1;
}
else if(e.getActionCommand().equals("椭圆"))
{
paintFlag=2;
}
else if(e.getActionCommand().equals("矩形"))
{
paintFlag=3;
}
}
public void mousePressed(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
}
public void mouseDragged(MouseEvent e)
{
x2=e.getX();
y2=e.getY();
if(paintFlag==1)
{
shape=new Line2D.Double(x1,y1,x2,y2);
}
else if(paintFlag==2)
{
coordinateChange();
shape=new Ellipse2D.Double(newX1,newY1,newX2-newX1,newY2-newY1);
}
else if(paintFlag==3)
{
coordinateChange();
shape=new Rectangle2D.Double(newX1,newY1,newX2-newX1,newY2-newY1);
}
((PaintPanel)paintPanel).setShape(shape);
((PaintPanel)paintPanel).repaint();
}
public void mouseMoved(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
((PaintPanel)paintPanel).addShape(shape);
((PaintPanel)paintPanel).repaint();
}
private void coordinateChange()
{
if((x1<x2) && (y1<y2))
{
newX1=x1;newY1=y1;
newX2=x2;newY2=y2;
}
if((x1<x2) && (y1>y2))
{
newX1=x1;newY1=y2;
newX2=x2;newY2=y1;
}
else if((x1>x2) && (y1>y2))
{
newX1=x2;newY1=y2;
newX2=x1;newY2=y1;
}
else if((x1>x2) && (y1<y2))
{
newX1=x2;newY1=y1;
newX2=x1;newY2=y2;
}
}
}
package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import java.awt.geom.*;
public class PaintPanel extends JPanel
{
private Vector paints=null;
private Shape shape=null;
public PaintPanel()
{
paints=new Vector();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;
for(int i=0;i<paints.size();i++)
{
g2d.draw((Shape)paints.get(i));
}
if(shape!=null)
{
g2d.draw(shape);
}
}
public void addShape(Shape shape)
{
paints.add(shape);
}
public void setShape(Shape shape)
{
this.shape=shape;
}
}
package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyPaint extends JFrame
{
private ToolBarListener toolBarListener=null;
private JPanel paintPanel=null;
public MyPaint(String title)
{
this.setTitle(title);
Container container=this.getContentPane();
paintPanel=new PaintPanel();
toolBarListener=new ToolBarListener(paintPanel);
paintPanel.addMouseListener(toolBarListener);
paintPanel.addMouseMotionListener(toolBarListener);
container.setLayout(new BorderLayout());
container.add(createToolBar(),BorderLayout.NORTH);
container.add(paintPanel,BorderLayout.CENTER);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setSize(600,400);
this.setVisible(true);
}
private JToolBar createToolBar()
{
String[] paintTitle={"直线","椭圆","矩形"};
JToolBar toolBar=new JToolBar();
JButton button=null;
for(int i=0;i<paintTitle.length;i++)
{
button=new JButton(paintTitle[i]);
button.addActionListener(toolBarListener);
toolBar.add(button);
}
toolBar.setVisible(true);
return toolBar;
}
public static void main(String[] args)
{
MyPaint note=new MyPaint("Java画图");
}
}
分享到:
相关推荐
在Java编程语言中,我们可以利用Java AWT(Abstract Window Toolkit)和Swing库来创建一个基本的画板,实现画矩形、椭圆和直线的功能。这些组件为开发者提供了丰富的图形用户界面(GUI)功能,使得创建具有绘图能力...
在本文中,我们将深入探讨如何使用Java编程语言创建一个简单的画图工具,该工具能够根据用户的选项绘制至少三种基本图形:直线、椭圆和矩形。这个任务涉及到图形用户界面(GUI)的设计、事件处理以及Java图形库的...
本程序主要运用java2D提供的强大画图功能,来画直线、椭圆、矩形。首先,是在工具栏中选择要绘制的图形,然后通过鼠标的拖拽来完成图形的绘制。 真实感图形学是计算机图形的核心内容之一,是最能直接反映图形学魅力...
在本Java实验中,我们将构建一个简易的图形绘制工具,允许用户选择绘制直线、椭圆或矩形。这个实验的核心是利用Java的图形用户界面(GUI)库,特别是`java.awt`和`javax.swing`包,来创建交互式的窗口应用程序。 ...
Java图形学还涉及到其他高级主题,比如图形变换(旋转、缩放、平移)、图形填充、颜色混合以及更复杂的图形对象绘制,如圆、椭圆、多边形等。对于图形学的深入学习,可以探索Java的Graphics2D API,它提供了更多的...
本程序主要运用java2D提供的强大画图功能,来画直线、椭圆、矩形。首先,是在工具栏中选择要绘制的图形,然后通过鼠标的拖拽来完成图形的绘制。 真实感图形学是计算机图形的核心内容之一,是最能直接反映图形学魅力...
总结来说,"java画线程序"这个主题涵盖了Java图形编程的基础知识,包括使用`Graphics`类及其方法来绘制直线、矩形和圆。通过`huaxian`和`huaxian2`这两个源代码文件,我们可以学习到不同的实现方式和技巧,进一步...
这个主题的源代码库提供了实现多种图形功能的实例,包括直线、圆形、椭圆、区域填充、二维几何变换、曲线以及交互式界面。下面我们将深入探讨这些知识点。 1. **直线绘制**: 在计算机图形学中,直线是最基本的...
用于画图,采用GUI图形界面,可以画出直线,矩形和椭圆,采用事件处理,所画图形有鼠标控制,图形可以被填充指定的颜色,也可以是边框,图形的颜色和形状都可以有用户指定,在frame的下方,还可以显示鼠标的具体位置
本文将深入探讨“能画直线矩形圆角矩形圆椭圆弧图形的简单程序”这一主题,它涉及到计算机图形学的基础知识,以及如何利用编程语言实现这些功能。 首先,这个程序的核心功能是图形绘制。在计算机上实现图形绘制,...
本项目将向你展示如何使用C#实现画圆、画椭圆、3点圆弧、直线以及虚线,并将这些功能集成到一个测试项目中。通过这个项目,你可以学习到如何利用Windows Forms或WPF的图形API来创建动态和交互式的图形。 首先,我们...
在Java编程语言中,设计一个可以根据鼠标拖曳来画直线、矩形和圆的画图程序,涉及到的主要知识点包括Java图形用户界面(GUI)的构建、事件处理以及几何形状的绘制。下面将详细阐述这些核心内容。 1. Java GUI基础:...
综上所述,这个项目通过Java编程语言,结合经典算法,实现了在可视化界面上动态绘制直线、圆形和椭圆的功能。这不仅锻炼了编程技巧,也对计算机图形学的基本原理进行了实践应用。对于学习Java图形界面开发和理解图形...
该函数给出直线和椭圆的交点。 给定长轴(a),次轴(b), 椭圆的中心 (O(h,k)) 和位于直线上的两个点 (A(x1,y1), B(x2,y2))。 这个函数给出两点交点 C1 和 C2。 如果直线和椭圆不相交,则相交点返回 NaN。 a = ...
除了椭圆之外,还可以绘制直线、曲线、多边形等图形,以及使用颜色、字体和图像等元素。 7. **实际应用** 这些图形绘制技术在许多领域都有应用,如教育软件(用于演示几何形状)、游戏开发(创建游戏对象)、数据...
总结一下,这个图形学基础课程设计涵盖了基本的图形绘制算法,包括直线、圆和椭圆的绘制,以及多边形的填充。这些都是图形学的基础,对于理解和实现更复杂的图形算法至关重要。通过Java Swing,这些算法得以在用户...
本篇文章将深入探讨如何使用Java实现画板功能,并通过代码示例来展示如何画出简单的几何图形。 首先,我们需要了解`java.awt.Graphics`类,它是Java AWT的核心绘图类。这个类提供了一系列的方法,如`drawLine()`, `...
2.利用这个画图程序,通过选择画直线、画圆形、画矩形等功能选项并且在屏幕上拖动鼠标操作能实现画出相应图形的功能; 3.这个画图程序,还应该做到能够改变画笔颜色的功能; 4.这个画图程序,还应该具备能够清除已...
- **圆形与椭圆**:用户可以绘制完美的圆形或椭圆形,这可能通过指定中心点和半径(或长轴和短轴)来实现。 3. **对象选择与编辑**: 一旦图形被绘制,用户可以选择它们进行进一步操作。这通常通过单击或框选图形...