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);
}
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDI1MzE3Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">
大体的界面就是这样;
动画的效果。用到一些线程的初步知识。
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改变成其它值就会用不同的效果;
}
}
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDI1MzE3Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">
这里这个图像在变化的时候还会留下痕迹;
我们怎么消去这些痕迹呢?
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学习笔记(二)图形用户接口的更多相关文章
- Java学习笔记二十八:Java中的接口
Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...
- Java学习笔记--Swing2D图形
1.处理2D图形 要想使用java 2D库绘制图形,需要获得一个Graphics2D类对象.这个类是Graphics类的子类.paintComponent方法自动获得一个Graphics2D类对象,我 ...
- [core java学习笔记][第六章接口与内部类]
接口域内部类 接口 描述类具有什么功能,不给出具体实现. 内部类 用于设计协作关系的类集合 代理 实现任意接口的对象. 6.1 接口 接口声明 public interface Comparable ...
- Java学习笔记——MySQL开放3306接口与设置用户权限
系统Ubuntu16.04 LTS 1.开放3306端口查看端口状态:netstat -an|grep 3306tcp 0 0 127.0.0.1:3306 ...
- Java学习笔记二:数据类型II
GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一 Java中的数据类型 Java ...
- Java学习笔记22(List接口)
List接口继承自Collection接口,自身具有三大特点: 1.有序集合:存入和取出的顺序一致: 2.此接口的用户可以对每个元素插入位置进行精确控制:可以通过索引操作元素 3.可以存储重复元素 L ...
- Java学习笔记二十九:一个Java面向对象的小练习
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
- Java学习笔记二十七:Java中的抽象类
Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- Java学习笔记二十一:Java面向对象的三大特性之继承
Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...
随机推荐
- Java NIO Buffer说明
Buffer 有3个重要的参数:位置(position).容量(capactiy).上限(limit) 位置(position): 写:当前缓冲区的位置,将从position的下一个位置写数据. 读: ...
- MVC简单的解释
MVC (Model-View-Controller,模型视图控制器)是一种软件的设计模式,它最早是由 20 世纪 70 年代的 Smalltalk 语言提出的,即把一个复杂的软件工程分解为三个层 ...
- Redis学习笔记(五)- 数据类型之set类型
Redis 的set是string类型的无序集合.set元素最大可以包含(2的32次方-1)个元素.set的是通过hash table实现的,所以添加,删除,查找的复杂度都是O(1).hash tab ...
- 【JAVA练习】- 一个逻辑题
打印 1 3 4 5 8 12 7 12 20 32 9 16 28 48 80 ..... 输入任意一个奇数,输出那一行的数据 第一种方法找到规律进行 ...
- 省市区县的sql语句——城市
/*SQLyog v10.2 MySQL - 5.5.48 : Database - 省市县****************************************************** ...
- 【Linux】七种运行级别
运行级别:即系统的运行模式. 级别类型: 0:关机状态. 1:单用户模式. 2:字符界面的多用户模式(不支持网络). 3:字符界面的多用户模式(运行最完整的模式). 4:未分配使用,系统保留. 5:图 ...
- 两款工作流JBPM和CCBPM的对比
以国外流行的工作流jbpm4的模式与当今中国开源的ccbpm(ccflow和jflow的总称)流程引擎对照.以便让各位能够了解到中国国情的工作流引擎与国际流行的设计规则的差别.不同.与优缺点. 国外工 ...
- 三维重建面试4:Jacobian矩阵和Hessian矩阵
在使用BA平差之前,对每一个观测方程,得到一个代价函数.对多个路标,会产生一个多个代价函数的和的形式,对这个和进行最小二乘法进行求解,使用优化方法.相当于同时对相机位姿和路标进行调整,这就是所谓的BA ...
- 揭开jQuery的面纱
简单地说,jQuery是一个优秀的JavaScript类库,也就是使用JavaScript面向对象的性质编写的一个JavaScript类的集合.jQuery究竟能为我们提供哪些功能呢?简单地说可以从七 ...
- 【sqli-labs】 less34 POST- Bypass AddSlashes (POST型绕过addslashes() 函数的宽字节注入)
还是宽字节注入,POST版本的 uname=1&passwd=1%df' union select 1,2,3# 提交报错 列名不匹配,改一下就好了 uname=1&passwd=1% ...