java实现多边形按钮_用java基础实现绘制点自动连接成线、三角形、多边形

本文介绍了一种用Java实现的图形绘制方法,包括点击鼠标绘制点、线、三角形和多边形,并能保留之前的所有图形。通过监听鼠标事件,根据选择的模式动态画出不同形状,并在鼠标右键点击时完成多边形闭合。
摘要由CSDN通过智能技术生成

点(point): 在画板上显示所有鼠标点击的点。所有之前画过的图形都保留(包括点,线,三角形,多边形)

线(line): 点两个点,当第二个点点完后自动连接第一个点,且每点击一个点均要显示出来;之后可以继续两点画线。所有之前画过的图形都保留(包括点,线,三角形,多边形)

三角形(triangle):同“线”,三个点均要显示出来,第三个点点完后自动连接所有线。所有之前画过的图形都保留(包括点,线,三角形,多边形)

多边形(polygon):任意点几个点,当鼠标右键没有被点击之前,同“点”,当右键被点击后,自动连接之前所有的点。所有之前画过的图形都保留(包括点,线,三角形,多边形)

开始的想法就是画点自动绘制图形咯。应该也是老师的思路。于是就不废话:

1.项目结构和名称:

0818b9ca8b590ca3270a3433284dd417.png简单的一目了然吧。

2.各个文件的代码:

ControlPanel.java

package Assignment1;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.Point;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.ArrayList;

import java.util.List;

import javax.swing.ButtonGroup;

import javax.swing.JPanel;

import javax.swing.JRadioButton;

import Assignment1.GraphicPanel;

import Assignment1.GraphicsFrame;

public class ControlPanel extends JPanel {

/**

*

*/

private static final long serialVersionUID = 1L;

public GraphicsFrame gf;

public GraphicPanel gp;

public ControlPanel(GraphicsFrame _gf) {

super();

gf = _gf;

gp = gf.gp;

ButtonGroup bg = new ButtonGroup();

final JRadioButton pointsButton = new JRadioButton("Points", false);

final JRadioButton linesButton = new JRadioButton("Lines", false);

final JRadioButton trianglesButton = new JRadioButton("Triangles", false);

final JRadioButton polygonsButton = new JRadioButton("Polygons", false);

bg.add(pointsButton);

bg.add(linesButton);

bg.add(trianglesButton);

bg.add(polygonsButton);

setLayout(new GridLayout(20, 1, 2, 2));

add(pointsButton);

add(linesButton);

add(trianglesButton);

add(polygonsButton);

gp.addMouseListener(new MouseListener() {

List li = new ArrayList();

List tri = new ArrayList();

List pol = new ArrayList();

Graphics g;

@Override

public void mouseClicked(MouseEvent e) {

if (pointsButton.isSelected()) {

int x, y;

x = e.getX();

y = e.getY();

Graphics g = gf.getGraphics();

g.setColor(Color.red);

g.fillOval(x+7, y+30, 2, 2);

} else if (linesButton.isSelected()) {

Point p1 = new Point();

Point p2 = new Point();

li.add(e.getPoint());

if (li.size() % 2 == 0) {

g = gf.getGraphics();

g.setColor(Color.red);

p1 = li.get(0);

p2 = li.get(1);

g.fillOval(e.getX()+7, e.getY()+30, 2, 2);

g.drawLine(p1.x+7, p1.y+30, p2.x+7, p2.y+30);

repaint();

li.clear();

} else {

g = gf.getGraphics();

g.setColor(Color.red);

g.fillOval(e.getX()+7, e.getY()+30, 2, 2);

}

} else if (trianglesButton.isSelected()) {

Point pt1 = new Point();

Point pt2 = new Point();

Point pt3 = new Point();

tri.add(e.getPoint());

if (tri.size() % 3 == 0) {

g = gf.getGraphics();

g.setColor(Color.red);

pt1 = tri.get(0);

pt2 = tri.get(1);

pt3 = tri.get(2);

g.fillOval(e.getX()+7, e.getY()+30, 2, 2);

g.drawLine(pt1.x+7, pt1.y+30, pt2.x+7, pt2.y+30);

g.drawLine(pt2.x+7, pt2.y+30, pt3.x+7, pt3.y+30);

g.drawLine(pt3.x+7, pt3.y+30, pt1.x+7, pt1.y+30);

repaint();;

tri.clear();

} else {

g = gf.getGraphics();

g.setColor(Color.red);

g.fillOval(e.getX()+7, e.getY()+30, 2, 2);

}

} else if (polygonsButton.isSelected()) {

pol.add(e.getPoint());

g = gf.getGraphics();

g.setColor(Color.red);

g.fillOval(e.getX()+7, e.getY()+30, 2, 2);

if (e.isMetaDown()) {

g = gf.getGraphics();

g.setColor(Color.red);

for (int i = 0; i < pol.size() - 1; i++) {

Point po1 = pol.get(i);

Point po2 = pol.get(i + 1);

g.drawLine(po1.x+7, po1.y+30, po2.x+7, po2.y+30);

}

g.drawLine(pol.get(0).x+7, pol.get(0).y+30, pol.get(pol.size() - 1).x+7, pol.get(pol.size() - 1).y+30);

pol.clear();

}

}

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mousePressed(MouseEvent e) {

}

@Override

public void mouseExited(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

});

}

}

GraphicPanel.java

package Assignment1;

import java.awt.Color;

import javax.swing.JPanel;

import Assignment1.GraphicsFrame;

public class GraphicPanel extends JPanel{

/**

*

*/

private static final long serialVersionUID = 1L;

public GraphicsFrame gf;

public GraphicPanel (GraphicsFrame _gf)

{

super();

gf = _gf;

this.setBackground(Color.white);

}

}

GraphicsFrame.java

package Assignment1;

import java.awt.BorderLayout;

import javax.swing.JFrame;

import Assignment1.ControlPanel;

import Assignment1.GraphicPanel;

public class GraphicsFrame extends JFrame{

/**

*

*/

private static final long serialVersionUID = 1L;

public GraphicPanel gp;

public ControlPanel cp;

public GraphicsFrame (int height, int width)

{

setTitle("Basic Graphics Frame");

setSize(width, height);

setLocationRelativeTo(null);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(new BorderLayout(5, 5));

gp = new GraphicPanel(this);

this.add(gp, BorderLayout.CENTER);

cp = new ControlPanel(this);

this.add(cp, BorderLayout.EAST);

setVisible(true);

}

public static void main (String[] args)

{

GraphicsFrame gf = new GraphicsFrame(512, 768);

}

}

3.效果图:

0818b9ca8b590ca3270a3433284dd417.png

点、线、三角形、多边形。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值