绘制n边形:用两个以上的控件来控制矩形的颜色、大小、位置及空实心。(n由键盘输入)

package lzy.di9zhang;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Shiyan4 extends JFrame implements ActionListener, FocusListener {
private JLabel jl;
private JTextField jtf;
private JButton jb;
private JPanel jp2;
private MyPanel mp;

public Shiyan4() {
jl = new JLabel("请输入正多边形的边数:");
jtf = new JTextField(10);
jtf.addFocusListener(this);
jb = new JButton("确定");
jb.addActionListener(this);
mp = new MyPanel();
jp2 = new JPanel();
jp2.add(jl);
jp2.add(jtf);
jp2.add(jb);
this.add(mp);
this.add(jp2, BorderLayout.SOUTH);
this.setSize(500, 500);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args) {
Shiyan4 shiyan4 = new Shiyan4();
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jb) {
String bianshu = jtf.getText();
mp.bianshu = Integer.parseInt(bianshu);
mp.repaint();
}
}

@Override
public void focusGained(FocusEvent e) {
if (e.getSource() == jtf) {
jtf.setText("");
}
}

public void focusLost(FocusEvent e) {
}
}

class MyPanel extends JPanel {
int bianshu;
private int bianshuMax = 20;
private int[] x = new int[bianshuMax];
private int[] y = new int[bianshuMax];
MyPolygon mplg = new MyPolygon(x, y);

public void paint(Graphics g) {
g.clearRect(0, 0, this.getWidth(), this.getHeight());//因为repaint不调用update,所以自己清空面板
if (bianshu <= bianshuMax) {
mplg.posOfPoint(bianshu);
g.drawPolygon(x, y, bianshu);
} else {
bianshuMax += 20;
x = new int[bianshuMax];
y = new int[bianshuMax];
mplg = new MyPolygon(x, y);
paint(g);
}
}
}

class MyPolygon {// 求正多边形的顶点坐标
private int[] x;
private int[] y;
private int startX;// 顶点的X坐标
private int startY;// 顶点的Y坐标
private int r;// 外接圆的半径

public MyPolygon(int[] x, int[] y) {
this.x = x;
this.y = y;
startX = 200;
startY = 10;
r = 200;
}

public void posOfPoint(int bianshu) {
x[0] = startX;
y[0] = startY;
Point p = new Point();
for (int i = 1; i < bianshu; i++) {
p = nextPoint(((2 * Math.PI) / bianshu) * i);
x[i] = p.x;
y[i] = p.y;
}
}

public Point nextPoint(double arc) {// arc为弧度,在顶点处建立直角坐标系,用r和arc确定下一个点的坐标
Point p = new Point();
p.x = (int) (x[0] - r * Math.sin(arc));
p.y = (int) (y[0] + r - r * Math.cos(arc));
return p;
}
}

核心代码:
 public  Point   nextPoint(double arc) {// arc为弧度,在顶点(x[0],y[0])处建立直角坐标系,

                      //用 r 和 arc 确定下一个点的坐标。
            Point p = new Point();
            p.x = (int) (x[0] - r * Math.sin(arc));
            p.y = (int) (y[0] + r - r * Math.cos(arc));
            return p;
           }

运行界面:

