码迷,mamicode.com
首页 > 编程语言 > 详细

java学习笔记(二)图形用户接口

时间:2017-06-27 11:01:45      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:比赛   控制   oid   一段   vax   ide   实现   lis   new t   

这个学期主要放在ACM比赛上去了。比赛结束了。不知不觉就15周了,这周就要java考试了。复习一下java吧。java的学习的目的还是让我们学以致用,让我们可以运用java开发一下小项目。而不是单单应付考试。今天复习了一下,图形用户接口,对监听的实现又加深了一些。java的布局控制,gui动画;

对书上代码的实现:

这个程序的功能就是按下button,会改变颜色。后面改变颜色的那个类是渐变的所以效果不明显;

主要是熟悉一下,布局管理和监听的写法。还有paintComponent类的一些使用方法;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GUI implements ActionListener {
	JFrame jf;
	public static void main(String[] args) {
		GUI gui=new GUI();
		gui.go();
	}
	public void go() {
		 jf=new JFrame();
		 JButton jb=new JButton("change color");
	         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭
		 jb.addActionListener(this);
		 MyDrawPanel drawpanel =new MyDrawPanel();
		 jf.add(BorderLayout.SOUTH,jb); //对组件进行布局管理
		 jf.add(BorderLayout.CENTER,drawpanel);
	    jf.setSize(500, 500);
	    jf.setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent arg0) {  //事件监听的一种写法。外部类
		 jf.repaint();
	}
}

public class MyDrawPanel extends JPanel{
	public void paintComponent(Graphics g) //绘图
	{
	Graphics2D g2d=(Graphics2D) g;
     	GradientPaint gradient=new GradientPaint(70,70,Color.blue,150,150,Color.orange);//渐层的颜色 也能够不这么写。效果更明显
     	g2d.setPaint(gradient);
     	g2d.fillOval(70,70,100,100);
	}
}


实现两个button的监听:

基本的功能是实现两个不同的button的监听,分别有不同的功能

后面的绘图和前面的程序一样;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class TwoButtons {
   
	    JFrame jf ;
	    JLabel jl ;//标签
	    
	public static void main(String[] args) {
		TwoButtons gui =new TwoButtons();
		gui.go();
	}

	public void go() {
		jf=new JFrame();
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JButton labelbutton=new JButton("change Label");
		labelbutton.addActionListener(new ActionListener() {//这里的监听採用的是匿名内部类。也还能够使用内部类
			@Override
			public void actionPerformed(ActionEvent arg0) {
				jl.setText("ouch!");
			}
		});
		
		JButton colorbutton=new JButton("change circle");
		colorbutton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				jf.repaint();
			}
		});
		jl=new JLabel("I‘am a label");
		MyDrawPanel drawpanel=new MyDrawPanel();
		
		jf.add(BorderLayout.SOUTH,colorbutton);
		jf.add(BorderLayout.CENTER,drawpanel);
		jf.add(BorderLayout.EAST,labelbutton);
		jf.add(BorderLayout.WEST,jl);
		
		jf.setSize(500, 500);
		jf.setVisible(true);
	}

}
public class MyDrawPanel extends JPanel{
	public void paintComponent(Graphics g)
	{
	Graphics2D g2d=(Graphics2D) g;
     	GradientPaint gradient=new GradientPaint(70,70,Color.blue,150,150,Color.orange);
     	g2d.setPaint(gradient);
     	g2d.fillOval(70,70,100,100);
	}
}


技术分享

大体的界面就是这样;

动画的效果,用到一些线程的初步知识;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Simpleanimation {
	 int x=80;
	 int y=80;
	 Mydrawpanel draw;
	public static void main(String[] args) {
	      Simpleanimation simpleanimation=new Simpleanimation();
	      simpleanimation.go();
	}
	public void go() {
		JFrame jf=new JFrame();
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
		draw=new Mydrawpanel();
		jf.add(draw);
		jf.setSize(500, 500);
		jf.setVisible(true);
		
		Thread thread1=new Thread(new Mythread());
		thread1.start();
		
		/*for(int i=0;i<300;i++){
			x++;
			y++;
			draw.repaint();
			try {
                Thread.sleep(50);
			} catch (Exception e) {
			}
		}*/
	}
	class Mythread implements Runnable{//这里就用线程写了一下,初步的知识
		@Override
		public void run() {
			for(int i=0;i<300;i++){
				x++;
				y++;
				draw.repaint();
				try {
	                Thread.sleep(50);
				} catch (Exception e) {
				}
			}
		}
	}
   class Mydrawpanel extends JPanel {
	   public void paintComponent (Graphics g){
		   g.setColor(Color.green);
		   g.fillOval(x,y,x,y);//这个x和y改变成其它值就会用不同的效果;
	   }
   }
  }


技术分享


这里这个图像在变化的时候还会留下痕迹;

我们怎么消去这些痕迹呢?

class Mydrawpanel extends JPanel {
	   public void paintComponent (Graphics g){
		   g.setColor(Color.white);
		   g.fillRect(0, 0, this.getWidth(), this.getHeight());

		   g.setColor(Color.green);
		   g.fillOval(x,y,x,y);
	   }
   }

加入一段代码,在每次画上新的圆圈之前把整个面板用原来的背景底色填满。

 技术分享

这样我们看到的就是动绘图了,把中间的痕迹消去了。

这个的基本效果;

复习的这些都是一些要掌握的基础知识,从基础做起。


??

java学习笔记(二)图形用户接口

标签:比赛   控制   oid   一段   vax   ide   实现   lis   new t   

原文地址:http://www.cnblogs.com/jzdwajue/p/7083803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!