0基礎學GUI,先從基礎開始1
1、AWT
1.2 基本介紹
- 包含很多的類和介面
- 元素:視窗、按鈕、文字框
- java.awt
1.2、Frame
import java.awt.*;
//GUI的第一個介面
public class TestFrame {
public static void main(String[] args) {
//1、例項化一個Frame(可在JDK中看原始碼學習)
Frame frame = new Frame("我的第一個java圖形介面視窗");
//2、設定可見性
frame.setVisible(true);
//3、設定視窗大小
frame.setSize(800,600);
//4、設定背景顏色
frame.setBackground(new Color(255, 55, 55));
//5、彈出的初始位置
frame.setLocation(20,20);
//6、視窗可否改變
frame.setResizable(false);
}
}
- 展示多個視窗
import java.awt.*;
public class TestFrame2 {
public static void main(String[] args) {
//展示多個視窗
MyFrame mf1 = new MyFrame(10, 10, 200, 200, Color.black);
MyFrame mf2 = new MyFrame(10, 210, 200, 200, Color.red);
MyFrame mf3 = new MyFrame(210, 10, 200, 200, Color.green);
MyFrame mf4 = new MyFrame(210, 210, 200, 200, Color.yellow);
}
}
class MyFrame extends Frame{
//設定一個計數器
static int id = 0;
public MyFrame(int x, int y, int w, int h,Color color){
super("Myframe" + (++id));
setBounds(x,y,w,h);
setBackground(color);
setResizable(false);
setVisible(true);
}
}
1.3、Panel
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame();
//開始佈局
Panel panel = new Panel();
//設定佈局
frame.setLayout(null);
frame.setBounds(20,20,400,400);
frame.setBackground(new Color(218, 61, 49));
//panel設定
panel.setBounds(40,40,100,100);
panel.setBackground(Color.darkGray);
//加入皮膚
frame.add(panel);
//顯示
frame.setVisible(true);
//如何關閉視窗?
//監聽事件,介面卡模式,選擇windowsClosing
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
//結束程式
System.exit(0);
}
});
}
}
1.4、佈局管理器
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestFlowLayout {
public static void main(String[] args) {
Frame frame = new Frame("FlowLayout");
//元件-按鈕
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
//設定流式佈局
// frame.setLayout(new FlowLayout());//預設居中
// frame.setLayout(new FlowLayout(FlowLayout.LEFT));//左對齊
frame.setLayout(new FlowLayout(FlowLayout.RIGHT));//右對齊
frame.setSize(200,200);
//把按鈕新增上去
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout");
//元件-按鈕
Button east = new Button("East");
Button south = new Button("South");
Button west = new Button("West");
Button north = new Button("North");
Button center = new Button("Center");
frame.add(east,BorderLayout.EAST);
frame.add(south,BorderLayout.SOUTH);
frame.add(west,BorderLayout.WEST);
frame.add(north,BorderLayout.NORTH);
frame.add(center,BorderLayout.CENTER);
frame.setSize(200,200);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button btn1 = new Button("btn1");
Button btn2 = new Button("btn2");
Button btn3 = new Button("btn3");
Button btn4 = new Button("btn4");
Button btn5 = new Button("btn5");
Button btn6 = new Button("btn6");
frame.setLayout(new GridLayout(3,2));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.add(btn4);
frame.add(btn5);
frame.add(btn6);
// frame.setSize(200,200);
frame.pack();//自動填充合適的大小
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ExperientDemo {
public static void main(String[] args) {
Frame frame = new Frame("ExperientDemo");
frame.setSize(400,300);
frame.setLocation(300,400);
frame.setBackground(Color.BLACK);
frame.setVisible(true);
//先上下分2框
frame.setLayout(new GridLayout(2,1));
//4個皮膚
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new GridLayout(2, 1));
Panel p3 = new Panel(new BorderLayout());
Panel p4 = new Panel(new GridLayout(2, 2));
p1.add(new Button("East-1"),BorderLayout.EAST);
p1.add(new Button("West-1"),BorderLayout.WEST);
p2.add(new Button("p2-btn-1"));
p2.add(new Button("p2-btn-2"));
p1.add(p2,BorderLayout.CENTER);
p3.add(new Button("East-3"),BorderLayout.EAST);
p3.add(new Button("West-3"),BorderLayout.WEST);
for (int i = 0; i < 4; i++) {
p4.add(new Button("for-" + i));
}
p3.add(p4,BorderLayout.CENTER);
frame.add(p1);
frame.add(p3);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
1.5、事件監聽
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestAction {
public static void main(String[] args) {
//按下按鈕,觸發事件
Frame frame = new Frame();
Button button = new Button();
//例項化一個監聽事件
MyActionListener myActionListener = new MyActionListener();
//按鈕新增監聽事件
button.addActionListener(myActionListener);
frame.add(button,BorderLayout.CENTER);
frame.pack();
//關閉視窗
windowClose(frame);
frame.setVisible(true);
}
//關閉視窗的事件
public static void windowClose(Frame frame) {
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//關閉視窗的事件
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("aaa");
}
}
- 多個按鈕共享一個事件
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestActionTwo {
public static void main(String[] args) {
//兩個按鈕,實現同一個監聽
//開始、停止
Frame frame = new Frame();
Button button1 = new Button("start");
Button button2 = new Button("stop");
button2.setActionCommand("button2-stop");
MyMonitor myMonitor = new MyMonitor();
button1.addActionListener(myMonitor);
button2.addActionListener(myMonitor);
frame.add(button1,BorderLayout.NORTH);
frame.add(button2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyMonitor implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//e.getActionCommand() 獲取按鈕的資訊
System.out.println("按鈕被點選了:msg=>" + e.getActionCommand());
}
}
1.6、輸入框TextField監聽
-
1、建立main方法psvm,新建一個MyFrame方法
-
2、新建MyFrame類並繼承Frame類
-
3、新建公眾public的MyFrame()方法
-
4、例項化一個文字框物件TextField:testField
-
5、新增add,值為testField
-
10、例項化一個MyActionListener監聽物件:myActionListener
-
11、testField新增行動監聽方法.addActionListener,值為myActionListener
-
17、testField設定回聲字元.setEchoChar,輸入時看到都是*,系統可正常獲取
-
12、打包pack()
-
13、設定顯示setVisible,值為真true
-
14、新增視窗監聽addWindowListener,值為一個新的視窗介面卡WindowAdapter
-
15、重寫視窗關閉windowClosing方法
- 16、系統System的退出.exit,值為0
-
-
-
-
6、新建一個MyActionListener類繼承ActionListener介面
- 7、重寫動作執行方法actionPerformed
- 8、獲得一些資源的方法e.getsoure(),並強制轉化為對話方塊(TextField),在賦值給對話方塊類TextField的field
- 9、field獲得輸入框文字的方法.getText,並列印輸出sout
- 18、field設定文字.setTest,值空,實現回車清空的效果
- 7、重寫動作執行方法actionPerformed
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestText01 {
public static void main(String[] args) {
//main方法主要功能就是啟動
new MyFrame();
}
}
class MyFrame extends Frame{
public MyFrame(){
//例項化一個文字框
TextField textField = new TextField();
add(textField);
//輸入完成回車後,觸發這個輸入框事件
MyActionListener2 myActionListener2 = new MyActionListener2();
//監聽文字框中輸入的文字
textField.addActionListener(myActionListener2);
//設定回聲字元,輸入時看到都是*,系統可正常獲取
textField.setEchoChar('*');
pack();
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
TextField field = (TextField)e.getSource();//獲得一些資源,返回一個物件
System.out.println(field.getText());//獲得輸入框中的文字
field.setText(""); //回車清空
}
}
1.7、簡易計算器
第一次嘗試:程式導向
- 1、建立main方法
- 13、新建計算器方法Calculator()
- 2、建立計算器類Calculator,繼承Frame
- 3、新建計算器方法Calculator()
- 6、新建3個文字框TextField:num1、num2、num3,值為字元數分別為:10,10,20
- 7、新建1個按鈕Button:button,值為“=”
- 14、button新增行為監聽方法.addActionListener(),值為新建我的計算器監聽方法MyCalculatorListener(),值為num1、num2、num3
- 8、新建1個標籤Label:label,值為“+”
- 9、設定佈局setLayout,值為新建一個流佈局FlowLayout
- 10、依次加入add:num1,label、num2、button、num3
- 11、打包pack()
- 12、設定顯示setVisible,值為真true
- 21、加入視窗監聽addWindowListener()並實現系統關閉(詳解省略,請看上文)
- 3、新建計算器方法Calculator()
- 4、建立計算器監聽類MyCalulatorListener,繼承動作監聽介面ActionListener
- 15、定義私有變數private、型別為文字框TextField的三個變數:num1、num2、num3
- 16、定義共有public、我的計算機監聽方法MyCalculatorListener(),值為文字框型別的TextField:num1、num2、num3
- 17、輸入的num1、num2、num3的值賦值給類中的三個私有變數this.:num1、num2、num3
- 5、重寫動作執行方法actionPerformed(),值為行為動作類ActionEven:e
- 18、獲得加數和被加數:變數num1、2先獲取文字方法.getText(),在通過轉化int型方法Integer.parseInt()轉化為int型,最後賦值給int型的變數n*
- 19、加法運算後返回第三個框:變數num3設定文字方法.setText(),值為n1+n2的和加上+一個空字元“”轉化的String型別
- 20、清除連個文字框的值:變數1、2設定文字方法.setText(),值為空“”
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//簡易計算器
public class TestCalc {
public static void main(String[] args) {
new Calculator();
}
}
//計算器類
class Calculator extends Frame{
public Calculator(){
//3個文字框
TextField num1 = new TextField(10); //字元數
TextField num2 = new TextField(10); //字元數
TextField num3 = new TextField(20); //字元數
//1個按鈕
Button button = new Button("=");
button.addActionListener(new MyCalculatorListener(num1,num2,num3));
//1個標籤
Label label = new Label("+");
//佈局:流式佈局
setLayout(new FlowLayout());
//新增
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//監聽器類
class MyCalculatorListener implements ActionListener{
//獲取三個變數
private TextField num1,num2,num3;
public MyCalculatorListener(TextField num1,TextField num2,TextField num3){
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
@Override
public void actionPerformed(ActionEvent e) {
//獲得加數和被加數
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
//加法運算後返回到第三個框
num3.setText("" + (n1 + n2));
//清除前兩個框的值
num1.setText("");
num2.setText("");
}
}
第二次優化:組合,物件導向
-
1、建立main方法
- 21、新建計算器方法Calculator2().loadFrame
-
2、建立計算器類Calculator2,繼承Frame
-
3、屬性:新建文字框類的三個變數num1、num2、num3
-
4、新建公眾public、無返回值void、載入框架方法loadFrame()
-
5、新建3個文字框TextField,值為字元數分別為:10,10,20,賦值為:num1、num2、num3
-
新建1個標籤Label:label,值為“+”
-
6、新建1個按鈕Button:button,值為“=”
-
7、button新增行為監聽方法.addActionListener(),值為新建我的計算器監聽方法MyCalculatorListener(),值為this
-
8、設定佈局setLayout,值為新建一個流佈局FlowLayout
-
9、依次加入add:num1,label、num2、button、num3
-
10、打包pack()
-
11、設定顯示setVisible,值為真true
-
12、加入視窗監聽addWindowListener()並實現系統關閉(詳解省略,請看上文)
-
-
-
13、建立計算器監聽類MyCalulatorListener,繼承動作監聽介面ActionListener
- 14、在一個類中組合另一個類,獲取計算器:Calculatro2型別calculator2,並賦值其為null
- 15、定義共有public、我的計算機監聽方法MyCalculatorListener(),值為Calculator型別的Calculator
- 16、輸入的Calculator賦值給this.calculator
- 5、重寫動作執行方法actionPerformed(),值為行為動作類ActionEven:e
- 18、獲得加數和被加數:calculator2.num1、2先獲取文字方法.getText(),在通過轉化int型方法Integer.parseInt()轉化為int型,最後賦值給int型的變數n1、n2
- 19、加法運算後返回第三個框:calculator.num3設定文字方法.setText(),值為n1+n2的和加上+一個空字元“”轉化的String型別
- 20、清除連個文字框的值:calculator.num1、2設定文字方法.setText(),值為空“”
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//簡易計算器
public class TestCalculat {
public static void main(String[] args) {
new Calculator2().loadFrame();
}
}
//計算器類
class Calculator2 extends Frame{
//屬性
TextField num1,num2,num3;
//方法
public void loadFrame(){
//主鍵:3個文字框,1個標籤,1個按鈕
num1 = new TextField(10); //字元數
num2 = new TextField(10); //字元數
num3 = new TextField(20); //字元數
Label label = new Label("+");
Button button = new Button("=");
//監聽器
button.addActionListener(new MyCalculatorListener2(this));
//佈局:流式佈局
setLayout(new FlowLayout());
//新增
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//打包、顯示
pack();
setVisible(true);
//視窗關閉
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//監聽器類
class MyCalculatorListener2 implements ActionListener{
//在一個類中組合另外一個類,獲取計算器
Calculator2 calculator2 = null;
public MyCalculatorListener2(Calculator2 calculator2){
this.calculator2 = calculator2;
}
@Override
public void actionPerformed(ActionEvent e) {
//獲得加數和被加數
int n1 = Integer.parseInt(calculator2.num1.getText());
int n2 = Integer.parseInt(calculator2.num2.getText());
//加法運算後返回到第三個框
calculator2.num3.setText("" + (n1 + n2));
//清除前兩個框的值
calculator2.num1.setText("");
calculator2.num2.setText("");
}
}
第三次優化:內部類
-
1、建立main方法psvm
- 18、新建計算器方法Calculator2().loadFrame
-
2、建立計算器類Calculator3,繼承Frame
-
3、屬性:新建文字框類的三個變數num1、num2、num3
-
4、新建公眾public、無返回值void、載入框架方法loadFrame()
-
5、新建3個文字框TextField,值為字元數分別為:10,10,20,賦值為:num1、num2、num3
-
新建1個標籤Label:label,值為“+”
-
6、新建1個按鈕Button:button,值為“=”
-
7、button新增行為監聽方法.addActionListener(),值為新建我的計算器監聽方法MyCalculatorListener(),值為this
-
8、設定佈局setLayout,值為新建一個流佈局FlowLayout
-
9、依次加入add:num1,label、num2、button、num3
-
10、打包pack()
-
11、設定顯示setVisible,值為真true
-
12、加入視窗監聽addWindowListener()並實現系統關閉(詳解省略,請看上文)
-
13、建立計算器監聽類MyCalulatorListener,繼承動作監聽介面ActionListener
-
14、重寫動作執行方法actionPerformed(),值為行為動作類ActionEven:e
-
15、獲得加數和被加數:calculator2.num1、2先獲取文字方法.getText(),在通過轉化int型方法Integer.parseInt()轉化為int型,最後賦值給int型的變數n1、n2
-
16、加法運算後返回第三個框:calculator.num3設定文字方法.setText(),值為n1+n2的和加上+一個空字元“”轉化的String型別
-
17、清除連個文字框的值:calculator.num1、2設定文字方法.setText(),值為空“”
-
-
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//簡易計算器
public class TestCalculator {
public static void main(String[] args) {
new Calculator3().loadFrame();
}
}
//計算器類
class Calculator3 extends Frame{
//屬性
TextField num1,num2,num3;
//方法
public void loadFrame(){
//主鍵:3個文字框,1個標籤,1個按鈕
num1 = new TextField(10); //字元數
num2 = new TextField(10); //字元數
num3 = new TextField(20); //字元數
Label label = new Label("+");
Button button = new Button("=");
//監聽器
button.addActionListener(new MyCalculatorListener3());
//佈局:流式佈局
setLayout(new FlowLayout());
//新增
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//打包、顯示
pack();
setVisible(true);
//視窗關閉
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//監聽器類
private class MyCalculatorListener3 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//獲得加數和被加數
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
//加法運算後返回到第三個框
num3.setText("" + (n1 + n2));
//清除前兩個框的值
num1.setText("");
num2.setText("");
}
}
}
1.8、畫筆
- 1、建立main方法psvm
- 18、新建畫筆方法MyPaint().loadFrame()
- 2、建立畫筆類MyPaint,繼承Frame
- 3、新建公眾public、無返回值void、載入框架方法loadFrame()
- 設定邊界setBounds,值為20,20處實現600*600的框架
- 設定可見方法,值為真(詳情省略)
- 重寫畫筆:公眾的public、無返回值void、畫筆方法paint(),值為Graphics類的g
- 設定顏色方法.setcolor(),值為顏色類的紅色red
- 繪製空心圓方法.drawOval(),值為50,50處繪製100*100的空心圓
- 繪製實心圓方法.fillOval(),值為150,150處繪製100*100的實心圓
- 設定顏色方法.setcolor(),值為顏色類的黃色yellow
- 繪製實心長方形方法.fillRect(),值為200,20處繪製200*100的實心長方形
- 最後,當畫筆用完後,將他的顏色還原成預設黑色:設定顏色方法.setcolor(),值為顏色類的黑色black
- 3、新建公眾public、無返回值void、載入框架方法loadFrame()
import java.awt.*;
public class TestPaint {
public static void main(String[] args) {
new MyPaint().loadFrame();
}
}
class MyPaint extends Frame{
public void loadFrame(){
setBounds(20,20,600,600);
setVisible(true);
}
//畫筆
@Override
public void paint(Graphics g){
g.setColor(Color.red); //選擇顏色:紅
g.drawOval(50,50,100,100); //繪製100*100的空心圓
g.fillOval(150,150,100,100); //繪製100*100的實心圓
g.setColor(Color.yellow); //設定顏色:黃
g.fillRect(200,20,200,100); //繪製200*100的實心長方形
//養成習慣,畫筆用完,將他還原成最初的顏色
g.setColor(Color.black);
}
}
1.9、滑鼠監聽
-
1、建立main方法psvm
- 18、新建框架方法MyFram(),值為畫圖
-
2、建立我的框架類MyFrame,繼承Frame
-
11、屬性佇列ArrayList一個點points
-
3、新建公眾public、我的框架方法MyFrame(),值為String型別的標題title
-
4、super(),值為title
-
12、設定邊界方法setBounds(),值為200,200,長度400,寬度300的長方形
-
13、存滑鼠點選的點:新建佇列,賦值到點points
-
22、設定可見方法setVisible(),值為真true
-
5、新增滑鼠監聽:this.addMouseListener(),值為新建一個我的滑鼠監聽方法MyMouseListener()
-
-
6、重寫公眾的public,無返回值void,畫筆方法paint(),值為Graphics型別的g
-
14、將點points的迭代方法iterator()賦值給迭代器型別Iterator的iterator
-
15、while迴圈,值為如果iterator後面還有
-
16、iterator的下面next()賦值給Point型別的point
-
17、設定顏色方法g.setColor(),值為藍色
-
18、設定實心圓方法g.fillOval(),值為point.x,point.y,寬度10,高度10
-
-
-
19、新增一個點到介面上:公眾的public、無返回值void、新增點方法addPaint(),值為Point型別的point
- 20、點points新增add(),值為point
-
7、私有的private、我的滑鼠監聽類MyMouseListener,繼承滑鼠介面卡MouseAdapter
- 8、重寫滑鼠點選方法:公共的public、無返回值viod、滑鼠點選方法mousePressed(),值為滑鼠事件類MouseEven的e
- 9、獲得資源e.getSource(),強制轉換(MyFrame),並賦值於MyFrame類的myFrame
- 10、新建一個Point(),值為e.getX(),e.getY()
- 21、我的框架myFrame,新增點的方法.addpaint(),值為Point()
- 23、設定重畫.repaint(),讓每次點選滑鼠都需要重畫一次,相當於是重新整理
- 8、重寫滑鼠點選方法:公共的public、無返回值viod、滑鼠點選方法mousePressed(),值為滑鼠事件類MouseEven的e
-
package cn.wisdex.lesson03;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class TestMouseListener {
public static void main(String[] args) {
new MyFrame("畫圖");
}
}
class MyFrame extends Frame{
ArrayList points;
public MyFrame(String title) {
super(title);
setBounds(200,200,400,300);
//存滑鼠點選的點
points = new ArrayList<>();
setVisible(true);
//新增滑鼠
this.addMouseListener(new MyMouseListener());
}
@Override
public void paint(Graphics g) {
//畫畫,監聽滑鼠的事件
Iterator iterator = points.iterator();
while (iterator.hasNext()){
Point point = (Point)iterator.next();
g.setColor(Color.BLUE);
g.fillOval(point.x,point.y,10,10);
}
}
//新增一個點到介面上
public void addPaint(Point point){
points.add(point);
}
//通過繼承滑鼠介面卡模式,重新方法
private class MyMouseListener extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
MyFrame myFrame = (MyFrame) e.getSource();
//確定滑鼠的點
myFrame.addPaint(new Point(e.getX(),e.getY()));
//每次點選滑鼠都需要重畫一遍,相當於是重新整理
myFrame.repaint();
}
}
}
相關文章
- 0基礎應該怎麼學Linux?Linux如何從零開始?Linux
- 從零開始學AB測試:基礎篇
- 從零開始學 Python 之基礎語法Python
- 從0開始的高併發(一)--- Zookeeper的基礎概念
- 演算法基礎 --- 從swap開始演算法
- 從 0 開始寫 AI 評測平臺 -- streamlit 基礎介紹AI
- 0基礎如何開始學習Python?看完這篇就懂了!Python
- webpack從0到1超詳細超基礎學習教程Web
- 從零開始學Linux運維難嗎?Linux基礎Linux運維
- 0基礎學網路安全需要什麼基礎?
- 從零開始學黑蘋果-基礎安裝教程(10.11.6)蘋果
- 0基礎Java自學之路Java
- 0基礎學如何學web前端?Web前端
- python基礎筆記0_1Python筆記
- 從零開始-基礎流程圖編輯庫流程圖
- Re:從零開始的Linux之路(基礎篇)Linux
- Java 執行緒基礎,從這篇開始Java執行緒
- 從零開始——GO語言基礎語法Go
- Kotlin基礎篇——從型別系統開始Kotlin型別
- 一個從0到1的webpack打包vue基礎教程WebVue
- 從0開始寫一個基於Flutter的開源中國客戶端(2)——Dart語法基礎Flutter客戶端Dart
- 從0開始寫一個基於Flutter的開源中國客戶端(4)——Flutter佈局基礎Flutter客戶端
- 0基礎學怎麼學習python?Python
- 從零開始搭建React應用(一)——基礎搭建React
- Python打牢基礎,從19個語法開始!Python
- 【0基礎學爬蟲】爬蟲基礎之資料儲存爬蟲
- 【0基礎學爬蟲】爬蟲基礎之檔案儲存爬蟲
- python基礎學習1Python
- 高中化學基礎(1)
- 從零開始教你用vuepress搭建自己的部落格(1)—基礎篇Vue
- [Python教程]0基礎不用怕,從0到1輕鬆教你入門PythonPython
- 從 0 到 1 開發壓力測試框架: Python 基礎,壓測框架開發框架Python
- 人工智慧必備數學基礎:高等數學基礎(1)人工智慧
- 資料分析從零開始實戰 | 基礎篇(三)
- 資料分析從零開始實戰 | 基礎篇(二)
- 資料分析從零開始實戰 | 基礎篇(一)
- javaSE從零開始04_java的基礎語法Java
- 0基礎能否學會Python?如何學習?Python