1. 程式人生 > 實用技巧 >Java:GUI-AWT(下)

Java:GUI-AWT(下)

目錄

學習資料

b站狂神說:https://www.bilibili.com/video/BV1DJ411B75F

輸入框與監聽

package com.zy7y.gui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @ProjectName: JavaSE
 * @PackageName: com.zy7y.gui
 * @Author: zy7y
 * @Date: 2020/8/15 下午8:26
 * @Description:
 */
public class TestText01 {
    public static void main(String[] args) {
       new MyFrame1();

    }
}

class MyFrame1 extends Frame{
    public MyFrame1(){
        TextField textField = new TextField();
        add(textField);
        // 監聽文字框輸入的文字
        MyActionListener myActionListener = new MyActionListener();
        // 按下enter 觸發事件
        textField.addActionListener(myActionListener);

        // 設定替換編碼; 加密操作,輸入內容將顯示*
        textField.setEchoChar('*');
        setVisible(true);
        pack();
    }
}

class MyActionListener implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
//        e.getSource(); // 獲得一些資源,返回的是一個物件
        TextField textField = (TextField) e.getSource();
        System.out.println(textField.getText()); // 獲得輸入框的文字
        // 將文字設定為空
        textField.setText("");
    }
}

簡易加法計算器

package com.zy7y.gui.awt;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * @ProjectName: JavaSE
 * @PackageName: com.zy7y.gui.awt
 * @Author: zy7y
 * @Date: 2020/8/15 下午8:51
 * @Description:
 */
public class Calc {
    public static void main(String[] args) {
        new CalcFrame().loadFrame();
    }
}

// 佈局
class CalcFrame extends Frame{
    // 屬性
    TextField textField,textField1,textField2;

    public void loadFrame(){
        setTitle("只能算加法的計算器.");
        textField = new TextField(10); // 10位文字框的長度
        textField1 = new TextField(10); // 10位文字框的長度
        textField2 = new TextField(20); // 10位文字框的長度

        // 按鈕
        Button result = new Button("=");

        // 標籤
        Label label = new Label("+");

        // 流式佈局
        setLayout(new GridBagLayout());
        add(textField);
        add(label);
        add(textField1);
        add(result);
        add(textField2);

        // 處理 = 號的事件
        ResultListens resultListens = new ResultListens();
        result.addActionListener(resultListens);


        closeWindows();
        // 設定可見
        setVisible(true);


    }

    // 關閉視窗的方法
    public void closeWindows(){
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    // 事件處理:用內部類 直接就可以獲取到外部類裡面的屬性
    private class ResultListens implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            // 獲得文字內容
            int n1 = Integer.parseInt(textField.getText());
            int n2 = Integer.parseInt(textField1.getText());
            // String.valueOf, 可以轉換成字串
            textField2.setText(String.valueOf(n1 + n2));

            // 清除前面的框
            textField.setText("");
            textField1.setText("");

        }
    }

}

畫筆

package com.zy7y.gui.awt;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * @ProjectName: JavaSE
 * @PackageName: com.zy7y.gui.awt
 * @Author: zy7y
 * @Date: 2020/8/15 下午9:25
 * @Description:
 */
public class TestPaint {

    public static void main(String[] args) {
        new MyPaint().loadFrame();
    }
}

class MyPaint extends Frame{

    public void loadFrame(){
        setTitle("畫筆實操");
        setBounds(200,200,600,500);
        setVisible(true);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    // 重寫paint方法,並能直接加載出對應的操作
    @Override
    public void paint(Graphics g){
        g.setColor(Color.red);
        // 實心的圓
        g.fillOval(100,100,100,100);
    }
}

滑鼠監聽器、模擬畫圖工具

package com.zy7y.gui.awt;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * @ProjectName: JavaSE
 * @PackageName: com.zy7y.gui.awt
 * @Author: zy7y
 * @Date: 2020/8/16 上午11:55
 * @Description: 滑鼠監聽
 */
public class MouseListener {
    public static void main(String[] args) {
        new MyFrameMouse("畫圖工具");
    }
}

class MyFrameMouse extends Frame{
    // 存點的集合
    ArrayList points;
    public MyFrameMouse(String title) {
        super(title);
        setBounds(300,300,300,300);
        // 存取滑鼠點
        points = new ArrayList<>();

        // 滑鼠監聽
        addMouseListener(new MyMouse());
        setVisible(true);
    }

    // 重寫畫筆
    @Override
    public void paint(Graphics g){
        // 迭代器
        Iterator iterator = points.iterator();
        // iterator.hasNext 還能迭代否
        while (iterator.hasNext()){
            Point point = (Point) iterator.next();
            g.setColor(Color.green);
            g.fillOval(point.x,point.y,10,10);
        }
    }

    // 新增點
    public void addPaint(Point point){
        points.add(point);
        // 列印檢視當前集合中有的資料:[java.awt.Point[x=162,y=157]]
        //[java.awt.Point[x=162,y=157], java.awt.Point[x=158,y=212]]
        //[java.awt.Point[x=162,y=157], java.awt.Point[x=158,y=212], java.awt.Point[x=229,y=143]]
        System.out.println(points);
    }

    // 介面卡模式
    private class MyMouse extends MouseAdapter {
        @Override
        public void mousePressed(MouseEvent e) {
            MyFrameMouse myFrameMouse = (MyFrameMouse)e.getSource();
            myFrameMouse.addPaint(new Point(e.getX(),e.getY()));

            // 重畫
            myFrameMouse.repaint();
        }
    }
}

效果圖:

視窗監聽事件

package com.zy7y.gui.awt;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * @ProjectName: JavaSE
 * @PackageName: com.zy7y.gui.awt
 * @Author: zy7y
 * @Date: 2020/8/16 下午1:05
 * @Description: 視窗事件
 */
public class TestWindow {
    public static void main(String[] args) {
        new MyWindowEvent();
    }
}

    //
class MyWindowEvent extends Frame {
    public MyWindowEvent() {
        super("視窗事件");
        setBounds(300, 300, 300, 300);
        setVisible(true);
        addWindowListener(
                // 匿名內部類
                new WindowAdapter() {
                    @Override
                    public void windowClosing(WindowEvent e) {
                        System.out.println("視窗關閉");
                    }

                    // 視窗啟用
                    @Override
                    public void windowActivated(WindowEvent e) {
                        super.windowActivated(e);
                        System.out.println("視窗擁有焦點");
                    }
                }
        );
    }
}

鍵盤監聽事件

package com.zy7y.gui.awt;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

/**
 * @ProjectName: JavaSE
 * @PackageName: com.zy7y.gui.awt
 * @Author: zy7y
 * @Date: 2020/8/16 下午1:17
 * @Description: 鍵盤監聽
 */
public class TestKeyListener {
    public static void main(String[] args) {
        new MyKeyFrame();
    }
}

class MyKeyFrame extends Frame{
    public MyKeyFrame(){
        super("鍵盤監聽");
        setBounds(200,200,200,200);
        setVisible(true);
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {
                super.keyTyped(e);
            }

            // 鍵盤按下
            @Override
            public void keyPressed(KeyEvent e) {
                // 獲得輸入鍵的字元值,但是 上下左右箭頭,空格好像不行
                System.out.println(e.getKeyChar());
                // 獲得輸入鍵對應的code
                System.out.println(e.getKeyCode());
                //
                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    System.out.println("你按下了空格鍵!");
                }
            }
        });
    }
}