MENU

TextField 和 Graphics 类

July 26, 2018 • Read: 3646 • Java阅读设置

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 方法在方法中可以获取该对象的信息,并做相应的处理
  • 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

  • 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 ('*'),这个方法的作用是设置回显字符,就是你输入的字符,全部用该方法内的字符来替代,比方说我们平时输入密码,就由星号替代

加法器展开目录

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

持有对方引用实现加法器展开目录

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

内部类实现加法器展开目录

  • 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)
  • 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,这个是编程的一个好习惯,叫重设现场

Last Modified: May 12, 2021
Archives Tip
QR Code for this page
Tipping QR Code