1. 程式人生 > >java學習筆記(二)圖形用戶接口

java學習筆記(二)圖形用戶接口

star strong per getwidth cep runnable graphics s2d gb2

這個學期主要放在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學習筆記(二)圖形用戶接口