绘制n边形:用两个以上的控件来控制矩形的颜色、大小、位置及空实心(程序代写)的更多相关文章

  1. 第二十六篇:两个SOUI新控件 ---- SListView和SComboView(借用Andorid的设计)

    SOUI原来实现的SListBoxEx的效率一直是我对SOUI不太满意的地方.包括后来网友实现的SListCtrlEx. 这类控件为每一个列表项创建一个SWindow来容纳数据,当数据量比较大(100 ...

  2. VC++ 两种动态调整控件位置的方法(CButton设置为Radio形式会出现错误)

    ((CButton*)GetDlgItem(IDC_CHECK1))->MoveWindow(, cy - , , ); ((CButton*)GetDlgItem(IDC_CHECK2))-& ...

  3. 通过focusInEvent和eventFilter两种方法改写控件颜色(自定义控件就是这么来的)

    http://www.cnblogs.com/hicjiajia/archive/2012/05/30/2526768.html http://www.cnblogs.com/hicjiajia/ar ...

  4. KETTLE 更新表的两种方式-更新控件和sql更新 2种方式的实现比较

    在实际工作中,我们有可能遇见只更新不插入的情况,可以由以下2种方式去实现: 1.更新控件 如下图所示,根据id字段,更新name和cjsj时间字段 该控件不足的地方是,用来查询关键值得字段不够灵活,一 ...

  5. 背水一战 Windows 10 (57) - 控件(集合类): ListViewBase - 增量加载, 分步绘制

    [源码下载] 背水一战 Windows 10 (57) - 控件(集合类): ListViewBase - 增量加载, 分步绘制 作者:webabcd 介绍背水一战 Windows 10 之 控件(集 ...

  6. XE6 FMX之控件绘制与显示

    中午,有个货随手买的2块钱的彩票,尼玛中了540块,这是啥子狗屎气运.稍微吐槽一下,现在开始正规的笔记录入.经常有朋友说为毛我的博客不更新了或者说更新的少了,为啥呢!一来自己懒了,没学习什么新的东西, ...

  7. js设置控件的隐藏与显示的两种方法

    js设置控件的隐藏与显示,设置控件style的display和visibility属性就可以了,下面有个示例,需要的朋友可以参考下用JavaScript隐藏控件的方法有两种,分别是通过设置控件的sty ...

  8. ZedGrap控件绘制图表曲线

    问题描述: 使用C#中ZedGrap控件绘制图表曲线图 ZedGrap 介绍说明:     安装ZedGrap控件 ZedGraph控件dll文件: 添加ZedGraph控件,首先在新建立的C#图像工 ...

  9. 两款不同应用场景的Wpf分页控件

    简介 今天给大家分享两个Wpf分页控件,本篇博客主要介绍一些实现思路和使用方法,具体实现和应用代码请参考文末的Demo链接 废话不多说,先看一下效果~ (两款控件显示效果是一样的) 实现思路 一款控件 ...

随机推荐

  1. C++堆栈生长方向

    栈区:临时区 #include <iostream> using namespace std; #include <stdio.h> int main() { ; ; cout ...

  2. 【转载】-- vi/vim使用

    vi/vim 基本使用方法本文介绍了vi (vim)的基本使用方法,但对于普通用户来说基本上够了!i/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所 ...

  3. Dividing a Chocolate(zoj 2705)

    Dividing a Chocolate zoj 2705 递推,找规律的题目: 具体思路见:http://blog.csdn.net/u010770930/article/details/97693 ...

  4. SQLSERVER监控复制并使用数据库邮件功能发告警邮件

    SQLSERVER监控复制并使用数据库邮件功能发告警邮件 最近熬出病来了,都说IT行业伤不起,不说了,说回今天的正题 正题 上个月月底的时候因为要搬迁机房,需要将一个数据信息数据库先搬到我们的机房,然 ...

  5. linux基本命令--学习记录

    1.mkdir -p 递归创建目录(-p参数代表递归创建): 2.touch 创建file: 3.cat 查看 5.vi 编辑器 6.echo >(直接覆盖) 或者<<(后面追加)单 ...

  6. 关于oralce字符集问题(复制别人的,纯属自己学习)

    本文主要讨论以下几个部分: 1.如何查看查询oracle字符集. 2.修改设置字符集以及常见的oracle utf8字符集 3.oracle exp 字符集问题 正文: 一.字符集参数 影响Oracl ...

  7. Mac系统下lipo, ar, nm等工具的使用简介

    引言 开发第三方库时, 如果没有进行特殊处理, 很容易把其他第三方库的符号暴露出来, 导致链接时产生符号重复. 如下图所示 如果用户链接了其他版本的libjpeg, 会因为入口地址不正确让程序直接崩溃 ...

  8. WPF oxyPlot 使用总结

    oxyPlot能够简易的创建图表并且该库也在Github上面开源直通门.以下是笔者基础使用总结.本文例子的源码下载 1.安装与引用 新建一个wpf应用程序,然后使用Nuget控制台安装OxyPlot和 ...

  9. js常规日期格式处理、月历渲染、倒计时函数

    日期格式处理在前端的日常任务中非常常见,但是为此引入monent.js这样的类库又会显得有点臃肿,毕竟我们一个特定的项目中,并不需要monent.js那么全的涵盖范围.另外,如果现在公司让你自己手写一 ...

  10. Redis教程(七):Key操作命令详解

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/134.html?1455807040 一.概述: 在该系列的前几篇博客中, ...