java图形接口_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);

}

}

ec4b0c5d25b057bf9a71ce388f6e8074.png

大体的界面就是这样;

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

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改变成其它值就会用不同的效果;

}

}

}

52c352b3492c8ac201ceb4c57fbed09c.png

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

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

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

}

}

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

809cc1a73f706b727c114a71903e793e.png

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

这个的基本效果;

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值