这个学期主要放在ACM比赛上去了,比赛结束了,不知不觉就15周了,这周就要java考试了,复习一下java吧,java的学习的目的还是让我们学以致用,让我们能够运用java开发一下小项目,而不是单单应付考试;今天复习了一下,图形用户接口,对监听的实现又加深了一些,java的布局控制,gui动画;
对书上代码的实现:
这个程序的功能就是按下按钮,会改变颜色,后面改变颜色的那个类是渐变的所以效果不明显;
主要是熟悉一下,布局管理和监听的写法,还有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);
}
}
实现两个按钮的监听:
主要的功能是实现两个不同的按钮的监听,分别有不同的功能
后面的画图和前面的程序一样;
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);
}
}
添加一段代码,在每次画上新的圆圈之前把整个面板用原来的背景底色填满;
这样我们看到的就是动画图了,把中间的痕迹消去了;
这个的基本效果;
复习的这些都是一些要掌握的基础知识,从基础做起。