第14篇-JAVA GUI編程


第14篇-JAVA GUI編程

  • 每篇一句 :道路一開始開闢的時候總是存在障礙的

  • 初學心得: 原本下定決心才能開始的事情也變得理所當然

  • (筆者:JEEP/711)[JAVA筆記 | 時間:2017-04-25| JAVA GUI編程 ]


1.什麼是界面

圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指採用圖形方式顯示的計算機操作用戶界面 
與早期計算機使用的命令行界面相比,圖形界面對於用戶來說在視覺上更易於接受

2.Java 基礎類 JFC 的基本概念

主要包含5 個 API: AWT, JavaD, Accessibility,Drag & Drop,Swing 
它提供了幫助開發人員設計複雜應用程序的一整套應用程序開發包

3.什麼是組件(Component)

組件構成圖形界面零部件面板按鈕下拉選等等,具有圖形界面,並能完成一定功能的封裝體

4.什麼是容器(Container)

用於包含其它組件的組件

5.什麼是Swing

  • Swing 是 Java 平臺的 UI —— 它充當處理用戶和計算機之間全部交互的軟件 
    它實際上充當用戶和計算機內部之間的中間人

  • Swing組件是Java語言提供的第二代GUI設計工具包 
    它以AWT爲基礎在AWT內容的基礎上新增或改進了一些GUI組件使得GUI程序功能更強大設計更容易、更方便

Swing 組件主要爲文本處理、按鈕、標籤、列表、pane、組合框、滾動條、滾動 pane、菜單、表格和樹提供了組件

  • JButton 能顯示文本和圖形的按鈕,它是AWT按鈕組件的替代組件

  • JCheckBox 能顯示文本和圖形的複選框,它是AWT選擇組件的替代組件

  • JCheckBoxMenuItem 一個複選框菜單項,它是AWT的複選框菜單項組件的替代組件

  • JComboBox 帶下拉列表的文本框,它是AWT選擇組件的替代組件

  • JComponent 所有輕量J組件的基類

  • JDesktopPane 內部窗體的容器

  • JDialog Swing對話框的基類,它擴展了AWT Dialot類

  • JEditorPane 用於編輯文本的文本窗格

  • JFrame 擴展java.awt.Frame的外部窗體

  • JInternalFrame 在JDesktopPane中出現的內部窗體

  • JLabel 可顯示文本和圖標的標籤,它是AWT標籤組件的替代組件

  • JLayeredPane 能夠在不同層上顯示組件的容器

  • JList 顯示選項列表的組件,它是AWT列表組件的替代組件

  • JMenu 菜單條中顯示的一個菜單,它是AWT菜單組件的替代組件

  • JMenuBar 用於顯示菜單的菜單條,它是AWT菜單條組件的替代組件

  • JMenuItem 菜單項,它是AWT菜單項組件的替代組件

  • JOptionPane 顯示標準的對話框,如:消息和問題對話框

  • JPanel 通用容器,它是AWT面板和畫布組件的替代組件

  • JPasswordfield JTextField的擴展,使輸入的字符不可見

  • JPopupMenu 彈出式菜單,它是AWT彈出式菜單組件的替代組件

  • JProgressBar 進度指示器

  • JRadioButton 單選按鈕,它是AWT複選框組件的替代組件

  • JRootPane 頂層容器,它包含一個玻璃窗格,一個層窗格,一個內容窗格和一個可選的菜單條

  • JScrollBar 滾動條,它是AWT滾動條組件的替代組件

  • JScrollPane 滾動窗格,它是AWT滾動窗格組件的替代組件

  • JSeparator 水平或垂直分隔條

  • JSlider 滑桿

  • JSplitPane 有兩個分隔區的容器,這兩個分隔區可以水平排列或者垂直排列且分隔區的大小能自動調整

  • JTabbedPane 帶選項卡的窗格

  • JTable 表格

  • JTableHeader 表格頭

  • JTextArea 用於輸入多行文本的文本域,它是AWT文本域組件的替代組件

  • JTestComponent 文本組件的基類,它替代AWT的TextComponent類

  • JTextField 單行文本域,它替代AWT的單行文本域組件

  • JTextPane 簡單的文本編輯器

  • JToggleButton 兩種狀態的按鈕,它是JCheckBox和JRadioButton組件的基類

  • JToolBar 工具條

  • JToolTip 當光標停留在一個組件上時,該組件上顯示的一行文字

  • JTree 用於按鈕層次組織數據的結構控件

  • JViesport 用於瀏覽可滾動組件的視口

  • JWindow 外部窗口,它是java.awt.Window的擴展

6.什麼是AWT

AWT: AWT 是抽象窗口工具集(Abstract Window Toolkit)的英文縮寫,爲用戶界面程序提供所需要的組件

  • 例如按鈕、標籤、複選框、下拉菜單、畫布、文本輸入區、列表等

  • 此外,AWT還提供事件類、監聽器類、圖形處理工具、2D 圖形等的支持

  • AWT 存在缺少剪貼板、打印支持等缺陷,甚至沒有彈出式菜單和滾動窗口

java.awt包,在這個包中,提供了基本的java程序GUI設計工具:

  • Component/MenuComponent

  • Container

  • LayoutMa

Swing: 不是真正使用原生平臺提供設備,而是僅僅在模仿,因此可以在任何平臺上使用Swing 圖形用戶界面組件

  • Swing 絕大部分組件都是輕量級組件,它不像重量級組件那樣必須在它們自己本地窗口中繪製,而是在它們所在的重量級窗口中繪製,它比AWT適應性更強

Container(容器)

  • 容器(Container)實際上是Component的子類,因此容器類對象本身也是一個組件,具有組件的所有性質,另外還具有容納其它組件和容器的功能。

  • 容器類對象可使用方法add()添加組件 
    兩種主要的容器類型

  • Window:可獨立存在的頂級窗口

  • Panel:可作爲容器容納其它組件,但不能獨立存在,必須被添加到其它容器中(如Window 或 Applet)

Container常用方法:

  • add()

  • setLocation():設置位置

  • setSize():設置大小

  • setBoundes():同時設置大小、位置

  • setVisible()

  • pack()

Frame類:

  • 代表一個窗口,是Window類的子類

  • 有標題,可通過拖拉改變大小

  • 初始化時爲不可見,可用setVisible(true)使其顯示出來

  • 使用BorderLayout作爲其缺省佈局管理器

  • 使用setLayout方法改變佈局管理器

Container的佈局管理器

  • AWT中的佈局管理器有:

  • FlowLayout

  • BorderLayout

  • GridLayout

  • CardLayout

  • GridBagLayout

基本組件

  • Button:按鈕,可接收單擊操作

  • Canvas:用於繪圖的畫布

  • Checkbox:複選框組件(也可變成單選框組件)

  • CheckboxGroup:用於將多個Checkbox組件組合成一組,一組Checkbox組件將只有一個可以被選中,即全部變成單選框組件

  • Choice:下拉式選擇框組件

  • Frame:窗口,在GUI程序裏通過該類創建窗口

  • Label:標籤類,用於放置提示性文本

  • List。列表框組件,可以添加多項條目

  • Panel:不能單獨存在基本容器類,必須放到其他容器中

  • Scrollbar:滑動條組件。如果需要用戶輸入位於某個範圍的值,就可以使用滑動條組件。如調色板中設置RGB的三個值所用的滑動條。當創建一個滑動條時,必須指定它的方向、初始值、滑塊的大小、最小值和最大值

  • ScrollPane:帶水平及垂直滾動條的容器組件

  • TextArea:多行文本域

  • TextField:單行文本框

AWT的事件處理方式

  • 委派式事件處理(delegation)—-個別的組件將整個事件處理委託給特定的對象,當該組件發生指定的事件時,就通知所委託的對象,有這個對象來處理這個事件,這個受委託處理事件的對象稱爲事件傾聽對象(event listener)

  • 每個組件均可以針對特定的事件指定一個或多個事件傾聽對象,由這些事件傾聽對象負責處理事件

創建菜單 :創建一個菜單步驟:

  • 創建一個MenuBar對象,將其放置到菜單容器中(如Frame)

  • 創建若干個Menu對象,將其放置到MenuBar對象中

  • 創建若干個MenuItem對象,將其放置到Menu對象中

MenuItem包括

  • MenuItem:普通的菜單項

  • CheckboxMenuItem:可以選擇的菜單項

右鍵菜單 :右鍵菜單使用PopupMenu對象表示,創建右鍵菜單的步驟如下:

  • (1)創建PopupMenu的實例

  • (2)創建多個MenuItem實例,依次將這些實例加入PopupMenu中

  • (3)將PopupMenu加入到目標組件之中

  • (4)爲需要出現上下文菜單的組件編寫鼠標監聽器,當用戶釋放鼠標右鍵時彈出右鍵菜單

AWT中畫圖:創建Canvas類或Panel的子類,並覆蓋paint方法

  • 每當組件出現時調用paint方法

  • 每個組件都有一個Graphics對象

  • Graphics類實現了很多繪圖方法

Graphics類:Graphics是一個抽象的畫筆對象,Graphics可以在組件上繪製豐富多彩的幾何圖形和位圖,Graphics類提供瞭如下幾個方法用於繪製幾何圖形和位圖

  • drawLine:繪製直線

  • drawString:繪製字符串

  • drawRect:繪製矩形

  • drawRoundRect:繪製圓角矩形

  • drawOval:繪製橢圓形狀

  • drawPolygon:繪製多邊形邊框

  • drawArc:繪製一段圓弧(可能是橢圓的圓弧)

  • drawPolyline:繪製折線

  • fillRect:填充一個矩形區域

  • fillRoundRect:填充一個圓角矩形區域

  • fillOval:填充橢圓區域

  • fillPolygon:填充一個多邊形區域

  • fillArc:填充圓弧和圓弧兩個端點到中心連線所包圍的區域。

  • drawImage:繪製位圖

7.菜單和列表

JMenu/JMenuItem/JMenuBar(菜單、菜單項、菜單條) 
1.菜單條:類JMenuBar的實例就是菜單條。例如,以下代碼創建菜單條對象menubar: 
JMenuBar menubar = new JMenuBar(); 
在窗口中增設菜單條,必須使用JFrame類中的setJMenuBar()方法 
例如,代碼:setJMenuBar(menubar);

類JMenuBar的常用方法有:

  • add(JMenu m):將菜單m加入到菜單條中

  • countJMenus():獲得菜單條中菜單條數

  • getJMenu(int p):取得菜單條中的菜單

  • remove(JMenu m):刪除菜單條中的菜單m

2. 菜單:由類JMenu創建的對象就是菜單,類JMenu的常用方法如下:

  • JMenu():建立一個空標題的菜單

  • JMenu(String s):建立一個標題爲s的菜單

  • add(JMenuItem item):向菜單增加由參數item指定的菜單選項

  • add(JMenu menu):向菜單增加由參數menu指定的菜單。實現在菜單嵌入子菜單

  • addSeparator():在菜單選項之間畫一條分隔線

  • getItem(int n):得到指定索引處的菜單項

  • getItemCount():得到菜單項數目

  • insert(JMenuItem item,int n):在菜單的位置n插入菜單項item

  • remove(int n):刪除菜單位置n的菜單項

  • removeAll():刪除菜單的所有菜單項

3.菜單項:類JMenuItem 的實例就是菜單項。類JMenuItem的常用方法如下:

  • JMenuItem():構造無標題的菜單項

  • JMenuItem(String s):構造有標題的菜單項

  • setEnabled(boolean b):設置當前單項是否可被選擇

  • isEnabled():返回當前菜單項是否可被用戶選擇

  • getLabel():得到菜單項的名稱

  • setLabel():設置菜單選項的名稱

  • addActionListener(ActionListener e):爲菜單項設置監視器。監視器接受點擊某個菜單的動作事件

8.事件監聽

什麼是事件

  • 用戶用於交互而產生的鍵盤或鼠標動作

  • 響應用戶的動作稱爲處理事件

JAVA事件的委託機制

  • 1.事件源先註冊好監聽器(監聽器負責監聽事件的產生),(監聽器是實現監聽器接口的類,監聽器接口定義了一個要成爲監聽器的類應該實現的方法,同時監聽器接口都繼承與監聽器接口基類java.util.EventListener 雖然這個接口沒有定義任何需要實現的方法,但是它有它的用途,它作爲一種標誌,標誌着繼承自它的接口是監聽器接口)

  • 2.事件源產生事件(前提: 聲明好相應的事件類,事件類都必須繼承自JAVA的事件基類java.util.EventObject,EventObject(Object source)是EventObject唯一的構造方法,這意味着所有事件必須在實例化時就指定事件源,這一點很好,要求在產生事件的時候明確 是誰產生的 爲後面的尋根提供保障)

  • 3.事件源廣播事件給任意一個在它上面註冊的監聽器

  • 4.監聽器接受事件並執行相應的事件處理方法

9.事件的處理機制

Java的事件處理機制

  • 1.事件源(event source) 
    事件源是一個能夠註冊監聽器對象併發送事件對象的對象。例如按鈕或者滾動條就是事件源

  • 2.事件,事件類型和事件對象 
    事件一般是用戶在界面上的一個操作,當一個事件發生時,該事件用一個事件對象來表示,事件對象有對應的事件類 
    不同的事件類描述不同類型的用戶動作,不同的事件源可以產生不同類別的事件。例如,按鈕可以發送ActionEvent對象,而窗口可以發送WindowEvent對象,在Java中,所有的事件對象都最終派生於java.util.EventObject類

  • 3.事件監聽器(event listener) 
    監聽器對象是一個實現了特定監聽器接口(listener interface)的類的實例 
    事件監聽器類(監聽器對象所屬的類)必須實現事件監聽器接口或繼承事件監聽器適配器類 
    事件監聽器接口定義了處理事件必須實現的方法 
    事件監聽器適配器類是對事件監聽器接口的簡單實現。目的是爲了減少編程的工作量 
    處理事件的方法被稱爲事件處理器,即事件監聽器接口定義,並在事件監聽器類中實現的方法

  • 4.註冊事件監聽器 
    爲了能夠讓事件監聽器檢查某個組件(事件源)是否發生了某些事件,並且在發生時激活事件處理器進行相應的處理,必須在事件源上註冊事件監聽器 
    這是通過使用事件源組件的以下方法來完成的: 
    addXxxListener(事件監聽器對象) 
    Xxx對應相應的事件類




