问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 用鼠标点击屏幕随意三个点 画一个三角形 并求出小三角形的周长和...

发布网友 发布时间:2024-10-21 20:07

我来回答

2个回答

热心网友 时间:2024-11-09 16:36

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class DrawTriangle extends JFrame {
JLabel jl;
public DrawTriangle() {
DrawPanel dp = new DrawPanel();
dp.addMouseListener(dp);
add(dp);
jl = new JLabel("\t");
jl.setBorder(BorderFactory.createTitledBorder("计算结果"));// 设置jl的边框
add(jl, BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(300, 200, 500, 500);
setResizable(false);
setTitle("画图 三角形");
setVisible(true);
}
public static void main(String[] args) {
new DrawTriangle();// 实例化窗口
}
class DrawPanel extends JPanel implements MouseListener {
ArrayList<Point> list = new ArrayList<Point>();// 保存点
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// Graphics2D对象才可使用此语句消除锯齿
if (list.size() == 1) {// 1个点的时候画点
g2d.setColor(Color.BLACK);
g2d.drawLine(list.get(0).x, list.get(0).y, list.get(0).x, list.get(0).y);
jl.setText("\t");
}
if (list.size() == 2) {// 2个点的时候画线
g2d.setColor(Color.BLUE);
g2d.drawLine(list.get(0).x, list.get(0).y, list.get(1).x, list.get(1).y);
}
if (list.size() == 3) {// 3个点的时候画三角形
g2d.setColor(Color.RED);
// 可以直接画三条线,我使用了画多边形的办法
int[] xPoints = { list.get(0).x, list.get(1).x, list.get(2).x };
int[] yPoints = { list.get(0).y, list.get(1).y, list.get(2).y };
g2d.drawPolygon(xPoints, yPoints, 3);// x坐标数组,y坐标数组,连线数

double x1 = xPoints[0], y1 = yPoints[0], x2 = xPoints[1], y2 = yPoints[1], x3 = xPoints[2],
y3 = yPoints[2];
// 下面是根据海伦公式求三角形的面积
double s1 = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
double s2 = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
double s3 = Math.sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
double p = (s1 + s2 + s3) / 2;
double a = Math.sqrt(p * (p - s1) * (p - s2) * (p - s3));
jl.setText("[取整后的结果]   周长" + Math.round(p * 2) + "  面积:" + Math.round(a));
list.clear();// 清空保存点的集合
}
}
public void mouseClicked(MouseEvent e) {
Point p = new Point(e.getX(), e.getY());
list.add(p);// 点击之后得到点的坐标,并保存到集合
repaint();// 点击后进行重绘
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
}

热心网友 时间:2024-11-09 16:38

public class Test{
static int width = 500,height = 300;
static int x1,x2,x3,y1,y2,y3,count=0;
static int length = 1;
static int xl,yl;
static BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
static Graphics2D g = image.createGraphics(); 
static JLabel jl;
public static void main(String[] args) {
JFrame jf = new JFrame("三角形");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭时的操作 退出程序
jf.setSize(width, height);
jf.setLocation(0, 0);
jf.setLayout(new BorderLayout());
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//消除锯齿
g.setBackground(Color.white);
g.fillRect(0, 0, width, height);
g.setColor(Color.red);
 jl= new JLabel(new ImageIcon(image));
jf.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(count==0){

g.clearRect(0, 0, width, height);
x1=e.getX()-xl;
y1=e.getY()-yl;
g.drawOval(x1, y1, length, length);
jl.setIcon(new ImageIcon(image));
jl.validate();
}else if(count==1){
x2=e.getX()-xl;
y2=e.getY()-yl;
if(x2==x1&&y2==y1){
return;
}
g.drawOval(x1, y1, length, length);
g.drawOval(x2, y2, length, length);
g.drawLine(x1, y1, x2, y2);
jl.setIcon(new ImageIcon(image));
jl.validate();
}else if(count==2){
x3=e.getX()-xl;
y3=e.getY()-yl;
if((x3==x1&&y3==y1)||(x3==x2&&y3==y2)){
return;
}
g.drawOval(x1, y1, length, length);
g.drawOval(x2, y2, length, length);
g.drawOval(x3, y3, length, length);
g.drawLine(x1, y1, x2, y2);
g.drawLine(x3, y3, x2, y2);
g.drawLine(x3, y3, x1, y1);
jl.setIcon(new ImageIcon(image));
jl.validate();
count=0;
getArea(x1, y1, x2, y2, x3, y3);
return;
}else{
return;
}

count++;
}
});


jf.add(jl);
jf.pack();
xl=jf.getInsets().left;
yl=jf.getInsets().top;
jf.setVisible(true);
}
public static float getArea(int x1,int y1,int x2,int y2,int x3,int y3 ){
float result=0;
double a = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double b = Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
double c = Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
double p = (a+b+c)/2;
result = (float) Math.sqrt(p*(p-a)*(p-b)*(p-c));
System.out.println("三角形的面积为:"+result);
System.out.println("三角形的周长为:"+(float)p*2);
JOptionPane.showMessageDialog(null, "三角形的面积为:"+result+"  周长为:"+(float)p*2);
return result;
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
13岁一直到18岁晚上经常熬夜会有什么影响 具象表现素描内容简介 ...| 从14世纪文艺复兴到20世纪具象表现绘画 · 168幅画 · 图解西方... 【漫画赏析】比喻具象化——《孤高之人》手法分析 具象美术作品有哪些 具象艺术艺术家介绍 话说 曾经有个演唱会 是初音未来演唱会 39祭 谁知道微信聊天记录删掉了,还能恢复过来吗?有什么软件可以恢复吗?不... 六爻。测缘分。测婚姻 礼仪起源于祭祀的证据是什么? 为什么我总是写不好议论文? 内网穿透——公网访问内网 内网穿透是 如何在C#界面中画线条; 比如:在一段文字下画一条线。 C#中的drawItemState枚举,详解一下,百度竟然查不到 C#drawline函数问题 怎么用c#输出空心的长方形.三角形 废料回收属于什么行业 湖南省中小学校学生人身伤害事故预防与处理条例第五章 附则 什么积分可以换迅雷会员 湖南省中小学校学生人身伤害事故预防与处理条例第二章 学生人身伤害事 ... 什么可以兑换迅雷会员 湖南省中小学校学生人身伤害事故预防与处理条例第一章 总则 上海到庐江的火车停运了吗?本来打算端午节回去的,可是到合肥的买到 请问从安徽庐江去上海的火车是几点? 从王府井到中华民族园怎么去 奥运公交专线K1~K7 日本人在学校读书时都要学古汉语吗? 古汉语的学习日本人是怎样掌握的 日本人是如何阅读古汉语的? GMS2学习笔记 10 Draw基本图形操作 GDI+中drawtriangle函数在哪个头文件中 ...我喜欢的动物》《我对卡的体验》 每篇作文300字左右 悬赏50分_百 ... banner maker制作完怎么传到旺铺 BannerMaker,如何将大图上传是去?拜托各位了 3Q 思情,淡情,冷情,忘情,无情,绝情 按排名怎么分 最无情最绝情最狠心的是什么人? 想知道《无节操摄影部》里的成员给同学们服务时是当一还是零?_百度知 ... 爱心木门公司背景 木门安装安装辛苦吗 动漫链接 C# drawline()画线问题 c#从一个控件追加一条线到另一个控件 怎么用c#画坐标曲线,求大神 ...连上下楼都使不上劲了,腿不能弯曲,弯曲了就用不上劲!是什么... 共享单车骑完膝盖疼是怎么回事呢? 从大红大紫到鲜有身影,六夺影后的丁嘉丽到底有多惨? redearth唇膏怎么样?红地球唇膏好用吗? 初中数学利润问题的通常解法 卖报纸求最大利润的问题?