`

java基础部分和画图板总结

 
阅读更多

一、         基础部分

1.   类如何定义?类中可以定义哪些?

public class 类名{}

主函数定义为public static

类中可以定义类的属性和方法

系统会自动生成一个默认的构造函数,若想在生成对象时带参数,则重载构造函数

属性一般定义为 private static是为了让属性能直接用类名调用

方法一般定义为public

public类名必须和文件名相同

 

public class Student {

 

  /*

   * 无参构造函数

   */

  public Student(){}

  /*

   * name的构造函数

   */

  public Student(String s){name=s;}

 

  /*

   * 学生的姓名属性

   */

  private String name;

  /*

   * 学生的学分属性

   */

  private int score;

  public void print(){

     System.out.println(name+"玩的不亦乐乎");

  }

 

 

2.   类与对象的关系

类中定义了具体对象所共有的属性和方法,类可以生成具体的对象

 类是一个自定义的类型

  public static void main(String args[]){

     Student stu = new Student();

     stu.print();

  }

3.   构造器与普通方法

     创建某个类的对象时,格式:类名 变量名 = new 类名()这里的类名()就是构造器方法

重新定义构造器方法就叫构造器方法的重载,代码如下

/*

   * 无参构造函数

   */

  public Student(){}

  /*

   * name的构造函数

   */

  public Student(String s){name=s;}

 

 

1.  方法的重载

在一个类中可以定义多个同名,但是参数类型和数量不同的方法叫方法的重载

 

public class UNstudent extends Student{

  /**

   * 改写父类的study 方法

   */

  public void study(){

     System.out.print("大学生担心挂科");

  }

}

 

 

2.  this关键字

this在类中用来指代当前调用该方法的对象

public loginlistener(JTextField jt1,JPasswordField jt2){

       this.jt1 = jt1;

       this.jt2 = jt2; 

     }          

在构造器中可以调用构造器

3.  构造器方法和一般方法的区别

1)  构造器方法没有任何返回值的定义

2)  构造器方法是在创建对象的时候自动调用的

二、         画图板工程

1.  框架

///////////////drawFrame//////////////////////

在窗体上建立:

1.菜单栏JMemubar

//加一个jmenubar

     javax.swing.JMenuBar bar = new javax.swing.JMenuBar();

     this.setJMenuBar(bar);

    

     //加菜单

     javax.swing.JMenu jm1 = new javax.swing.JMenu("文件   ");

     javax.swing.JMenu jm2 = new javax.swing.JMenu("编辑   ");

     javax.swing.JMenu jm3 = new javax.swing.JMenu("查看   ");

    

     //给菜单条加菜单

     bar.add(jm1);

     bar.add(jm2);

     bar.add(jm2);

2.工具面板toolpanel

3.颜色面板 colorpanel

4.中间面板centerpanel

centerpanel上建立:

5.画板面板drawpanel

//centerpanel里加一个drawpanel

     javax.swing.JPanel drawpanel = new javax.swing.JPanel();

     centerpanel.add(drawpanel);

是在centerpanel上再加面板drawpanel

 

在窗体上设置

  6.设置布局管理器

//centerpanel加布局管理器

     java.awt.FlowLayout centerlay = new java.awt.FlowLayout(java.awt.FlowLayout.LEFT);

     centerpanel.setLayout(centerlay);

布局管理器的建立方法

7.设置监听器

在窗体上获取

8.画布

2.        功能

1)画直线

  public class Line extends Shape{

 

  Line(int x1,int y1,int x2,int y2,Color color){

     this.x1 = x1;

     this.y1 = y1;

     this.x2 = x2;

     this.y2 = y2;

     this.color = color;

  }

  public void draw(Graphics g) {

  g.setColor(color);

  g.drawLine(x1, y1, x2, y2); 

  }

取到形状及颜色 绘出直线

2)画矩形

3)画椭圆

4)画圆角矩形

3.        关键点

1)如何在两个类中公用一个对象

/**

 * 如何在两个类中共用同一个对象

 *    为了把另一个类中的对象JTxtFild用到另一个类中 就要在该类中设置参数jt1来接收这个对象

 *    所以就需要重载构造函数public loginlistener(JTextField jt1,JPasswordField jt2)

 *   来把这个对象JTxtFild 传进来

 *    然后才能在类的方法里用到这个共用的对象

 */

 

2)shape多态实现

shape是抽象类 各种形状都继承shape

shape有一个未定义的方法draw

public abstract void draw(java.awt.Graphics g);

直线类重写draw

public void draw(Graphics g) {

  g.setColor(color);

  g.drawLine(x1, y1, x2, y2); 

  }

listener

sh =new Line(x1,y1,x2,y2,color);//创建直线形状

     //把图形画出来

     sh.draw(g);

用父类的对象调用子类方法是实现了多态

3)重绘队列

首先明确在frame里重绘,而队列是在listener里建立,如何从listenerframe呢?

frame里实例化队列对象

MyQueue<Shape> shapes= new MyQueue<Shape>();

然后通过listener 的构造函数传入

//给画布加鼠标监听器

     DrawListener dlis = new DrawListener(g,Group1,Group2,shapes);

然后在listener里面改变 因为对象是传引用的 所以在listener里改变shapes frame里的shapes也会随之改变

最后通过遍历队列

  Class MyPanel extends JPanel {

 

     /**

      * 重写JPanel中用来绘制窗体的方法

      */

     public void paint(Graphics g) {

       // 调用父类的方法来正确的绘制窗体

       super.paint(g);

       System.out.println("绘制了");

       // 遍历形状队列

       for (int i = 0; i < shapes.size(); i++) {

          // 取出形状

         Shape sh = shapes.get(i);

          // 绘制

          sh.draw(g);

       }

     }

  }

这里为什么要重建一个MyPanel 因为我们获取画布只需要在drawpanel 而如果直接在frame中重写paint方法,则是在整个窗体上获取画布,浪费资源所以这里drawpanel建立时有一点小技巧

javax.swing.JPanel drawpanel = new MyPanel();

4)事件监听机制的理解

/**

 * 事件监听机制的理解

 *  在这个例子中  监听器是放在登录按钮上

 *  从安装上监听器开始,监听器始终处于工作状态(即建立好监听器对象)

 *  知道按下登录按钮  监听器对象开始自动调用方法 实现它的功能

 */

4.      错误点

1)  图片的插入

先将其变成图标建立图标对象 图标->标签->标签加到窗体

javax.swing.ImageIcon icon2 = new      javax.swing.ImageIcon("qq2.jpg");

     // 把图片插入

     JLabel secPic = new JLabel(icon2,JLabel.CENTER);

// 错点1:创建图标标签 要传入图标作为参数

     jf.add(secPic);                                // 错点2leftjlabel的静态变量所以要用类名调用

                                                      // 错点3:是要把流式布局管理器左对齐 因为图片在label

    

2)  设置窗体及各组件大小

/**

 *  1.  Dimension这个类是设置组件的宽度和高度

 *      setsize是设置窗体jframe  设置其他组件的size都是用这个类

 *      具体实现是

 *      //先建立一个dimension对象

 *      Dimension dim = new Dimension(90,20);

 *      //然后在这个组件里有一个方法叫 setPreferredSize 就可以设置组件的大小了

 *   box.setPreferredSize(dim);

 *      drawpanel.setPreferredSize(new Dimension(500,350));

 */

3)  JMenuBar的问题

/**

  *   2.错点: 加菜单条JMenuBar上去的时候 

 *     是加到窗体上 jf.setJMenuBar(bar);

 *     有专门的语句 而不是加组件的 add

 */    

 

 

4)  loginlistener

public class loginlistener implements java.awt.event.ActionListener{

     /*

      * 定义账号和密码  用来承接 输入的账号和密码

      */

     private JTextField jt1;

     private JPasswordField jt2;

    

     /*

      * 改写他的构造函数

      */

     public loginlistener(JTextField jt1,JPasswordField jt2){

       this.jt1 = jt1;

      this.jt2 = jt2;

      

     }

    

     /*

      *实现 ActionListener里的方法

      */

  public void actionPerformed(ActionEvent e) {

     /*

      * 调用文本输入框的gettext函数 来得到 输入的账号和密码

      */

     String name = jt1.getText();

     String pwd = jt2.getText();

     /*

      * 打印账号和密码到java界面上

      */

     System.out.print("账号:"+name+"\n"+"密码:"+pwd);

  }

 

}

 

/**

 * 难点1:监听器里的方法在创建对象的时候就自动调用了

 * 难点2ActionEvent e暂时还没有用到     

 * 难点3:要获得文本区域输入的文字 就要用文本对象来调用gettext    

 * 难点4:因为txtfild passfild都是login.java里的 所以为了在这里使用只能重载构造函数 

 * 难点5:这里的jt1 jt2 分别是 JTextField  JPasswordField类型 而非 string类型 

 * 因为 我们是在 单击这个登录按钮的时候 才将 内容传入并打印出来的

 * 在构造函数中 直接设成 string类型 则表明 把监听器 安到按钮上去的时候 内容就传进来了

 */

       

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics