前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TextField和Graphics类

TextField和Graphics类

作者头像
mathor
发布2018-08-03 17:35:40
8620
发布2018-08-03 17:35:40
举报
文章被收录于专栏:mathormathor

TextField类

  • java.awt.TextField类用来创建文本框对象
  • TextField有如下常用方法
    • TextField()
    • TextField(int columns)
    • TextField(String text)
    • TextField(String text,int columns)
    • void setText(String t)
    • String getText()
    • void setEchoChar(char c)
    • void setEditable(boolean b)
    • boolean isEditable()
    • void setBackground(Color c)
    • void select(int selectionStart,int selectionEnd)
    • void selectAll()
    • void addActionListener(ActionListener e)
TextField事件监听
  • TextField对象可能发生Action(光标在文本框内敲回车)事件。与该事件对应的事件类是java.awt.event.ActionEvent
  • 用来处理ActionEvent事件是实现了java.awt.event.ActionListener接口的类的对象,ActionListener接口定义有方法:
    • public void actionPerformed(ActionEvent e)
  • 实现该接口的类要在该方法中添加处理该事件(Action)的语句
  • 使用addActionListener(Action e)方法为TextField对象注册一个ActionListener对象,当TextField对象发生Action事件时,会生成一个ActionEvent对象,该对象作为参数传递给ActionListener对象的actionPerformed方法在方法中可以获取该对象的信息,并做相应的处理
代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
public class TFActionEvent {
    public static void main(String[] args) {
        new TFFrame();
    }
}
class TFFrame extends Frame {
    TFFrame() {
        TextField tf = new TextField();
        add(tf);
        tf.addActionListener(new TFActionListener());
        pack();
        setVisible(true);
    }
}
class TFActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        TextField tf = (TextField)e.getSource();
        System.out.println(tf.getText());
        tf.setText("");
    }
}

 这段小程序最重要的部分在于,我需要将TFFrame类中的tf相关信息传到TFActionListener中,这样才能使用tf对象的一些方法,比方说获取其文本框的内容,修改其文本框的内容等等,但是tf是另一个类的对象,并不是TFActionListener类中的对象,如何获取呢?之前也说到了,actionPerformed传入的参数是一个对象,这个对象中有事件发生的所有信息,其中就有getSource方法,可以返回发生事件的对象,但是返回的是一个Object类型的对象,需要强制转换为TextField

image
image
代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
public class TFActionEvent2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new TFFrame();
    }

}
class TFFrame extends Frame {
    TFFrame() {
        TextField tf = new TextField();
        add(tf);
        tf.addActionListener(new TFActionListener());
        tf.setEchoChar('*');
        pack();
        setVisible(true);
    }
}
class TFActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        TextField tf = (TextField)e.getSource();
        System.out.println(tf.getText());
        tf.setText("");
    }
}

 这个程序跟上一个程序差不多,就多了一行代码tf.setEchoChar('*'),这个方法的作用是设置回显字符,就是你输入的字符,全部用该方法内的字符来替代,比方说我们平时输入密码,就由星号替代

加法器
代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
public class TFMath {
    public static void main(String[] args) {
        new TFFrame1().launchFrame();
    }
}
class TFFrame1 extends Frame {
    TextField num1,num2,num3;
    public void launchFrame() {
        num1 = new TextField(10);//10字符宽
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label lblplus = new Label("+");
        Button btnEqual = new Button("=");
        btnEqual.addActionListener(new MyMonitor(num1,num2,num3));
        setLayout(new FlowLayout());
        add(num1);
        add(lblplus);
        add(num2);
        add(btnEqual);
        add(num3);
        pack();
        setVisible(true);
    }
}
class MyMonitor implements ActionListener {
    TextField num1,num2,num3;
    public MyMonitor(TextField num1,TextField num2,TextField num3) {
        this.num1 = num1;
        this.num2 = num2;
        this.num3 = num3;
    }
    public void actionPerformed(ActionEvent e) {
        int n1 = Integer.parseInt(num1.getText());
        int n2 = Integer.parseInt(num2.getText());
        num3.setText("" + (n1+n2));
    }
}
持有对方引用实现加法器
代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
public class TFMath {
    public static void main(String[] args) {
        new TFFrame1().launchFrame();
    }
}
class TFFrame1 extends Frame {
    TextField num1,num2,num3;
    public void launchFrame() {
        num1 = new TextField(10);//10字符宽
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label lblplus = new Label("+");
        Button btnEqual = new Button("=");
        btnEqual.addActionListener(new MyMonitor(this));
        setLayout(new FlowLayout());
        add(num1);
        add(lblplus);
        add(num2);
        add(btnEqual);
        add(num3);
        pack();
        setVisible(true);
    }
}
class MyMonitor implements ActionListener {
    TFFrame1 tf = null;
    MyMonitor(TFFrame1 tf) {
        this.tf = tf;
    }
    public void actionPerformed(ActionEvent e) {
        int n1 = Integer.parseInt(tf.num1.getText());
        int n2 = Integer.parseInt(tf.num2.getText());
        tf.num3.setText("" + (n1+n2));
    }
}
内部类实现加法器
代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
public class TFMath {
    public static void main(String[] args) {
        new TFFrame1().launchFrame();
    }
}
class TFFrame1 extends Frame {
    TextField num1,num2,num3;
    public void launchFrame() {
        num1 = new TextField(10);//10字符宽
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label lblplus = new Label("+");
        Button btnEqual = new Button("=");
        btnEqual.addActionListener(new MyMonitor());
        setLayout(new FlowLayout());
        add(num1);
        add(lblplus);
        add(num2);
        add(btnEqual);
        add(num3);
        pack();
        setVisible(true);
    }
    private class MyMonitor implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int n1 = Integer.parseInt(num1.getText());
            int n2 = Integer.parseInt(num2.getText());
            num3.setText("" + (n1+n2));
        }
    }
}

Graphics类

  • 每个Component都有一个paint(Graphics g)用于实现绘图的目的,每次重画该Component时都自动调用paint方法
  • Graphics类中提供了许多绘图方法,如:
    • drawRect(int x,int y,int width,int height)
    • fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)
代码语言:javascript
复制
import java.awt.*;
public class TestPaint {
    public static void main(String[] args) {
        new PaintFrame().launchFrame();
    }
}
class PaintFrame extends Frame {
    public void launchFrame() {
        setBounds(200,200,640,480);
        setVisible(true);
    }
    public void paint(Graphics g) {
        Color c = g.getColor();
        g.setColor(Color.red);
        g.fillOval(50,50,30,30);
        g.setColor(Color.green);
        g.fillRect(80,80,40,40);
        g.setColor(c);
    }
}

 主函数中并没有调用paint方法,但是其实仔细看上面的说明就会知道,每次重画的时候都会自动调用paint方法,什么时候会重画,比方说先把这个窗口隐藏,然后再显示这个窗口,或者创建这个窗口的时候,都会重画。使用Graphics 对象的时候,就把这个对象当作一个“画笔”去理解。最下面有一行将画笔颜色重新设为c,这个是编程的一个好习惯,叫重设现场

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TextField类
    • TextField事件监听
      • 加法器
        • 持有对方引用实现加法器
          • 内部类实现加法器
          • Graphics类
          相关产品与服务
          云开发 CloudBase
          云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档