• 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);
    	   }
       }

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

     

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

    这个的基本效果;

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


    
  • 相关阅读:
    7-20 (样卷)统计单词的个数 (40 分)
    7-21 删除字符 (30 分)
    7-19 计算有n个字符串中最长的字符串长度 (40 分)
    7-16 列表数字元素加权和(1) (40 分)
    7-17 列表元素个数的加权和(1) (40 分)
    7-15 求出歌手的得分 (40 分)
    7-10 jmu-python-异常-学生成绩处理基本版 (15 分)
    7-11 jmu-python-分段函数&数学函数 (15 分)
    7-12 产生每位数字相同的n位数 (30 分)
    7-9 jmu-python-异常-学生成绩处理专业版 (25 分)
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6888988.html
Copyright © 2020-2023  润新知