10.GUI編程實例

實例一:GUI記事本 

GUI%E8%AE%B0%E4%BA%8B%E6%9C%AC.png

1.package cn.guis;
2.import java.awt.Image;
3.import java.awt.Toolkit;
4.import java.awt.event.ActionEvent;
5.import java.awt.event.ActionListener;
6.import java.io.FileNotFoundException;
7.import java.io.FileWriter;
8.import java.io.IOException;
9.import javax.swing.JEditorPane;
10.import javax.swing.JFrame;
11.import javax.swing.JLabel;
12.import javax.swing.JMenu;
13.import javax.swing.JMenuBar;
14.import javax.swing.JMenuItem;
15./**
16. * 記事本
17. * @author JEEP-711
18. *
19. */
20.@SuppressWarnings("serial")
21.public class GuiNotepad extends JFrame{
22.  JEditorPane je = null;//定義成員
23.  //構造器
24.  public GuiNotepad(){
25.      /**
26.       * 繪製界面
27.       */
28.      this.setLayout(null);
29.      JLabel jb = new JLabel();
30.      setTitle("記事本");//窗口標題
31.      this.setBounds(615, 98,836,908);//設置窗口寬爲536像素,高爲408像素
32.      je = new JEditorPane();//創建文本框對象
33.      je.setText("\r\n");//提示
34.      je.setFont(new java.awt.Font("Dialog",1, 20));//設置字體樣式
35.      je.setSize(836,908);//設置寬高
36.      add(je);//添加當前對象
37.      setResizable(false);// 設置窗體是否可以調整大小,參數爲布爾值 
38.      this.add(jb);//將其加入到窗口當中
39.      /**
40.       * 設置窗口圖標
41.       */
42.       Toolkit kit = Toolkit.getDefaultToolkit(); 
43.       Image p_w_picpath = kit.getImage("src//p_w_picpath//0x1f4dd.png"); //設置窗口圖標路徑
44.       setIconImage(p_w_picpath); //換掉窗體樣式
45.      /**
46.       * 繪製菜單
47.       * 文件菜單
48.       * 
49.       */
50.       JEditorPane jee = new JEditorPane();
51.      JMenuBar jr = new JMenuBar();//創建菜單條對象
52.      JMenu jm = new JMenu("文件");
53.      //新建項
54.      JMenuItem ji = new JMenuItem();//創建菜單項對象
55.      ji.setText("新建");
56.      //動作事件接口
57.      ji.addActionListener(new ActionListener(){
58.      @Override
59.      public void actionPerformed(ActionEvent e) {    
60.      //jee.JEditorPane();//創建文本框對象
61.      jee.setText("請輸入內容: ");//提示
62.      jee.setSize(836,908);//設置寬高
63.      add(jee);//添加當前對象
64.      }
65.      });
66.      this.add(ji);
67.      /**
68.       * 保存項
69.       */
70.      JMenuItem bc = new JMenuItem("保存");//創建保存項
71.      //動作事件接口
72.      bc.addActionListener(new ActionListener(){
73.      @Override
74.      public void actionPerformed(ActionEvent e) {
75.          try {
76.              FileWriter fw = new FileWriter("src//記事本.txt",true);//實例化文件寫入
77.              fw.write(je.getText());//寫入當前內容
78.              fw.flush();//刷新
79.              fw.close();//關閉流
80.              System.out.println("成功保存");//提示
81.          } catch (FileNotFoundException e1) {
82.              e1.printStackTrace();
83.          } catch (IOException e1) {
84.              e1.printStackTrace();
85.          } catch(NullPointerException e1){
86.              System.out.println("您操作有誤!");   
87.          }
88.      }
89.      });
90.      this.add(bc);   
91.      /**
92.       * 編輯菜單     
93.       */
94.      JMenu j1 = new JMenu(); //創建菜單對象
95.      j1.setText("編輯");
96.      JMenuItem jit = new JMenuItem();//創建菜單項對象
97.      jit.setText("查找");
98.      /**
99.       * 格式菜單
100.       */
101.      JMenu j2 = new JMenu(); //創建菜單格式對象
102.      j2.setText("格式");
103.      JMenuItem zt = new JMenuItem();//創建菜單項對象
104.      zt.setText("字體");
105.      /**
106.       * 查看菜單
107.       */
108.      JMenu j3 = new JMenu(); //創建菜單查看對象
109.      j3.setText("查看");
110.      JMenuItem ztl = new JMenuItem();//創建菜單項對象
111.      ztl.setText("狀態欄");
112.      /**
113.       * 幫助菜單
114.       */
115.      JMenu j4 = new JMenu(); //創建菜單幫助對象
116.      j4.setText("幫助");
117.      JMenuItem jt = new JMenuItem();//創建菜單項對象
118.      jt.setText("關於記事本");
119.      /**
120.       * 添加功能
121.       */
122.      jm.add(ji);//把新建添加到菜單
123.      jr.add(jm);//把菜單加載到菜單條
124.      jr.add(j1);//把編輯添加到菜單條
125.      j1.add(jit);//將查找添加到編輯
126.      jr.add(j2);//把格式添加到菜單條
127.      jr.add(j3);//把查看添加到菜單條
128.      jr.add(j4);//把幫助添加到菜單條
129.      j4.add(jt);//把關於記事本添加j4
130.      j2.add(zt);//將字體加入到j2
131.      j3.add(ztl);//將菜單項加入到菜單
132.      jm.add(bc);//將保存加入到菜單
133.      setDefaultCloseOperation(EXIT_ON_CLOSE);// 用戶點擊窗口關閉
134.      this.setJMenuBar(jr);
135.      this.setVisible(true);//設置是否窗口顯示
136.  }
137.  //定義主方法
138.  public static void main(String[] args){
139.      new  GuiNotepad();//調用方法
140.  }
141.}


實例二:GUI用戶猜數程序 

GUI%E7%8C%9C%E6%95%B0%E6%B8%B8%E6%88%8F.

