第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 元件主要為文本處理、按鈕、标簽、清單、pane、組合框、滾動條、滾動 pane、菜單、表格和樹提供了元件
Swing 是 Java 平台的 UI —— 它充當處理使用者和計算機之間全部互動的軟體
它實際上充當使用者和計算機内部之間的中間人
Swing元件是Java語言提供的第二代GUI設計工具包
它以AWT為基礎在AWT内容的基礎上新增或改進了一些GUI元件使得GUI程式功能更強大設計更容易、更友善
- 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)的英文縮寫,為使用者界面程式提供所需要的元件java.awt包,在這個包中,提供了基本的java程式GUI設計工具:
- 例如按鈕、标簽、複選框、下拉菜單、畫布、文本輸入區、清單等
- 此外,AWT還提供事件類、監聽器類、圖形處理工具、2D 圖形等的支援
- AWT 存在缺少剪貼闆、列印支援等缺陷,甚至沒有彈出式菜單和滾動視窗
Swing: 不是真正使用原生平台提供裝置,而是僅僅在模仿,是以可以在任何平台上使用Swing 圖形使用者界面元件
- Component/MenuComponent
- Container
- LayoutMa
Container(容器)
- Swing 絕大部分元件都是輕量級元件,它不像重量級元件那樣必須在它們自己本地視窗中繪制,而是在它們所在的重量級視窗中繪制,它比AWT适應性更強
Container常用方法:
- 容器(Container)實際上是Component的子類,是以容器類對象本身也是一個元件,具有元件的所有性質,另外還具有容納其它元件和容器的功能。
容器類對象可使用方法add()添加元件
兩種主要的容器類型
- Window:可獨立存在的頂級視窗
- Panel:可作為容器容納其它元件,但不能獨立存在,必須被添加到其它容器中(如Window 或 Applet)
Frame類:
- add()
- setLocation():設定位置
- setSize():設定大小
- setBoundes():同時設定大小、位置
- setVisible()
- pack()
Container的布局管理器
- 代表一個視窗,是Window類的子類
- 有标題,可通過拖拉改變大小
- 初始化時為不可見,可用setVisible(true)使其顯示出來
- 使用BorderLayout作為其預設布局管理器
- 使用setLayout方法改變布局管理器
基本元件
- AWT中的布局管理器有:
- FlowLayout
- BorderLayout
- GridLayout
- CardLayout
- GridBagLayout
AWT的事件處理方式
- Button:按鈕,可接收單擊操作
- Canvas:用于繪圖的畫布
- Checkbox:複選框元件(也可變成單選框元件)
- CheckboxGroup:用于将多個Checkbox元件組合成一組,一組Checkbox元件将隻有一個可以被選中,即全部變成單選框元件
- Choice:下拉式選擇框元件
- Frame:視窗,在GUI程式裡通過該類建立視窗
- Label:标簽類,用于放置提示性文本
- List。清單框元件,可以添加多項條目
- Panel:不能單獨存在基本容器類,必須放到其他容器中
- Scrollbar:滑動條元件。如果需要使用者輸入位于某個範圍的值,就可以使用滑動條元件。如調色闆中設定RGB的三個值所用的滑動條。當建立一個滑動條時,必須指定它的方向、初始值、滑塊的大小、最小值和最大值
- ScrollPane:帶水準及垂直滾動條的容器元件
- TextArea:多行文本域
- TextField:單行文本框
建立菜單 :建立一個菜單步驟:
- 委派式事件處理(delegation)—-個别的元件将整個事件處理委托給特定的對象,當該元件發生指定的事件時,就通知所委托的對象,有這個對象來處理這個事件,這個受委托處理事件的對象稱為事件傾聽對象(event listener)
- 每個元件均可以針對特定的事件指定一個或多個事件傾聽對象,由這些事件傾聽對象負責處理事件
MenuItem包括
- 建立一個MenuBar對象,将其放置到菜單容器中(如Frame)
- 建立若幹個Menu對象,将其放置到MenuBar對象中
- 建立若幹個MenuItem對象,将其放置到Menu對象中
右鍵菜單 :右鍵菜單使用PopupMenu對象表示,建立右鍵菜單的步驟如下:
- MenuItem:普通的菜單項
- CheckboxMenuItem:可以選擇的菜單項
AWT中畫圖:建立Canvas類或Panel的子類,并覆寫paint方法
- (1)建立PopupMenu的執行個體
- (2)建立多個MenuItem執行個體,依次将這些執行個體加入PopupMenu中
- (3)将PopupMenu加入到目标元件之中
- (4)為需要出現上下文菜單的元件編寫滑鼠監聽器,當使用者釋放滑鼠右鍵時彈出右鍵菜單
Graphics類:Graphics是一個抽象的畫筆對象,Graphics可以在元件上繪制豐富多彩的幾何圖形和位圖,Graphics類提供了如下幾個方法用于繪制幾何圖形和位圖
- 每當元件出現時調用paint方法
- 每個元件都有一個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的常用方法有:
2. 菜單:由類JMenu建立的對象就是菜單,類JMenu的常用方法如下:
- add(JMenu m):将菜單m加入到菜單條中
- countJMenus():獲得菜單條中菜單條數
- getJMenu(int p):取得菜單條中的菜單
- remove(JMenu m):删除菜單條中的菜單m
3.菜單項:類JMenuItem 的執行個體就是菜單項。類JMenuItem的常用方法如下:
- 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():删除菜單的所有菜單項
- 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使用者猜數程式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紅綠燈程式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單機五子棋程式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.}
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程式設計 進階階段) 難點: ★★★★★
希望每一篇文章都能夠對讀者們提供幫助與提升,這乃是每一位筆者的初衷
感謝您的閱讀 歡迎您的留言與建議
- FaceBook:JEEP SevenEleven
- Twitter:@JEEP7ll
- 新浪官方微網誌: @JEEP-711
- Github部落格: https://github.com/jeep711/jeep711.github.io
- Blog Garden:http://www.cnblogs.com/JEEP711/
- W3C/Blog:http://www.w3cschool.cn/jeep711blog/
- CSDN/Blog:http://blog.csdn.net/jeep911
- 51CTO/Blog:http://jeep711.blog.51cto.com/
- 碼雲:http://git.oschina.net/JEEP711/jeep711.github.io