Java:GUI-AWT(下)
阿新 • • 發佈:2020-08-16
目錄
學習資料
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("你按下了空格鍵!");
}
}
});
}
}