数据类型
Arrays.fill(arr,94)//将数组中的元素填充为94
Arrays.fill(arr,1,4,0)//将数组中的第a[1]个元素到a[4]之前的元素全部换成0
String str="abc"; str=str.contac("de")//contac方法是在str字符串末尾添加“de”
String a=String.valueof(b)//将b的值赋给字符串a
char ch=a.charAt(0)//将字符串a的第0个元素赋给字符ch
char ch[]=str.toCharArray()//将字符串str中的元素赋给字符数组ch
str.indexOf("b")//查找字符串中是否有b元素 //或者用boolean a=str.contains("b")
string a=id.substring(i,j)//从字符串的第i位开始截取字符串id一直到第j位
string restr=str.replace("1","一")//将str字符串中所有1替换成一,str.replacefirst//只替换第一个
string restr=str.replaceAll("\\d","?")//将字符串str中所有数字替换为?,此方法可以用正则表达式 \\s代表空格
str.trim() //去掉字符串首尾的空格,但不能去除中间的,用replaceAll("\\s","")去掉所有的空格
String strArray[]=str.split(",",2);//将字符串按照逗号来分割成两部分,如果分割. 则打“\\.”
StringBuffer str=new StringBuffer() 可变字符串 str.append(" ")往字符串str中添加内容
str.setCharAt("3","A")//将字符串str中的3换成A
str.reverse()//将字符串颠倒
str.delete(1,4)//将以索引1开始到索引4之前的所有字符删掉
str.replace(3,7,"*")//将字符串str的索引3到6的所有字符串换成一个*
a. equils(b)//字符串a和b是否相等 a.equilsIgnoreCase(b)//忽略大小写进行比较
抽象类和接口进行比较,抽象类是抽象的父类,而接口更像是抽象了方法。
实例化类时,如果同名,比如Date在包sql和util中都有定义,那么实例化时就要用类的全名,如java.util.Date a=new java.util.Date()
内部类实例化 要用外部类 如Demo.innerClass in=d.new innerClass() d是外部{}类的实例化对象
public class Demo {
public interface2 action() {
return new interface2() {private int i=0;
public int getvalue() {
return i;
}
};
} //内部匿名类,这里interface2是已经创建好的一个接口,所以这里action方法是interface2型的,要return一个interface2型的数据。
try{运行程序
}catch(Exception1 e){
}catch(Exception2 e){
}...如果在try中发生异常则会中断后面的程序
throw new PriceException("国家规定西红柿价格不超过7元") 创建一个新的异常并把引号中的文字赋给该异常类的构造方法
常用类(Integer,Math等)
Integer num=Integer.valueof("123");给Integer型对象num赋值123.
int num=Integer.parseInt("876");将字符串876强制转换为整形
int num=inte2.intValue(); 将Integer型对象inte2的值返回,赋给整形变量num
char a=(char)(9+’0’)// ‘9’相当于ascii中的57,(char)(num + ‘0’)相当于9+48得数字57转为字符为’9’;或者
char char = String.valueOf(num).charAt(0);
String str1= Integer.toBinaryString(11);将11的二进制代码赋给字符串str1(Hex为16进制,Octal为8进制)
String str1=Integer.toString(11,15);将11转换为15进制,前面为要转的数字后面为要转的进制。
Math.exp(x) 计算e的x次幂 Math.log(x)计算e为底关于x的对数 Math.sqrt(x)计算平方根 Math.cbrt()计算立方根
Math.pow(2,5)计算2的5次方 Math.abs()绝对值
Math.ceil(5.2)取大于等于该数值的最接近的整数,即6
Math.floor(6.6)取小于等于该数值的最接近的整数,即6
Math.rint(2.5)取最接近该数值的整数,若为.5则取最接近的偶数
Math.round(3.4)四舍五入,即为该数值加上0.5后再进行取整,即为3
Math.random()//取一个0到1之间的double型随机数
如何把Java.util.Date和Java.sql.Date类互相转换
注意子类转父类是安全的,因为不会出现内存越界,sql中的Date类是util中的子类
Java.util.Date date1=new Java.sql.Date(123142412);
将util转换为sql:
Pst.setDate(1,new Java.sql.Date(birthday.getTime()))这里是数据库的setDate方法 ,意思是把第一个数据设置成birthday对应的时间
集合
Collection为一个通用的接口
List 类中包含ArrayList数组列表和LinkedList链表子类,ArrayList方便查找元素,LinkedList能更快的添加和删除元素。
List list=new ArrayList();
list.add();//向List中添加一个元素
List.get(1);//获取索引为1的元素
List.size;//list的元素个数
list.remove(1);//移除List中索引为1的元素
list.add(1,”在这里加入一个元素”)//在索引为1的地方插入一个元素,后面元素往后顺移。
List.set(1,”替换掉索引为1的元素”)//把索引为1的元素替换掉
迭代器Iterator,it.hasNext()判断是否还有元素,it.next()取出集合中下一个元素 Iterator it=a.interator(); 创建一个集合a的迭代器
Set接口有TreeSet和HashSet两个实现类,可实现Comparable接口来调用compareTo方法来对元素进行有序排列
public int compareTo(Object o) {
Person p;
if(o instanceof Person) {
p=(Person)o;//如果要进行比较的这个对象是Person类那么就强制转换成Person类对象
}else {
return -1;
}
int diff=this.id-p.id;
if(diff!=0) {
diff=diff/Math.abs(diff);//如果现在添加的元素的id值大于进行比较的id值,那么排在进行比较的元素后面,如果小于则排在前面
}
return diff;
}
另外这里要说明在用println方法打印一个对象时会自动调用toString()方法,这是因为会自动调用 String.valueOf()这个 方法,下面是这个方法的代码public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}这个方法中,当传入的对象为 null 时返回一个 null,当非 null 时,则返回这个 obj 的toString()。 所以, 这就是当我们调用 print 或者 println 打印一个对象时,它会打印出这个对象的 toString()的最终根源。
HashMap散列码键值对速度更快
TreeMap树状键值对存放有序,会自动调用Comparable方法,但要保证存放的元素类型一致可以进行比较
Map map=new Map();
Set set=map.keySet();//将map中的所有键放入set中
Set set=map.entrySet();//将map中的所有键和值放入set中
Set set=map.values();//将map中所有的值放入set中
窗体
JFrame f=new JFrame(“窗体标题”);//创建一个窗体对象并给他的标题赋值
f.setVisible(true);//将窗体设置为可见
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//如果不进行默认关闭运行的设置,即使关闭了窗体后程序也不会停止运行,设置为JFrame.EXIT_ON_CLOSE意思是关闭窗体程序停止运行
JFrame.DO_NOTHING_ON_CLOSE意思为点击关闭窗体但是没有任何反应。JFrame.HIDE_ON_CLOSE意思为隐藏窗体但是不停止运行程序。
JFrame.DISPOSE_ON_CLOSE意思为释放窗体资源
f.setLayout(new FlowLayout(FlowLayout.RIGHT,20,20))//设置窗体布局为流布局并且为右边对齐,横向与纵向间距为20像素
f.setSize(300,200);//设置窗体的大小,单位为像素
f.setLocation(200,200);//设置窗体的坐标,单位为像素
f.setBounds(x,y,Width,Hight);//设置窗体的坐标和大小,单位为像素
Container c=f.getContentPane();//获取窗体的容器,赋给容器c
c.setBackgroud(Color.WHITE);//设置容器的背景颜色为白色
JLabel l=new JLabel(“给这个窗体添加一个标签”);//创建一个标签对象
c.add(l);//将标签添加到容器中
c.remove(l);//移除这个标签
c.validate();//验证容器中的组件,即刷新
f.setContentPane(c);//重新载入容器c
f.setResizable(false);//将窗体大小设置为不可改变
f.getX();f.getY();//获取窗体的横坐标和纵坐标
给按钮设置监听器:b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JDialog d=new Dialogtest(f);
d.setVisible(true); }//这里是给按钮b添加一个监听器,使得点击按钮会弹出对话框d
设置滚动窗体:JTextArea area=new JTextArea();
c.add(area);//将文本域添加给容器c
JScrollPane r=new JScrollPane(area);//将文本域area添加到滚动窗体组件r c.add(JScrollPane)
或者:
JScrollPane scrollPane2 = new JScrollPane();
contentPanel.add(scrollPane2);
textArea2 = new JTextArea();
textArea2.setFont(new Font("微软雅黑", Font.PLAIN, 16));
scrollPane2.setViewportView(textArea2);
设置字体格式:JLabel l = new JLabel("标签1");
c.add(l);
l.setText("这是一个标签");// 这里应该是重写了上面的构造方法,所以会将上面文字覆盖
l.setText("萨达所大所多发顺丰阿斯");
Font a = new Font("宋体", Font.BOLD, 15); //字体,格式(这里是加粗),字号
l.setFont(a);//将字体a赋给l标签
l.setHorizontalAlignment(SwingConstants.CENTER);//设置标签的水平对准格式为居中
System.out.println(l.getText());
1.setForeground(Color.BLUE);//设置标签中的文字颜色为蓝色
设置图标:JLabel l=new JLabel("这是一个展示图片的标签");
c.add(l);
URL url=Demo.class.getResource("123.jpg");//获取图片的URL路径
System.out.println(url);
Icon icon=new ImageIcon(url);//把url路径对应的图片放到icon图标中
或者直接Icon icon=new ImageIcon("src/继承/124.jpg");//图片在包中的路径
l.setIcon(icon);//给标签设置图标
设置文本框:JTextField jt=new JTextField(20);//设置文本框长度为20,等价于jt.setColumns(20);
JTextField jt=new JTextField(“文本框”);//将文本框初始文字设置为“文本框”,等价于jt.setText(“文本框”);
jt.requestFocus();//文本框获取焦点,即获取鼠标光标
设置密码框:JPasswordField jp=new JPasswordField(20);
c.add(jp);
jp.setEchoChar('\u2605');//设置密码回显字符,即遮盖密码所用
jp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
char[] a=jp.getPassword();//获取密码串
String b=new String(a);
System.out.println(a);
}
});
设置文本域:JTextArea area=new JTextArea(“文本域”,5,5);//设置初始文字内容为文本域,并设置大小为5行5列
area.setRows(5);//设置行数
area.setColumns(20);//设置列数
area.append("asdafa");//添加文本内容
area.insert("f",1);//插入文本内容(要插入的内容,插入的字符索引位置)
area.setLineWrap(true);设置文本域自动换行功能为真
设置按钮:JButton b[]=new JButton[6];//创建一个按钮的数组,长度为6个按钮
b[0].setText("不可用");//给按钮设置文本
b[0].setEnabled(false);//将按钮设置为不可用
b[2].setBorderPainted(false);//将按钮的边框设置为不可见
b[3].setBorder(BorderFactory.createLineBorder(Color.BLUE));//将按钮的边框设置为蓝色
b[4].setToolTipText("图标按钮");//鼠标悬停在按钮上显示“图标按钮”
JOptionPane.showMessageDialog(Demo2.this,"消息提示","提醒",0)//在Demo2这个Frame中弹出一个消息提示框,并显示内容“消息提示”,并设置标题为“提醒”,并设置提示框格式为错误提示框,一共有ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, or PLAIN_MESSAGE 。
设置单选按钮:
JRadioButton b1=new JRadioButton("向左走");
JRadioButton b2=new JRadioButton("向右走");
ButtonGroup bg=new ButtonGroup();//创建一个按钮组对象这样才能实现单选
c.add(b1);
c.add(b2);
bg.add(b1);
bg.add(b2);
b1.setSelected(true);//设置b1初始状态为选中
JButton b=new JButton("打印");
c.add(b);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(b1.getText()+"按钮被选"+b1.isSelected());
System.out.println(b2.getText()+"按钮被选"+b2.isSelected());
bg.clearSelection();//清理所有选中
}
});
设置复选框组件:大致的调用方法和单选按钮基本一样
JCheckBox c1=new JCheckBox();
设置下拉列表框:
JComboBox<String> cb=new JComboBox<>();
cb.addItem("身份证");//向列表中添加元素
cb.addItem("学生证");
cb.addItem("行驶证");
String Item[]= {"身份证","学生证","行驶证"};
JComboBox<String> cb=new JComboBox<>();
ComboBoxModel cm=new DefaultComboBoxModel(Item);//创建下拉列表模型
cb.setModel(cm);//向列表中添加数据模型
cb.getSelectedIndex();//获取选中的元素的索引
cb.getSelectedItem();//获取选中的元素的值
cb.setEditable(false);//设置下拉列表的元素是否可被修改
设置列表框:
String list[]= {"元素1","元素2","元素3","元素4","元素5","元素6","元素7","元素8","元素9","元素10"};
DefaultListModel<String> model=new DefaultListModel<>();
//创建列表模型
for(String x:list) {
model.addElement(x);//遍历数组,添加元素
}
JList jl=new JList();
jl.setModel(model);//把模型添加到列表中
jl.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);//设置列表的选中模式,这里是可连续选中,还有仅单个选中和任意选中模式
JScrollPane js=new JScrollPane(jl);
js.setBounds(10,10,100,100);
c.add(js);
JButton b=new JButton("打印");
b.setBounds(100, 10, 80, 20);
c.add(b);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
java.util.List<String> values=jl.getSelectedValuesList();//创建List对象,将列表选中的值赋给这个对象
for(String x:values) {
System.out.println(x);
}
}
});
设置动作事件监听器:JTextField jt=new JTextField(10);
c.add(jt);
jt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object obj=e.getSource();//获取触发动作事件的对象
JTextField jf=(JTextField)obj;
System.out.println(jf.getText());//输出文本,或者直接用System.out.println(e.getActionCommand());
}
});
设置鼠标事件:public void Mouseopen(MouseEvent e) {
int i=e.getButton();//获取鼠标点击的键值
if(i==e.BUTTON1) {
System.out.println("鼠标左键被点击");
}
if(i==e.BUTTON2) {
System.out.println("鼠标滚轮被点击");
}
if(i==e.BUTTON3) {
System.out.println("鼠标右键被点击");
}
}
jl.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标被松开");
Mouseopen(e);//调用上面的方法输出被点击的鼠标按键
}
public void mousePressed(MouseEvent e) {
System.out.println("鼠标被点击");
Mouseopen(e);
}
public void mouseExited(MouseEvent e) {
System.out.println("鼠标移出目标区域");
}
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标移入目标区域");
}
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标被点击了"+e.getClickCount()+"次");//输出鼠标被点击的次数
}
});
设置键盘事件:textField.addKeyListener(new KeyAdapter() { //文本框添加键盘事件的监听
char word;
public void keyPressed(KeyEvent e) { //按键被按下时被触发
word=e.getKeyChar();//获取按下键表示的字符
for(int i=0;i<btns.size();i++){//遍历存储按键ID的ArrayList集合
//判断按键是否与遍历到的按键的文本相同
if(String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())){btns.get(i).setBackground(green);//将指定按键颜色设置为绿色
}
}
}
public void keyReleased(KeyEvent e) { //按键被释放时被触发
word=e.getKeyChar();//获取释放键表示的字符
for(int i=0;i<btns.size();i++){//遍历存储按键ID的ArrayList集合
//判断按键是否与遍历到的按键的文本相同
if(String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())){btns.get(i).setBackground(white);//将指定按键颜色设置为白色
}
}
}
});
设置进度条:
JProgressBar progressBar = new JProgressBar();
progressBar.setStringPainted(true);//显示进度的值为真
jpb.setValue(values[i]); // 显示进度条进度的元素
jpb.setIndeterminate(false); // 确定进度条读取完毕后的显示模式,默认模式为false
I/O(输入输出)
File file = new File("test.txt");//获取指定路径文件,创建一个File对象
file.exists()//判断文件是否存在
file.createNewFile();在指定路径创建一个新的文件
if (file.isFile() && file.canRead())//如果文件是一个标准文件并且可读
String fileName = file.getName();//输出文件名
String filePath = file.getAbsolutePath();//文件的绝对路径
boolean hidden = file.isHidden();//文件是否是隐藏文件
long len = file.length(); // 获取该文件中的字节数
long tempTime = file.lastModified(); // 获取该文件最后的修改时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date(tempTime); // 使用“文件最后修改时间”创建Date对象
file.delete(); //输出这个路径下的文件
文件夹操作:
File file=new File("dir/dir2/dir3");
boolean a=file.mkdirs();//创建多层文件夹
System.out.println("创建文件夹是否成功"+a);
boolean b=file.delete();//删除路径中的最后一个文件夹
System.out.println("文件夹是否删除成功"+b);
File f=new File("E:\\eclipse\\");
File files[]=f.listFiles();//获取路径下的所有文件夹和文件
for(File x:files) {
if(x.isDirectory()) {//判断是否是文件夹
System.out.println("文件夹"+x.getName());
}else if(x.isFile()) {//判断是否是文件
System.out.println("文件"+x.getName());
}
}
输入输出流:FileOutputStream out = new FileOutputStream(file);//如果没有文件会自动创建文件
String content = "你见过洛杉矶凌晨4点的样子吗?";// 定义字符串,用来存储要写入文件的内容
byte buy[] = content.getBytes();// 创建byte型数组,将要写入文件的内容转换为字节数组
out.write(buy); // 将数组中的信息写入到文件中
out.close(); // 将流关闭
FileInputStream in = new FileInputStream(file);
byte byt[] = new byte[1024]; // 创建byte数组,用来存储读取到的内容
int len = in.read(byt); // 从文件中读取信息,并存入字节数组中将文件中的信息输出
System.out.println("文件中的信息是:" + new String(byt, 0, len));//从0一直读取到字节数组长度的位置,这样可以不用输出后面的空格
in.close(); // 关闭流
文件字节流:fw=new FileWriter(f,true);//对文件f进行字符输出,并设置为在末尾添加语句,false为在开头覆盖语句
String str="天行健君子以自强不息。";
fw.write(str);//将str字符串写入文件
FileReader fr=null;
char c[]=new char[1024];
fr=new FileReader(f);//将f中的数据写入fr字符输入流
int count;
while((count=fr.read(c))!=-1) {//将数据写入字符串c并将字符串长度赋给count
System.out.println(new String(c,0,count));}//将c输出的数据长度限制为索引0到count,这样可以避免输出后面的空格
缓冲字节流:缓冲字节流可以包装输入输出流,得以提升程序的效率
FileOutputStream fos = null; // 创建FileOutputStream对象
BufferedOutputStream bos = null; // 创建BufferedOutputStream对象
FileInputStream fis = null; // 创建FileInputStream对象
BufferedInputStream bis = null; // 创建BufferedInputStream对象
fos = new FileOutputStream(file); // 实例化FileOutputStream对象
bos = new BufferedOutputStream(fos); // 实例BufferedOutputStream对象
byte[] bContent = new byte[1024]; // 创建可以容纳1024个字节数的缓冲区
for (int k = 0; k < content.length; k++) { // 循环遍历数组
bContent = content[k].getBytes(); // 将遍历到的数组内容转换为字节数组
bos.write(bContent); // 将字节数组内容写入文件
缓冲字符流:BufferWriter bw=new BufferWriter();
Bw.newLine();//创建新的一行
BufferReader br=new BufferReader();
br.readLine();//读取一行的数据
线程
当线程执行完毕后,线程死亡,这个时候垃圾回收机制会将线程回收
线程同步,使不同线程能够安全的同时运行。
public void run() {
while (true) { // 设置无限循环
synchronized (this) { // 设置同步代码块
if (num > 0) { // 判断当前票数是否大于0
try {
Thread.sleep(100); // 使当前线程休眠100毫秒
} catch (Exception e) {
e.printStackTrace();
}
// 票数减1
System.out.println(Thread.currentThread().getName() + "——票数" + num--);
}
}
}
}
JDBC
连接数据库基本语句
Connection con=null;
Statement sta=null;
ResultSet res=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/test";
String username="root";
String password="";
con=DriverManager.getConnection(url,username,password);
sta=con.createStatement();
res=sta.executeQuery("select * from myclass");
while(res.next()) {
int id=res.getInt("id");
String name=res.getString(2);
String sex=res.getString(3);
String birthday=res.getString(4);
System.out.println(id+name+sex+birthday);
}
动态查询
String sql="select * from myclass where name like ? and sex = ?";//这里问号为通配符,必须在后面的方法中指出查询的内容,且必须给出每个参数的值
PreparedStatement ps=con.prepareStatement(sql);
ps.setString(1,"T%");//将第一个条件name设置为名字中带有T的,此时sql语句中应用like;
ps.setString(2, "man");//将第二个条件sex设置为man
ResultSet re=ps.executeQuery();
while(re.next()) { //一定要用re.next()来输出结果集
System.out.println(re.getString(1)+"\t"+re.getString(2)+"\t"+re.getString(3));
}
添加修改删除数据
String sql="insert into myclass values(5,'mike','man','1970-01-01')";
"update myclass set birthday='1977-01-01' where id = 5";
"delete from myclass where id=5";
int result=sta.executeUpdate(sql);//添加删除修改 用这一个方法
动态添加修改删除数据
ps=con.prepareStatement("insert into myclass(name,sex,birthday) values(?,?,?)");
ps.setString(1,"Tina");
ps.setString(2, "woman");
ps.setString(3, "1999-09-09");
ps.executeUpdate();
绘图类
class CanvasTest extends Canvas {// 创建画布
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;// 创建Graphics2D对象,用于画图
g2.drawOval(5, 5, 100, 100);// 调用从Graphics类继承的drawOval方法绘制圆形
g2.fillRect(15, 15, 80, 80);// 调用从Graphics类继承的fillRect方法填充矩形
g2.drawArc(x,y,width,height,startangle,Arcangel);//画弧形, 最后两个参数是起始角度和跨越角度
g2.drawLine(x1,y1,x2,y2);//画一条线 ,将坐标(x1,y1)和(x2,y2)连接起来
g2.drawRoundRect(x,y,width,height,arcwidth,archeight);//圆弧矩形,最后两个参数是水平弧度和垂直弧度
int x[]={250,300,250,300}; int y[]={130,130,200,200};
g2.drawPolygon(x,y,4);//数组x代表每个点的横坐标,数组y代表每个点纵坐标,4代表点的数量,这个方法会把这些点依次连接起来,最后一个点会连接到第一个
g2.drawPolyline(x,y,4);//多变线 ,与上面的区别是最后一个点不会与第一个点相连
Shape[] shapes = new Shape[2]; // 声明图形数组
shapes[0] = new Rectangle2D.Double(110, 5, 100, 100); // 创建矩形对象
shapes[1] = new Ellipse2D.Double(120, 15, 80, 80); // 创建圆形对象
for (Shape x: shapes) { // 遍历图形数组
Rectangle2D bounds = x.getBounds2D();
if (bounds.getWidth() == 80)
g2.fill(x); // 填充图形,这里用shape型参数来绘制图形
else
g2.draw(x); // 绘制图形
}
}
设置颜色
color c=Color.RED;
g2.setColor(c);
g2.drawLine(5,10,5,20);
设置画笔宽度
Strock strock=new BasicStrock(8);//设置画笔宽度为8像素
g2.setStrock(strock);
g2.drawLine(5,10,5,20);
Strock strock=new BasicStrock(12,BasicStrock.CAP_ROUND,BasicStrock.JOIN_ROUND);//设置折现末端为圆角,拐角为圆弧拐角 CAP_BUTT无修饰末端 CAP_SQUARE正方形末端 JOIN_BEVEL平角 JOIN_MITER尖角
图片的放大与缩小
int width =image.getWidth(this);//获取当前图形的宽度和高度
int height=image.getHeight(this);
g.drawImage(img,0,0,width+num,height+num,this);//num为按一次放大或者缩小按钮增加或者缩小的量,可设置为20
canvas.repaint();//重画图形,相当于刷新
图片的水平和垂直翻转
g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);//dx1,dy1 dx2,dy2分别为要把图片放入的矩形区域的左上角和右下角坐标,图片会自动的拉伸或者缩小 sx1,sy1 sx2,sy2分别为原图片的左上角和右下角坐标 如果要垂直翻转就调换原图片的两个Y坐标,水平翻转就调换原图片的两个X坐标。
URL imgUrl = PartImageFrame.class.getResource("/Graphic/image.jpg");// 获取图片资源的路径
img = Toolkit.getDefaultToolkit().getImage(imgUrl); // 获取图像资源
dx2 =sx2 = 320; // 初始化图像大小
dy2 =sy2 = 200; // 初始化图像大小
imagePanel = new PartImagePanel(); // 创建图像面板对象
this.setBounds(200, 160, 355, 276); // 设置窗体大小和位置
this.add(imagePanel); // 在窗体中部位置添加图像面板对象
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
this.setTitle("垂直翻转图像"); // 设置窗体标题
final JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.SOUTH);
final JButton btn_v = new JButton();
btn_v.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
// 下面3行代码用于交换sy1和sy2的值
int y = sy1;
sy1 = sy2;
sy2 = y;
imagePanel.repaint();// 重新调用面板类的paint()方法
}
});
btn_v.setText("垂直翻转");
panel.add(btn_v);
}