1.package cn.gui;
2.import java.awt.Color;
3.import java.awt.Image;
4.import java.awt.Toolkit;
5.import java.awt.event.ActionEvent;
6.import java.awt.event.ActionListener;
7.import java.util.Scanner;
8.import javax.swing.ImageIcon;
9.import javax.swing.JButton;
10.import javax.swing.JFrame;
11.import javax.swing.JLabel;
12.import javax.swing.JPanel;
13.import javax.swing.JTextArea;
14./**
15. * 猜數小程序
16. * @author JEEP-711
17. *
18. */
19.@SuppressWarnings("serial")
20.public class Plays extends JFrame{
21.  boolean flag = true;
22.  Scanner info = new Scanner(System.in);
23.  //構造方法
24.  public Plays(){
25.      /**
26.       * 繪製界面
27.       */
28.      this.setLayout(null);
29.      JLabel jl = new JLabel();//實例化界面對象
30.      setTitle("猜數遊戲");//設置窗口標題
31.      setResizable(false);//設置窗口不可調整大小
32.      this.setBounds(560, 290,836, 510);//設置窗口大小
33.      this.add(jl);//添加到窗口
34.      /**
35.       * 返回隨機數文本輸入框
36.       */
37.      JTextArea jt = new JTextArea("遊戲隨機數:");//實例化文本框對象
38.      jt.setBounds(215,105,140,50);//設置文本大小
39.      jt.setFont(new java.awt.Font("宋體",0, 16));//設置字體樣式
40.      this.add(jt);//添加當前文本對象
41.      jt.setBackground(new Color(231,210,181));
42.      /**
43.       * 用戶輸入數字文本框
44.       */
45.      JTextArea ues = new JTextArea("請輸入一個數字:");//實例化用戶文本框對象
46.      ues.setBounds(460,105,140,50);//設置文本大小
47.      ues.setFont(new java.awt.Font("宋體",0, 15));//設置字體樣式
48.      this.add(ues);//添加當前文本對象
49.      ues.setBackground(new Color(230,207,176));
50.      /**
51.       * 設置遊戲開始按鈕
52.       */
53.      JButton jbn = new JButton("點擊遊戲開始");//實例化開始按鈕對象
54.      jbn.setBounds(218,205,140,50);//設置按鈕位置
55.      jbn.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
56.      jbn.setForeground(Color.white);//設置字體顏色
57.      jbn.setBackground(new Color(8,163,219));//設置按鈕顏色
58.      //監聽事件
59.      jbn.addActionListener(new ActionListener(){
60.          @Override
61.          public void actionPerformed(ActionEvent e) {
62.              //實例化線程
63.              new Thread(new Runnable(){
64.                  @Override//覆寫線程方法
65.                  public void run() {
66.                      //循環flag
67.                      while(flag){
68.                          int sj = (int)(Math.random()*95+5);//random*括號裏的最大數減去最小數加最小數千位我認識的看風景阿斯蒂芬> > 聚少離多激發了考慮考慮我怎麼知道掃你在哪啦聖誕節付款金額按樂山大佛薩頂頂 的
69.                          jt.setText(""+sj);//設置顯示隨機數框
70.                          try {
71.                              Thread.sleep(100);//睡眠100毫秒
72.                          } catch (InterruptedException e) {
73.                              e.printStackTrace();
74.                          }
75.                      }
76.                  }   
77.              }).start();//開始線程
78.          }});
79.      this.add(jbn);//添加當前開始按鈕
80.      /**
81.       * 停止以後輸出結果
82.       */
83.      JLabel jg = new JLabel("--公佈遊戲結果--");
84.      jg.setBounds(330, 270, 200, 30);
85.      jg.setFont(new java.awt.Font("宋體",0, 12));//設置字體樣式
86.      this.add(jg);
87.      /**
88.       * 設置遊戲結束按鈕
89.       */
90.      JButton jtn = new JButton("點擊結束遊戲");//實例化結束按鈕對象
91.      jtn.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
92.      jtn.setBounds(420,205,140,50);//設置按鈕位置
93.      jtn.setForeground(Color.white);//設置字體顏色
94.      jtn.setBackground(new Color(8,163,219));//設置按鈕顏色
95.      //監聽事件
96.      jtn.addActionListener(new ActionListener(){
97.          @Override
98.          public void actionPerformed(ActionEvent e) {
99.              flag = false;//等於假就結束
100.              //比較結果
101.              if(ues.getText().equals(jt.getText())){
102.                  jg.setText("恭喜你猜對了,結果爲:"+ues.getText());
103.              }else{
104.                  jg.setText("你的輸入不正確,"+"正確答案是:"+jt.getText());
105.              }
106.          }
107.      });
108.      this.add(jtn);//添加當前結束按鈕
109.      /**
110.       * 設置窗口圖標
111.       */
112.       Toolkit kit = Toolkit.getDefaultToolkit(); 
113.       Image p_w_picpath = kit.getImage("src//p_w_picpath//0x1f3ae.png"); //設置窗口圖標路徑
114.       setIconImage(p_w_picpath); //換掉窗體樣式
115.       setDefaultCloseOperation(EXIT_ON_CLOSE);// 用戶點擊窗口關閉
116.      /**
117.       * 設置背景圖片
118.       *  
119.       */
120.        setSize(836, 510);//設置大小    
121.        String path = "src//p_w_picpath//timg.jpg";//設置背景圖片的路徑  
122.        ImageIcon background = new ImageIcon(path); // 背景圖片   
123.        JLabel label = new JLabel(background);// 把背景圖片顯示在一個標籤裏面    
124.        label.setBounds(0, 0, this.getWidth(), this.getHeight()); // 把標籤的大小位置設置爲圖片剛好填充整個面板   
125.        JPanel p_w_picpathPanel = (JPanel) this.getContentPane(); // 把內容窗格轉化爲JPanel,否則不能用方法setOpaque()來使內容窗> 格透明   
126.        p_w_picpathPanel.setOpaque(false);  
127.        this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));// 把背景圖片添加到分層窗格的最底層作爲背景    
128.      this.setVisible(true);//設置是否窗口顯示
129.  } 
130.  //主方法
131.  public static void main(String[] args) {
132.      new Plays();//調用方法
133.  }
134.}


實例三:GUI紅綠燈程序 

GUI%E7%BA%A2%E7%BB%BF%E7%81%AF.png

