界面开发与混沌分形

界面开发

界面开发的用途

通常,我们使用界面开发创建窗体,创建许多组件,编写相应的代码可以达到交互的效果。
例如我们常用的qq登陆界面,微信界面就属于一种界面开发。我们可以用用swing包实现基础的开发界面。添加图片,文字,文本框密码框等。

窗体及窗体中的组件

JFrame kframe =new JFrame();
  kframe.setTitle("分形");//设置窗体标题
  kframe.setSize(600,600);//设置窗体大小
  kframe.setLocationRelativeTo(null);//设置窗体位置
  kframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//对关闭按钮的响应
  kframe.setVisible(true);//窗体可视化

以上是窗体的基本属性,最重要的是最后一行setVisible,让窗体可见,不然运行代码是看不见窗体的。

ImageIcon image =new ImageIcon("D:\\作业\\untitled.png");
     JLabel ax=new JLabel(image);//设置标签
     JLabel ay=new JLabel("账号");
     JTextField name=new JTextField();//设置账号输入框,输入文字可见
     JLabel az=new JLabel("密码");
     JPasswordField pwf=new JPasswordField();//设置密码输入框,输入后不可见
     JButton aw=new JButton("登录");//设置登录按钮
     Dimension dl=new Dimension(220,30);//定义尺寸对象dl
     name.setPreferredSize(dl);//利用dl设置输入框长宽,让标签和输入框处于同一行
     pwf.setPreferredSize(dl);
     weixin.add(ax);//加入组件
     weixin.add(ay);
     weixin.add(name);
     weixin.add(az);
     weixin.add(pwf);
     weixin.add(aw);
     weixin.setVisible(true);

需要注意的是定义出来的组件是独立的个体,我们需要用weixin.add()将他们和窗体绑定。下面是成品。
界面开发与混沌分形_第1张图片

窗体布局器

要知道我们把组件添加上去的时候都想组件在相应的位置,这时候可以添加布局器使组件合理排列。较为简便的有流式布局器

     FlowLayout fl=new FlowLayout();//流式布局器
     weixin.setLayout(fl);//添加对象

这种布局器可以使组件自动排列,不用自己设置特定位置,比较方便。

混沌分形

鼠标监听器和绘制画笔的使用

高斯说数学与艺术息息相关。确实,有很多奇妙的图形可以由数学公式进行绘制,这个时候我们的窗体就派上用场了。
先看成品图
界面开发与混沌分形_第2张图片
这是个很奇妙的图形,画笔颜色比较淡所以效果不是很明显,但不难看出这像是一个立体的空心的绕城一圈的绳子。中间色深外边色浅。下面我们介绍如何通过数学迭代绘制这种图形。

鼠标监听器

我们想让图形画在以我们鼠标点击为基准的地方,那就需要窗体对鼠标进行响应。这时候我们引入鼠标监听器

 sq j=new sq();
        kframe.addMouseListener(j);

这里看的不是很明白,我解释一下,sq是一个我定义的继承鼠标监听器接口的类,我在前面博客《JAVA接口的概念与应用》有提到过,鼠标监听器是一种重要的接口,在sq这个类中重写了MousListener,使得鼠标点击就能绘制图形。
下面是实现响应方案的代码

public void mouseReleased(MouseEvent e) {
  // TODO Auto-generated method stub
  System.out.print("释放");
  gr.setColor(Color.BLUE);//设置画笔颜色
  for(int i=1;i<100000;i++){
  double a=-1.8,b=-2.0,c=-0.5,d=-0.9;
  x=Math.sin(a*y1)+c*Math.cos(a*x1);//迭代函数绘制图形
  y=Math.sin(b*x1)+d*Math.cos(b*y1);
  int xk=(int)(x*100+x0);
  int yk=(int)(y*100+y0);
  x1=x;
  y1=y;
  System.out.println("x="+x+" y="+y+" xk="+xk+" yk="+yk);
  ar[xk][yk]=ar[xk][yk]+1;
  ar[xk][yk]=Math.min(ar[xk][yk], 255);
 }
  for(int k=0;k<600;k++){
    for(int w=0;w<600;w++){
     if(ar[k][w]==0){
      gr.setColor(Color.WHITE);}
     else{
      Color c=new Color(ar[k][w],255,255);
      gr.setColor(c);}
     gr.fillOval(k, w,3,3);
    }
  }
 }

绘制画笔的连接

我们定义出一个画笔Graphics gr;这时候它仍然是独立的,我们需要把他和窗体连接,让他获得窗体绘制的使用权,并且把他引用给sq,即sq.gr=gr;
这样在运行代码时,sq类就拥有了窗体绘制的许可权。
Graphics中有方法如setColor()可以调整画笔颜色。
调用绘制画笔代码如下

Graphics gr=kframe.getGraphics();
sq j=new sq();
j.gr=gr;

你可能感兴趣的:(界面开发与混沌分形)