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

这个学期主要放在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);
	   }
   }

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

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

这个的基本效果;

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

??

时间: 2024-10-13 00:22:50

java学习笔记(二)图形用户接口的相关文章

Java学习笔记二:初始化(一)

1.对象初始化 在使用 new 初始化对象时,系统通常使用默认的构造函数,这个构造函数没有返回值,格式为: public class InitializeTest { private int a; // 默认构造函数 public InitializeTest() { } // 自定义构造函数 public InitializeTest(int a) { this.a = a; } } 虽然在使用 new 创建实例时,返回了这个对象的引用,但是这个与没有返回值的void方法不同 //void方法

Java学习笔记二:数据类型

Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围从-2 147 483 6至2 147 483 647 超过20亿,如果用来存储大于20亿的值,最好使用long型. 1.2  int 与Integer: Java中的数据类型分为基本数据类型和复杂数据类型.Int为前者,integer为后者. Integer是int的封装类,提供了很多转换方法,当

Java学习笔记——MySQL开放3306接口与设置用户权限

系统Ubuntu16.04 LTS 1.开放3306端口查看端口状态:netstat -an|grep 3306tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN目前只有本机可以访问     输入指令:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf如果之前配置过全局配置文件,也可输入指令:sudo vim /etc/mysql/my.cnf修改文件,找到下面那

黑马程序员——JAVA学习笔记四(继承、接口、内部类)

1,    通过extends关键字让类与类之间产生继承关系.多个类中存在相同属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需定义这些属性和行为,只要继承那个类即可,已存在的类叫做超类,基类,或父类.新类称为子类,派生类,孩子类. 子类可以直接访问父类中的非私有的属性和行为.子类无法继承父类中私有的内容.JAVA不支持多继承,只支持单继承,多实现. 继承提高了代码复用性,让类与类之间产生了关系.为多态提供了前提. 2,    super关键字代表父类中成员变量内存空间的标示.两个作用

Java学习笔记二:初始化(二)

这里主要学习初始化,分为: 1.变量初始化 2.构造函数初始化 3.数组初始化 4.继承初始化   1.变量初始化 成员初始化分为两种: (1)成员变量初始化 在定义成员变量时,如果没有给变量赋于初始值,系统会给出一个默认值. 这里有两种选择:要么使用系统的默认初始值,要么自己定义初始值. 系统给出的默认输出值为: boolean false char [ ] byte 0 short 0 int 0 long 0 float 0.0 double 0.0 refenece null char初

黑马程序员——JAVA学习笔记二(语法基础)

1,     Java程序都是以类的形式存在的,所以需要告诉虚拟机需要加载类的位置,那么可以设置classpath变量.classpath变量如果有;,则表示还会在当前目录查找,没有;则不会在当前目录查找. 当然如果没有classpath也会在当前目录查找. 2,    rd删除目录,加/S可以删整个目录,Windows从里向外删除. 3,    一个文件只有一个public类,文件名必须和类名相同,如果不是友好类,则不需要同名. 4,    JAVA一共有50个关键字 关键字是电脑语言里事先定

Java学习笔记二(基础语法)

1 Java 是强类型语言,提供的8中基本数据类型有以下几类: Byte :字节类型,一个字节,有符号的8位的整数.字节类型参与运算的时候,会转化为int类型. byte b;b=3;b=(byte)(b*3);  在这里第二个赋值必须经过强制类型转化,否则会编译出错. short:2个字节,Byte可行可以直接赋值给short,但是反过来需要强制类型转化. int:4字节类型的有符号的整数. long:8个字节类型的有符号的整形 char:2个字节的无符号的类型.采用的是Unicode的编码格

数组排序、递归——(Java学习笔记二)

升序: 选择排序: 选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置 先出现最小值,最后出现最大值. public static void main(String[] args) { int[] arr = {5,8,9,12,55,565,421,12,2512,-5,-56}; sortMethod(arr); p(arr); } //排序核心代码 private static void sortMethod(int arr[]) { for(int i =

Java学习笔记二()

1.6. 接口和抽象类 抽象类的成员可以具有访问级别,而接口的成员全部public级别 抽象类可以包含字段,而接口不可以 抽象类可继承接口,而接口不能继承抽象类 抽象类的成员可以具有具体实现,而接口不行 抽象的子类可以选择性实现其基类的抽象方法,而接口的子类必须实现全部方法 1.7. Java中的命名规则 类名:首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如class HelloWorldApp; 接口名:命名规则与类名相同,例如 interface Collecti

Java学习笔记二:初始化(三)

3.数组初始化 1.数组是一个固定长度的集合,在初始化大小后就不能改变其长度. 数组分配在堆中,并在栈中存有指向该数组的一个引用. class Arr { public static void main(String[] args) { int[] a = {1, 2, 3, 4}; int[] b = a; for (int i = 0; i < b.length; i++) { b[i]++; } for (int i = 0; i < a.length; i++) { System.ou