1.package cn.gui;
2.import java.awt.Color;
3.import java.awt.Image;
4.import java.awt.Toolkit;
5.import java.awt.event.ActionEvent;
6.import java.awt.event.ActionListener;
7.import javax.swing.AbstractButton;
8.import javax.swing.Icon;
9.import javax.swing.ImageIcon;
10.import javax.swing.JButton;
11.import javax.swing.JFrame;
12.import javax.swing.JLabel;
13.import javax.swing.JPanel;
14.import javax.swing.JTextArea;
15./**
16. * 交通警示燈-紅 黃 綠 燈
17. * @author JEEP-711
18. *
19. */
20.@SuppressWarnings({ "serial", "unused" })
21.public class WarningLight extends JFrame{
22.  boolean flag = true;//定義成員屬性,作爲標記
23.  //構造方法
24.  public WarningLight(){
25.      /**
26.       * 繪製界面
27.       */
28.      this.setLayout(null);
29.      JLabel jl = new JLabel();//實例化界面對象
30.      setTitle("交通信號燈程序");//設置標題
31.      this.setBounds(515, 98,836,908);//設置窗口寬爲836像素,高爲908像素
32.      this.add(jl);//將其加入到窗口當中
33.      setResizable(false);// 設置窗體是否可以調整大小,參數爲布爾值 
34.      setDefaultCloseOperation(EXIT_ON_CLOSE);// 用戶點擊窗口關閉
35.      /**
36.       * 設置開始按鈕
37.       */
38.      JButton begin = new JButton("點擊開始");//實例化開始按鈕
39.      begin.setBounds(610,370,140,50);
40.      begin.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
41.      begin.setForeground(Color.white);//設置字體顏色
42.      begin.setBackground(new Color(8,163,219));//設置按鈕顏色
43.      /**
44.       * 設置顏色
45.       */
46.//        JTextArea area = new JTextArea();
47.//        area.setBounds(200, 200, 400, 400);
48.//        this.add(area);
49.      /**
50.       * 警示燈切換
51.       */
52.      JLabel lb = new JLabel();//實例化對象
53.      lb.setBounds(200,50,568,798);//設置寬高
54.      jl.add(lb);//添加到jn裏
55.      this.add(lb);//添加當前的lb
56.      /**
57.       * 文字提示
58.       */
59.      JLabel ts = new JLabel("交通信號提示");
60.      ts.setBounds(586, 280, 200, 30);
61.      ts.setFont(new java.awt.Font("黑體",1, 30));//設置字體樣式
62.      //jg.setForeground(Color.white);//設置字體顏色
63.      add(ts);
64.      //監聽器,事件處理
65.      begin.addActionListener(new ActionListener(){
66.          @Override//覆寫方法
67.          public void actionPerformed(ActionEvent e) {
68.              //匿名實例化線程
69.              new Thread(new Runnable(){
70.                  @Override//覆寫run方法
71.                  public void run() {
72.                      //循環標記
73.                      while(flag){
74.                          lb.setIcon(new ImageIcon("src//p_w_picpath//紅燈.png"));//設置顯示紅燈png
75.                          lb.setSize(368,698);//設置寬高
76.                           //area.setBackground(Color.RED);
77.                           try {
78.                               ts.setText("紅燈/停一停");
79.                              Thread.sleep(5200);//設置睡眠
80.                          } catch (InterruptedException e) {
81.                              e.printStackTrace();
82.                          }
83.                           lb.setIcon(new ImageIcon("src//p_w_picpath//黃燈.png"));//設置顯示黃燈png
84.                              lb.setSize(368,698);//設置寬高
85.                              ts.setText("黃燈/等一等");
86.                           //area.setBackground(Color.YELLOW);
87.                           try {
88.                              Thread.sleep(2000);//設置睡眠
89.                          } catch (InterruptedException e) {
90.                              e.printStackTrace();
91.                          }
92.                           lb.setIcon(new ImageIcon("src//p_w_picpath//綠燈.png"));//設置顯示綠燈png
93.                              lb.setSize(368,698);//設置寬高
94.                              ts.setText("綠燈/可通行");
95.                          // area.setBackground(Color.GREEN);
96.                           try {
97.                              Thread.sleep(5000);//設置睡眠
98.                          } catch (InterruptedException e) {
99.                              e.printStackTrace();
100.                          }
101.                      }
102.                  }
103.              }).start();//開啓線程
104.          }
105.      });
106.      this.add(begin);//添加當前按鈕
107.      /**
108.       * 設置結束按鈕
109.       */
110.      JButton end = new JButton("點擊結束");//實例化結束按鈕
111.      end.setBounds(610,432,140,50);
112.      end.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
113.      end.setForeground(Color.white);//設置字體顏色
114.      end.setBackground(new Color(8,163,219));//設置按鈕顏色
115.      //事件處理
116.      end.addActionListener(new ActionListener(){
117.          @Override//覆寫方法
118.          public void actionPerformed(ActionEvent e) {
119.              flag=false;//結束進程
120.          }
121.      });
122.      this.add(end);//添加當前結束按鈕
123.      /**
124.       * 設置窗口圖標
125.       */
126.       Toolkit kit = Toolkit.getDefaultToolkit(); //創建窗口圖標對象
127.       Image p_w_picpath = kit.getImage("src//p_w_picpath//0x1f6a6.png"); //設置窗口圖標路徑
128.       setIconImage(p_w_picpath); //換掉窗體樣式
129.       /**
130.           * 設置背景圖片
131.           *  
132.           */
133.          setSize(839, 908);//設置大小    
134.          String path = "src//p_w_picpath//交通安全燈.jpg";//設置背景圖片的路徑  
135.          ImageIcon background = new ImageIcon(path); // 背景圖片   
136.          JLabel label = new JLabel(background);// 把背景圖片顯示在一個標籤裏面    
137.          label.setBounds(0, 0, this.getWidth(), this.getHeight()); // 把標籤的大小位置設置爲圖片剛好填充整個面板   
138.          JPanel p_w_picpathPanel = (JPanel) this.getContentPane(); // 把內容窗格轉化爲JPanel,否則不能用方法setOpaque()來使內容窗> 格透明   
139.          p_w_picpathPanel.setOpaque(false);  
140.          this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));// 把背景圖片添加到分層窗格的最底層作爲背景    
141.          this.setVisible(true);//設置是否窗口顯示
142.  }
143.  //定義主方法
144.  public static void main(String[] args) {
145.      new WarningLight();//調用方法
146.  }
147.}


實例四:GUI單機五子棋程序 

GUI%E4%BA%94%E5%AD%90%E6%A3%8B.png

