java學習筆記(二)圖形用戶接口
阿新 • • 發佈:2017-05-22
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學習筆記(二)圖形用戶接口