Java部分笔记

数据类型

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

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值