1.package cn.gobang;
2.import java.awt.Color;
3.import java.awt.Graphics;
4.import java.awt.Image;
5.import java.awt.Toolkit;
6.import java.awt.event.ActionEvent;
7.import java.awt.event.ActionListener;
8.import java.awt.event.MouseEvent;
9.import java.awt.event.MouseListener;
10.import java.util.ArrayList;
11.import javax.swing.ImageIcon;
12.import javax.swing.JButton;
13.import javax.swing.JComponent;
14.import javax.swing.JFrame;
15.import javax.swing.JLabel;
16.import javax.swing.JPanel;
17./**
18. * 五子棋
19. * @author JEEP-711
20. *
21. */
22.@SuppressWarnings("serial")
23.public class Gobangs extends JFrame{  
24.  /**
25.   * 構造方法
26.   */
27.  public Gobangs(){
28.      /**
29.       * 自定義組件
30.       */
31.      this.setLayout(null);
32.      this.setBounds(610, 140,630,630);//設置寬高
33.      setTitle("國際五子棋");
34.      setResizable(false);// 設置窗體是否可以調整大小,參數爲布爾值 
35.      /**
36.       * 開始按鈕
37.       */
38.      JButton dy = new JButton("開始對弈");//創建開始按鈕
39.      dy.setBounds(138,670,100,50);//設置位置
40.      dy.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
41.      dy.setForeground(Color.white);//設置字體顏色
42.      dy.setBackground(new Color(8,163,219));//設置按鈕顏色
43.      //監聽器
44.      dy.addActionListener(new ActionListener(){
45.          @Override
46.          public void actionPerformed(ActionEvent e) {
47.              Gobangss();//調用五子棋開始方法
48.          }
49.      });
50.      this.add(dy);//添加當前對弈按鈕
51.      /**
52.       * 悔棋按鈕
53.       */
54.      JButton hq = new JButton("悔棋");//創建悔棋按鈕
55.      hq.setBounds(270,670,100,50);//設置位置
56.      hq.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
57.      hq.setForeground(Color.white);//設置字體顏色
58.      hq.setBackground(new Color(8,163,219));//設置按鈕顏色
59.      //監聽器
60.      hq.addActionListener(new ActionListener(){
61.          @Override
62.          public void actionPerformed(ActionEvent e) {
63.          }
64.      });
65.      this.add(hq);//添加當前悔棋按鈕
66.      /**
67.       * 重新開始
68.       */
69.      JButton cx = new JButton("重新開始");//創建重新開始對象
70.      cx.setBounds(410,670,100,50);//設置位置
71.      cx.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
72.      cx.setForeground(Color.white);//設置字體顏色
73.      cx.setBackground(new Color(8,163,219));//設置按鈕顏色
74.      //監聽器
75.      cx.addActionListener(new ActionListener(){
76.          @Override
77.          public void actionPerformed(ActionEvent e) {
78.              //if(cx!= null){
79.                  Gobangss();//調用方法
80.              //}
81.          }
82.      });
83.      this.add(cx);//添加當前對象
84.      /**
85.       * 退出遊戲
86.       */
87.      JButton tc = new JButton("退出遊戲");//創建退出按鈕
88.      tc.setBounds(545,670,100,50);//設置位置
89.      tc.setFont(new java.awt.Font("Dialog",1, 15));//設置字體樣式
90.      tc.setForeground(Color.white);//設置字體顏色
91.      tc.setBackground(new Color(8,163,219));//設置按鈕顏色
92.      //監聽事件
93.      tc.addActionListener(new ActionListener(){
94.          @Override
95.          public void actionPerformed(ActionEvent e) {
96.              System.exit(1);//退出遊戲界面
97.          }
98.      });
99.      this.add(tc);//添加當前對象
100.      /**
101.       * 設置窗口圖標
102.       */
103.       Toolkit kit = Toolkit.getDefaultToolkit(); 
104.       Image p_w_picpath = kit.getImage("src//p_w_picpath//0x1f3a8.png"); //設置窗口圖標路徑
105.       setIconImage(p_w_picpath); //換掉窗體樣式
106.      /**
107.       * 設置背景圖片
108.       *  
109.       */
110.        setSize(800,800);//設置大小    board 535, 536
111.        String path = "src//p_w_picpath//qp.jpg";//設置背景圖片的路徑  
112.        ImageIcon background = new ImageIcon(path); // 背景圖片   
113.        JLabel label = new JLabel(background);// 把背景圖片顯示在一個標籤裏面    
114.        label.setBounds(0, 0, this.getWidth(), this.getHeight()); // 把標籤的大小位置設置爲圖片剛好填充整個面板   
115.        JPanel p_w_picpathPanel = (JPanel) this.getContentPane(); // 把內容窗格轉化爲JPanel,否則不能用方法setOpaque()來使內容窗> 格透明   
116.        p_w_picpathPanel.setOpaque(false);  
117.        this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));// 把背景圖片添加到分層窗格的最底層作爲背景
118.        setDefaultCloseOperation(EXIT_ON_CLOSE);// 用戶點擊窗口關閉
119.        this.setVisible(true);//設置是否窗口顯示
120.  }
121.  /**
122.   * 創建五子棋開始方法
123.   */
124.  public void Gobangss(){
125.      Draw dr = new Draw();
126.      //dr.setBounds(140,100,535,510);
127.      dr.setBounds(140,100,535,510);
128.      dr.addMouseListener(dr);
129.      this.setBounds(610, 140,799,799);//設置寬高
130.      this.add(dr); 
131.  }
132.  public static void main(String[] args) {
133.      new Gobangs();//調用方法    
134.      new Draw();//調用繪製五子棋類   
135.  }   
136.}
137./**
138. * 繪製五子棋盤,繼承JComponet類
139. * @author JEEP-711
140. *    實現接口 MouseListener
141. */ 
142.@SuppressWarnings("serial")
143.class Draw extends JComponent implements MouseListener{
144.  private boolean isblack = true;//標記黑棋子先走
145.  java.util.List<Pieces> psList = new ArrayList<Pieces>();//創建List對象,存放Pieces內容
146.  private int pcesX = 0;//當前X棋子的位置
147.  private int pcesY = 0;//當前Y棋子的位置
148.  private boolean isNow = false;
149.  //覆寫方法,自定義控件
150.  public void paint(Graphics g){
151.      super.paint(g);
152.      this.addMouseListener(this);//添加當前,註冊自己
153.      /**
154.       * 繪製棋盤線,繪製棋子
155.       * 十行十列,Y軸變換,X軸不變
156.       */
157.      for(int i=-1;i<10;i++){
158.          g.drawLine(0, (i*50+50), 500, (i*50+50));//x軸
159.          g.drawLine((i*50+50),0,(i*50+50),500);//y軸
160.      }
161.      /**
162.       * 繪製棋子
163.       * 遍歷集合棋子
164.       */
165.      for(Pieces p : psList){
166.          g.setColor(p.getColor());//取得棋子顏色,黑色
167.          g.fillOval(p.getX(), p.getY(), Pieces.PIECES_SIZE,Pieces.PIECES_SIZE);//設置黑棋子的x,y軸,棋子大小
168.      }
169.      iswin();//調用方
170.      if(isNow == true){
171.          //g.setFont(new Font("微軟雅黑",Font.ITALIC,24));
172.          g.setColor(Color.WHITE);
173.          g.setFont(new java.awt.Font("Dialog",1, 60));//設置字體樣式
174.          g.drawString("旗開得勝!", 110, 270);    
175.      }       
176.  }
177.  /**
178.   * 判斷輸贏
179.   * 東,西,南,北
180.   * 東北,東南,西南,西北
181.   */
182.  public void iswin(){
183.      /**
184.       * --北方向
185.       */
186.          int nanbei = 0; 
187.          for(int nowY = pcesY-50,i=0;i<5 && nowY>=0;nowY-=50,i++){
188.              Pieces pieces = findPieces(pcesX,nowY);
189.              //System.out.println(pieces);
190.              //不等於空,就有棋子
191.              if(pieces!= null){
192.                  //當前棋子等於黑,判斷顏色是否相相等
193.                  if(isblack != true){
194.                      if(pieces.getColor() == Color.BLACK){
195.                          nanbei++;
196.                      }else{
197.                          break;
198.                      }
199.                  }
200.                  //當前等於白棋,判斷顏色是否相等
201.                  if(isblack != false){
202.                      if(pieces.getColor() == Color.WHITE){
203.                          nanbei++;
204.                      }else{
205.                          break;
206.                      }
207.                  }
208.              }else{
209.                  break;
210.              }
211.          }if(isblack != true){
212.              System.out.println("北方向黑棋子個數"+nanbei);
213.          }else{
214.              System.out.println("北方向白棋子個數"+nanbei);
215.          }
216.          if(nanbei>=5){
217.              isNow = true;
218.              if(isblack != true){
219.                  System.out.println("黑棋贏了");
220.              }else{
221.                  System.out.println("白棋贏了");
222.              }
223.          }
224.          /**
225.           * --南方向
226.           */
227.              for(int nowY = pcesY,i=0;i<5 && nowY<=500;nowY+=50,i++){
228.                  Pieces pieces = findPieces(pcesX,nowY);
229.                  //System.out.println(pieces);
230.                  //不等於空,就有棋子
231.                  if(pieces!= null){
232.                      //當前棋子等於黑,判斷顏色是否相相等
233.                      if(isblack != true){
234.                          if(pieces.getColor() == Color.BLACK){
235.                              nanbei++;
236.                          }else{
237.                              break;
238.                          }
239.                      }
240.                      //當前等於白棋,判斷顏色是否相等
241.                      if(isblack != false){
242.                          if(pieces.getColor() == Color.WHITE){
243.                              nanbei++;
244.                          }else{
245.                              break;
246.                          }
247.                      }
248.                  }else{
249.                      break;
250.                  }
251.              }if(isblack != true){
252.                  System.out.println("南方向黑棋子個數"+nanbei);
253.              }else{
254.                  System.out.println("南方向白棋子個數"+nanbei);
255.              }
256.              if(nanbei>=5){
257.                  isNow = true;
258.                  if(isblack != true){
259.                      System.out.println("黑棋贏了");
260.                  }else{
261.                      System.out.println("白棋贏了");
262.                  }
263.              }
264.      /*
265.       *--東方向 
266.       *
267.       */
268.      int dongxi = 0; 
269.      for(int nowX = pcesX,i=0;i<5 && nowX<=500;nowX+=50,i++){
270.          Pieces pieces = findPieces(nowX,pcesY);
271.          //System.out.println(pieces);
272.          //不等於空,就有棋子
273.          if(pieces!= null){
274.              //當前棋子等於黑,判斷顏色是否相相等
275.              if(isblack != true){
276.                  if(pieces.getColor() == Color.BLACK){
277.                      dongxi++;
278.                  }else{
279.                      break;
280.                  }
281.              }
282.              //當前等於白棋,判斷顏色是否相等
283.              if(isblack != false){
284.                  if(pieces.getColor() == Color.WHITE){
285.                      dongxi++;
286.                  }else{
287.                      break;
288.                  }
289.              }
290.          }else{
291.              break;
292.          }
293.      }
294.      if(isblack != true){
295.          System.out.println("東方向黑棋子個數"+dongxi);
296.      }else{
297.          System.out.println("東方向白棋子個數"+dongxi);
298.      }
299.      /**
300.       * --西方向
301.       */
302.      for(int nowX = pcesX-50,i=0;i<5 && nowX>=0;nowX-=50,i++){
303.          Pieces pieces = findPieces(nowX,pcesY);
304.          //不等於空,就有棋子
305.          if(pieces!=null){
306.              //當前棋子等於黑,判斷顏色是否相相等
307.              if(isblack != true){
308.                  if(pieces.getColor() == Color.BLACK){
309.                      dongxi++;
310.                  }else{
311.                      break;
312.                  }
313.              }
314.              //當前等於白棋,判斷顏色是否相等
315.              if(isblack != false){
316.                  if(pieces.getColor() == Color.WHITE){
317.                      dongxi++;
318.                  }else{
319.                      break;
320.                  }
321.              }
322.          }else{
323.              break;
324.          }
325.      }
326.      if(isblack != true){
327.          System.out.println("西方向黑棋子個數"+dongxi);
328.      }else{
329.          System.out.println("西方向白棋子個數"+dongxi);
330.      }
331.      if(dongxi>=5){
332.          isNow = true;
333.          if(isblack != true){
334.              System.out.println("黑棋贏了");
335.          }else{
336.              System.out.println("白棋贏了");
337.          }
338.      }
339.      /**
340.       * -*-東北方向
341.       */
342.      int dongbeixinan= 0;
343.      for(int nowX = pcesX,nowY = pcesY,i=0;nowY >=0 && nowX<=500 && i< 5;nowX+=50,nowY-=50,i++){
344.          Pieces pieces = findPieces(nowX,nowY);
345.          //不等於空,就有棋子
346.          if(pieces!=null){
347.              //當前棋子等於黑,判斷顏色是否相相等
348.              if(isblack != true){
349.                  if(pieces.getColor() == Color.BLACK){
350.                      dongbeixinan++;
351.                  }else{
352.                      break;
353.                  }
354.              }
355.              //當前等於白棋,判斷顏色是否相等
356.              if(isblack != false){
357.                  if(pieces.getColor() == Color.WHITE){
358.                      dongbeixinan++;
359.                  }else{
360.                      break;
361.                  }
362.              }
363.          }else{
364.              break;
365.          }
366.      }
367.      if(isblack != true){
368.          System.out.println("東北方向黑棋子個數"+dongbeixinan);
369.      }else{
370.          System.out.println("東北方向白棋子個數"+dongbeixinan);
371.      }
372.      if(dongbeixinan>=5){
373.          isNow = true;
374.          if(isblack != true){
375.              System.out.println("黑棋贏了");
376.          }else{
377.              System.out.println("白棋贏了");
378.          }
379.      }
380.      /**
381.       * --西南方向
382.       */
383.      for(int nowX = pcesX-50,nowY = pcesY+50,i=0;nowY <=500 && nowX>=0 && i< 5;nowX-=50,nowY+=50,i++){
384.          Pieces pieces = findPieces(nowX,nowY);
385.          //不等於空,就有棋子
386.          if(pieces!=null){
387.              //當前棋子等於黑,判斷顏色是否相相等
388.              if(isblack != true){
389.                  if(pieces.getColor() == Color.BLACK){
390.                      dongbeixinan++;
391.                  }else{
392.                      break;
393.                  }
394.              }
395.              //當前等於白棋,判斷顏色是否相等
396.              if(isblack != false){
397.                  if(pieces.getColor() == Color.WHITE){
398.                      dongbeixinan++;
399.                  }else{
400.                      break;
401.                  }
402.              }
403.          }else{
404.              break;
405.          }
406.      }if(isblack != true){
407.          System.out.println("西南方向黑棋子個數"+dongbeixinan);
408.      }else{
409.          System.out.println("西南方向白棋子個數"+dongbeixinan);
410.      }
411.      if(dongbeixinan>=5){
412.          isNow = true;
413.          if(isblack != true){
414.              System.out.println("黑棋贏了");
415.          }else{
416.              System.out.println("白棋贏了");
417.          }
418.      }   
419.      /**
420.       * --東南方向
421.       */
422.      int dongnan = 0;
423.      for(int nowX = pcesX,nowY = pcesY,i=0;nowY <=500 && nowX<=500 && i< 5;nowX+=50,nowY+=50,i++){
424.          Pieces pieces = findPieces(nowX,nowY);
425.          //不等於空,就有棋子
426.          if(pieces!=null){
427.              //當前棋子等於黑,判斷顏色是否相相等
428.              if(isblack != true){
429.                  if(pieces.getColor() == Color.BLACK){
430.                      dongnan++;
431.                  }else{
432.                      break;
433.                  }
434.              }
435.              //當前等於白棋,判斷顏色是否相等
436.              if(isblack != false){
437.                  if(pieces.getColor() == Color.WHITE){
438.                      dongnan++;
439.                  }else{
440.                      break;
441.                  }
442.              }
443.          }else{
444.              break;
445.          }
446.      }if(isblack != true){
447.          System.out.println("東南方向黑棋子個數"+dongnan);
448.      }else{
449.          System.out.println("東南方向白棋子個數"+dongnan);
450.      }
451.      /**
452.       * --西北方向
453.       */
454.      for(int nowX = pcesX-50,nowY = pcesY-50,i=0;nowY >=0 && nowX>=0 && i< 5;nowX-=50,nowY-=50,i++){
455.          Pieces pieces = findPieces(nowX,nowY);
456.          //不等於空,就有棋子
457.          if(pieces!=null){
458.              //當前棋子等於黑,判斷顏色是否相相等
459.              if(isblack != true){
460.                  if(pieces.getColor() == Color.BLACK){
461.                      dongnan++;
462.                  }else{
463.                      break;
464.                  }
465.              }
466.              //當前等於白棋,判斷顏色是否相等
467.              if(isblack != false){
468.                  if(pieces.getColor() == Color.WHITE){
469.                      dongnan++;
470.                  }else{
471.                      break;
472.                  }
473.              }
474.          }else{
475.              break;
476.          }
477.      }
478.      if(isblack != true){
479.          System.out.println("西北方向黑棋子個數"+dongnan);
480.      }else{
481.          System.out.println("西北方向白棋子個數"+dongnan);
482.      }
483.      if(dongnan>=5){
484.          isNow = true;
485.          if(isblack != true){
486.              System.out.println("黑棋贏了");
487.          }else{
488.              System.out.println("白棋贏了");
489.          }
490.      }
491.  }
492.  /**
493.   * 找點
494.   */
495.  public Pieces findPieces(int x,int y){
496.      for(Pieces p:psList){
497.          if(p.getX() == x && p.getY() == y){
498.                  return p;//判斷座標是否相同
499.              }
500.          }
501.      return null;
502.  }
503.  @Override
504.  public void mouseClicked(MouseEvent e) {
505.      int x = e.getX()-Pieces.PIECES_SIZE/2;//取得x軸座標
506.      int y = e.getY()-Pieces.PIECES_SIZE/2;//取得y軸座標
507.      //算出在哪一條線
508.      double xianX = Math.round(x/50.0);
509.      double xianY = Math.round(y/50.0);
510.      //System.out.println("第幾根線"+xianY+"---"+Math.round(xianY));
511.      x = ((int)xianX)*50-20;
512.      y = ((int)xianY)*50-20;
513.      pcesX = x;//記錄棋子X當前位置
514.      pcesY = y;//記錄棋子Y當前位置
515.      boolean isHa = false;
516.      //去重複棋子
517.      for(Pieces p:psList){
518.          if(p.getX() == x && p.getY() == y){
519.              isHa = true;
520.              }
521.          }
522.      //避免重複棋子
523.      if(!isHa){
524.          Pieces ps = new Pieces(x,y); //創建棋子對象,並傳x,y值
525.          /**
526.           * 找點
527.           */
528.              if(isblack == true){
529.                  //黑棋子
530.                  ps.setColor(Color.BLACK);//設置棋子顏色爲黑色
531.                  isblack = false;
532.              }else{
533.                  //白棋子
534.                  ps.setColor(Color.WHITE);//設置棋子顏色爲白色
535.                  isblack = true;
536.              }
537.              if(isNow==false){
538.                  psList.add(ps);//把棋子保存到數組裏
539.              }
540.              this.repaint();//讓其重新調用,用戶觸發,重新繪製
541.      }
542.      //System.out.println("目前棋子數爲:"+psList.size());
543.      //System.out.println("你點擊了,X軸爲:"+e.getX()+",Y軸爲:"+e.getY());
544.  }
545.  @Override
546.  public void mousePressed(MouseEvent e) {
547.  }
548.  @Override
549.  public void mouseReleased(MouseEvent e) {   
550.  }
551.  @Override
552.  public void mouseEntered(MouseEvent e) {    
553.  }
554.  @Override
555.  public void mouseExited(MouseEvent e) { 
556.  }
557.}
558./**
559. * 繪製棋子類 
560. * @author JEEP-711
561. *
562. */
563.class Pieces{
564.  private int x;//x軸點座標屬性
565.  private int y;//y軸點座標屬性
566.  private Color color;//棋子顏色屬性
567.  public static final int PIECES_SIZE = 40;//棋子尺寸
568.  //取得X軸get方法
569.  public int getX() {
570.      return x;
571.  }//設置x軸set方法
572.  public void setX(int x) {
573.      this.x = x;
574.  }//取得y軸方法
575.  public int getY() {
576.      return y;
577.  }//設置y軸方法
578.  public void setY(int y) {
579.      this.y = y;
580.  }//取得棋子顏色方法
581.  public Color getColor() {
582.      return color;
583.  }//設置棋子顏色方法
584.  public void setColor(Color color) {
585.      this.color = color;
586.  }
587.  //構造器
588.  public Pieces(int x, int y, Color color) {
589.      super();
590.      this.x = x;
591.      this.y = y;
592.      this.color = color;
593.  }
594.  public Pieces(int x, int y) {
595.      this.x = x;
596.      this.y = y;
597.  }
598.  @Override
599.  public String toString() {
600.      return "Pieces [x=" + x + ", y=" + y + ", color=" + color + "]";
601.  }
602.}





初學(JAVA GUI編程 高級階段) 難點: ★★★★★

希望每一篇文章都能夠對讀者們提供幫助與提升,這乃是每一位筆者的初衷


感謝您的閱讀 歡迎您的留言與建議


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章