<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## Java圖形開發--GUI ### 1、圖形用戶界面(gui)介紹 圖形用戶界面(Graphics?User?Interface,GUI)是用戶與程序交互的窗口,比命令行的界面更加直觀并且更好操作。 awt,swing,swt,Jface是什么? Sun已經提供了一個跨平臺GUI開發工具包AWT抽象窗口工具箱(Abstract?Window?Toolkit). ↓ Sun又創建了一個新的GUI框架swing.解決了AWT存在的Icd問題. ↓ IBM認為swing比較消耗內存,創建了一個新的GUI庫,這就是SWT ↓ IBM為了方便開發SWT程序,在SWT基礎上又創建了一個更易用,功能強大的圖開包"JFace" ? ### 2、eclipse開發工具介紹 eclipse是什么東西,我們用三句話來說明: 1、eclipse最早是IBM附屬公司oti開發的,一共投入了4000萬美金,后來捐獻給開源社區 2、eclipse是一個開源的、可擴展的集成開發環境,已經成為目前最流行的java開發工具 3、eclipse安裝后就可以開發java?se的項目了,但不能開發java?ee項目,需要安裝web開發插件(lomboz或是myeclipse..) ide(集成開發環境,比如jcreator、vs、myeclipse這些開發工具都是ide) ? ### 3、swing組件介紹 1、JFrame是Frame的子類 2、屬于容器類組件,頂層容器 3、JFrame有一些常用的方法,通過示例與java的幫助文檔即可了解。 ![](https://box.kancloud.cn/2016-02-25_56ceb3e157efe.jpg) 在圖形用戶界面編程中,我們在窗體中會經常使用到按鈕,我們在進行選擇的時候,常常需要確認,所以按鈕很重要。 ? 只需要在窗體中添加按鈕組件(JButton)即可完成。 ### 按鈕組件--深入討論 1、JButton是AbstractButton的子類 2、屬于窗口類組件,可以加入別的組件 3、Swing包的按鈕組件不只有JButton,還有單選按鈕(JRadioButton)、箭頭按鈕(BasicArrowButton)、觸發器按鈕(JToggleButton)。 ~~~ /** * 功能:GUI開發 */ package com.gui; import javax.swing.*; import java.awt.*; //JFrame是一個頂層容器類(可以添加其他swing組件的類) public class Gui1 extends JFrame { //需要的swing組件,定義到這里 JButton jb1 = null; // 構造函數 public Gui1() { // 創建了一個Button按鈕 jb1 = new JButton("按鈕"); // 添加組件 add(jb1); // 給窗體設置標題 setTitle("hello,world!"); // 設置大小,按像素計算 setSize(200, 200); // 設置初始位置 setLocation(100, 200); // 設置當窗口關閉時,保證JVM也退出 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 顯示 setVisible(true); } public static void main(String[] args) { Gui1 gui1 = new Gui1(); } } ~~~ ### 4、三大常用布局管理器 ### 布局管理器--介紹 #### 1、概念 ????組件在容器(比如JFrame)中的位置和大小是由布局管理器來決定的。所有的容器都會 使用一個布局管理器,通過它來自動進行組件的布局管理。 #### 2、種類 ????java共提供了五種布局管理器:流式布局管理器(FlowLayout)、邊界布局管理器(BorderLayout)、網格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、網格包布局管理器(GridBagLayout)。其中前三種是最常見的布局管理器。 ? ##### 邊界布局BorderLayout--介紹 ????邊界布局(BorderLayout)將容器簡單的劃分為東南西北5個區域,中間區域最大。 ????JFrame窗體,JDialog對話框組件默認布局方法 ? ~~~ /** * 邊界布局 */ package com.gui; import java.awt.*; import javax.swing.*; //1.繼承JFrame public class Gui2 extends JFrame{ //2.定義組件 JButton jb1, jb2, jb3, jb4, jb5; public Gui2(){ //3.創建組件 jb1 = new JButton("中部"); jb2 = new JButton("北部"); jb3 = new JButton("東部"); jb4 = new JButton("南部"); jb5 = new JButton("西部"); //4.添加各個組件 add(jb1, BorderLayout.CENTER); add(jb2, BorderLayout.NORTH); add(jb3, BorderLayout.EAST); add(jb4, BorderLayout.SOUTH); add(jb5, BorderLayout.WEST); //5.設置窗體屬性 setTitle("邊界布局"); setSize(300, 200); setLocation(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //6.顯示窗體 setVisible(true); } public static void main(String[] args) { Gui2 gui1 = new Gui2(); } } ~~~ ##### 邊界布局BorderLayout--注意事項 1、不是五個部分都必需添加; 2、中部組件會自動調節大小; 3、JFrame,JDialog默認布局管理器就是BorderLayout ##### 流式布局FlowLayout--介紹 FlowLayout布局,按照組件的添加次序將按鈕組件(當然也可以是別的組件)從左到右放置在容器中。當到達容器的邊界時,組件將放置到下一行中。FlowLayout可以以左對齊、居中對齊、以右對齊的方式排列組件。 ? ~~~ /** * 流式布局 */ package com.gui; import java.awt.*; import javax.swing.*; public class Gui3 extends JFrame{ //定義組件 JButton jb1, jb2, jb3, jb4, jb5, jb6; //構造函數 public Gui3(){ //創建組件 jb1 = new JButton("Button1"); jb2 = new JButton("Button2"); jb3 = new JButton("Button3"); jb4 = new JButton("Button4"); jb5 = new JButton("Button5"); jb6 = new JButton("Button6"); //添加組件 add(jb1); add(jb2); add(jb3); add(jb4); add(jb5); add(jb6); //設置流式布局 setLayout(new FlowLayout(FlowLayout.RIGHT)); //設置窗體屬性 setTitle("流式布局"); setSize(300, 200); setLocation(200, 200); //禁止用戶改變窗體大小 setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui3 gui1 = new Gui3(); } } ~~~ ##### 流式布局FlowLayout--注意事項 1、不限制他所管理的組件大小,允許他們有最佳大小 2、當容器被縮放、擴大時,組件的位置可能變化,但組件的大小不變。 3、默認組件是居中對齊,可以通過FlowLayout(int?align)函數來指定對齊方式。 ##### 網格布局GridLayout--介紹 GridLayout布局,聽其名而知其意,它將容器分割成多行多列,組件被填充到每個網格中,添加到容器中的組件首先放置在左上角的網格中,然后從左到右放置其它的組件,當占滿該行的所有網格后,接著繼續在下一行從左到右放置組件。 ~~~ /** * 網格布局 */ package com.gui; import java.awt.*; import javax.swing.*; public class Gui4 extends JFrame{ int size = 9; //定義組件; JButton[] jbs = new JButton[9]; public Gui4(){ //創建組件 for(int i = 0; i < size; i++){ jbs[i] = new JButton("" + i); } //設置網格布局 setLayout(new GridLayout(3, 3, 5, 5)); //添加組件 for(int i = 0; i < size; i++){ add(jbs[i]); } //設置窗體屬性 setTitle("網格布局"); setSize(300, 300); setLocation(200,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui4 gui1 = new Gui4(); } } ~~~ ##### 網格布局GridLayout--注意事項 1、組件的相對位置不隨容器的縮放而變化,但大小會變化; 2、所有組件的大小相同; 3、可以通過GridLayout(int?rows,int?cols,int?hgap,int?vgap)來指定網格的行/列,水平間隙/垂直間隙。 參數說明:rows:行數/cols:列數/hgap:垂直間隙/vgap:水平間隙 #### 3、開發GUI程序步驟 1、繼承JFrame(類繼承) 2、定義需要的組件(成員變量) 3、創建組件(構造函數中) 4、添加組件(構造方法中) 5、設置布局管理器(構造方法中) 6、顯示窗體(構造函數中) ### 5、Swing組件--面板組件 ### 面板組件(JPanel)--介紹 在圖形用戶界面編程中,如果只是普通的組件布局,我們用前面講的三種布局管理器就可以解決,但在比較復雜的布局要求時,就需要使用布局管理器的組合使用。 ? JPanel:面板組件,非頂層容器,一個界面只可以有一個JFrame窗體組件,但可以有多個JPanel面板組件,而JPanel上也可以使用FlowLayout、BorderLayout、GirdLayout等各種布局管理器,這樣可以組合使用達到較為復雜的布局效果。 ~~~ /** * 多種布局管理器的使用 */ package com.gui; import java.awt.*; import javax.swing.*; public class Gui5 extends JFrame{ //定義組件 JPanel jp1, jp2; JButton jb1, jb2, jb3, jb4, jb5, jb6; //構造方法 public Gui5(){ //創建組件 //JPanel布局默認是FlowLayout jp1 = new JPanel(); jp2 = new JPanel(); jb1 = new JButton("Button1"); jb2 = new JButton("Button2"); jb3 = new JButton("Button3"); jb4 = new JButton("Button4"); jb5 = new JButton("Button5"); jb6 = new JButton("Button6"); //添加JPanel jp1.add(jb1); jp1.add(jb2); jp2.add(jb3); jp2.add(jb4); jp2.add(jb5); //把JPanel加入JFrame add(jp1, BorderLayout.NORTH); add(jb6, BorderLayout.CENTER); add(jp2, BorderLayout.SOUTH); //設置窗體 setTitle("多種布局管理器的使用"); setSize(300, 300); setLocation(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String args[]){ Gui5 gui1 = new Gui5(); } } ~~~ ### 面板(JPanel)組件--注意事項 1、JPanel是JComponent的子類; 2、屬于容器類組件,可以加入別的組件; 3、默認布局管理器是流式布局(FlowLayout) ### Swing組件--文本框/密碼框/標簽組件 在圖形用戶界面編程中,我們常常會提供用戶登錄界面,比如登錄到會員管理系統,登錄到工資管理系統、倉庫管理系統等。這時候我們就會用到: 1、文本框(JTextField) 2、密碼框(JPasswordField) 3、標簽(JLable) ~~~ package com.gui; import java.awt.*; import javax.swing.*; public class Gui6 extends JFrame{ //定義組件 JPanel jp1, jp2, jp3; JLabel jlb1, jlb2; JButton jb1, jb2; JTextField jtf; JPasswordField jpf; //構造方法 public Gui6(){ //創建組件 jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jlb1 = new JLabel("用戶名:"); jlb2 = new JLabel("密 碼:"); jb1 = new JButton("登錄"); jb2 = new JButton("取消"); jtf = new JTextField(10); jpf = new JPasswordField(10); //設置布局管理器 setLayout(new GridLayout(3, 1)); //加入組件 jp1.add(jlb1); jp1.add(jtf); jp2.add(jlb2); jp2.add(jpf); jp3.add(jb1); jp3.add(jb2); //加入到JFrame add(jp1); add(jp2); add(jp3); //設置窗體 setTitle("登錄界面"); setSize(300, 150); setLocation(500,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui6 gui1 = new Gui6(); } } ~~~ ### Swing組件--復選框/單選框組件 在圖形用戶界面編程中,我們常常會提供用戶注冊界面,這時候我們就會用到: 1、復選框組件(JCheckBox) 2、單選框組件(JRadioBuutton) 特別說明: ????同一組單選按鈕必需先創建ButtonGroup,然后把單選框組件放入到ButtonGroup中 ~~~ package com.gui; import java.awt.*; import javax.swing.*; public class Gui7 extends JFrame{ //定義組件 JPanel jp1, jp2, jp3; JLabel jl1, jl2; JButton jb1, jb2; JCheckBox jcb1, jcb2, jcb3; JRadioButton jrb1, jrb2; ButtonGroup bg; //構造函數 public Gui7(){ //創建組件 jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jl1 = new JLabel("你喜歡的運動:"); jl2 = new JLabel("你喜歡的運動:"); jb1 = new JButton("注冊用戶"); jb2 = new JButton("取消注冊"); jcb1 = new JCheckBox("足球"); jcb2 = new JCheckBox("籃球"); jcb3 = new JCheckBox("網球"); jrb1 = new JRadioButton("男"); jrb2 = new JRadioButton("女"); //單選組件一定要放入到一個ButtonGroup //不放入的話,可以多選 bg = new ButtonGroup(); bg.add(jrb1); bg.add(jrb2); //設置布局管理器 setLayout(new GridLayout(3, 1)); //添加組件 jp1.add(jl1); jp1.add(jcb1); jp1.add(jcb2); jp1.add(jcb3); jp2.add(jl2); jp2.add(jrb1); jp2.add(jrb2); jp3.add(jb1); jp3.add(jb2); add(jp1); add(jp2); add(jp3); //設置窗體 setTitle("調查報告"); setSize(300, 300); setLocation(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui7 gui1 = new Gui7(); } } ~~~ ### Swing組件--下拉框/列表框/流動空格組件 在圖形用戶界面編程中,常常會提供用戶調查界面,這個時候會用到: 1、下拉框組件(JComboBox) 2、列表框組件(JList) 3、滾動窗格組件(JScrollPane) 特別說明: ????一般來說,列表框組件+滾動窗格組件是結合使用的。目的是讓列表框中的選項可以有滾動條支持。 ~~~ package com.gui; import java.awt.*; import javax.swing.*; public class Gui8 extends JFrame{ //定義組件 JPanel jp1, jp2; JLabel jl1, jl2; JComboBox jcb; JList jlist; JScrollPane jsp; //構造方法 public Gui8(){ //創建組件 jp1 = new JPanel(); jp2 = new JPanel(); jl1 = new JLabel("你的籍貫:"); jl2 = new JLabel("旅游地點:"); String[] jg = {"北京", "上海", "天津", "火星"}; jcb = new JComboBox(jg); String[] dd = {"九寨溝", "故宮", "長城", "天安門"}; jlist = new JList(dd); //設置顯示選項個數 jlist.setVisibleRowCount(2); jsp = new JScrollPane(jlist); //設置布局 setLayout(new GridLayout(3, 1)); //添加組件 jp1.add(jl1); jp1.add(jcb); jp2.add(jl2); jp2.add(jsp); add(jp1); add(jp2); //設置窗體 setTitle("旅游"); setSize(300, 300); setLocation(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui8 gui1 = new Gui8(); } } ~~~ ### Swing組件--總結 總結: 1、Swing的常用組件(JFrame(框架)、Jpanel(面板)、JButton(按鈕)、JLable(標簽)、JTextField(文本框)、JPasswordField(密碼框)、JCheckBox(復選框)、JRadioButton(單選框)、JComboBox(下拉框)、JScrollPane(滾動窗格)、JList(列表框))。 2、三大布局管理器(BorderLayout(邊界布局)、FlowLayout(流布局)、GridLayout(網格布局)),要靈活使用,從而滿足設計需求。 ### 6、GUI編程實踐 ### 1、拆分窗格(JSplitPane)屬于容器類組件 ~~~ package com.gui; import java.awt.*; import javax.swing.*; public class Gui9 extends JFrame{ //定義組件 JSplitPane jsp; JList jlist; JLabel jl; //構造方法 public Gui9(){ //創建組件 String[] words = {"boy", "girl", "bird"}; jlist = new JList(words); jl = new JLabel(new ImageIcon("images/image01.jpg")); //拆分窗格 jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jlist, jl); //可以變化 jsp.setOneTouchExpandable(true); //添加組件 add(jsp); //設置窗體 setTitle("分割"); setSize(400, 300); setLocation(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui9 gui1 = new Gui9(); } } ~~~ ### 2、多行文本框(JTextArea)組件 ~~~ package com.gui; import java.awt.*; import javax.swing.*; public class Gui10 extends JFrame{ //定義組件 JTextArea jta = null; JPanel jp1 = null; JComboBox jcb = null; JTextField jtf = null; JButton jb = null; JScrollPane jsp = null; //構造方法 public Gui10(){ jta = new JTextArea(); jsp = new JScrollPane(jta); jp1 = new JPanel(); String[] chatter = {"張三","李四"}; jcb = new JComboBox(chatter); jtf = new JTextField(10); jb = new JButton("發送"); //添加組件 jp1.add(jcb); jp1.add(jtf); jp1.add(jb); //加入JFrame add(jsp); add(jp1, BorderLayout.SOUTH); //設置窗體 setIconImage((new ImageIcon("images/image01.jpg")).getImage()); setTitle("聊天"); setSize(400, 300); setLocation(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui10 gui1 = new Gui10(); } } ~~~ ### 3、頁簽組件(JTabbedPane)選項卡窗格 ~~~ package com.gui; import java.awt.*; import javax.swing.*; public class Gui11 extends JFrame{ //定義組件 JPanel jp1, jp2, jp3, jp4; JLabel jl1, jl2, jl3, jl4, jl5; JTextField jtf1; JPasswordField jpf1; JCheckBox jcb1, jcb2; JButton jb1, jb2, jb3, jb4; JTabbedPane jtp; //構造函數 public Gui11(){ //創建組件 jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jl1 = new JLabel(new ImageIcon("images/image01.jpg")); jl2 = new JLabel("賬號"); jl3 = new JLabel("密碼"); jl4 = new JLabel("忘記密碼"); jl4.setForeground(Color.BLUE); jl5 = new JLabel("<html><a href='http://blog.csdn.net/q547550831'>訪問</a>"); jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); jtf1 = new JTextField(10); jpf1 = new JPasswordField(10); jcb1 = new JCheckBox("隱身登錄"); jcb2 = new JCheckBox("記住密碼"); jb1 = new JButton("清除號碼"); jb2 = new JButton("登錄"); jb3 = new JButton("注銷"); jb4 = new JButton("注冊"); jtp = new JTabbedPane(); //設置布局 jp1.setLayout(new GridLayout(3, 3)); jp1.add(jl2); jp1.add(jtf1); jp1.add(jb1); jp1.add(jl3); jp1.add(jpf1); jp1.add(jl4); jp1.add(jcb1); jp1.add(jcb2); jp1.add(jl5); jp2.setBackground(Color.RED); jp3.setBackground(Color.BLUE); jtp.add("賬號", jp1); jtp.add("手機號碼", jp2); jtp.add("電子郵件", jp3); jp4.add(jb2); jp4.add(jb3); jp4.add(jb4); //加入到JFrame add(jl1, BorderLayout.NORTH); add(jtp); add(jp4, BorderLayout.SOUTH); //設置窗體 setTitle("登錄界面"); setIconImage((new ImageIcon("images/image02.jpg")).getImage()); setSize(400, 300); setLocation(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui11 gui1 = new Gui11(); } } ~~~ ### 4、菜單組件(JMenuBar、JMenu、JMenuItem)工具條組件(JToolBar) ~~~ package com.gui; /** * 1、菜單組件 JMenuBar 菜單條組件 樹干 JMenu 菜單組件 樹枝 JMenuItem 菜單項組件 樹葉 2、二級菜單制作 JMenu里面可以嵌套JMenu 3、工具條組件 JToolBar 容器類組件 */ import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.InputMethodEvent; import java.awt.event.KeyEvent; import javax.swing.*; public class Gui12 extends JFrame{ //文件組定義組件 JMenuBar jmb;//菜單條組件 JMenu menu1,menu2,menu3,menu4,menu5;//主菜單:文件、編輯、格式、查看、幫助 JMenuItem item2,item3,item4,item5,item6,item7;//子菜單:新建、打開、保存、另存為、頁面設置、打印、退出 JMenu xinjian;//二級菜單 JMenuItem file,project; //編輯組定義組件 //編輯:撤消、剪切、復制、粘貼、刪除、查找、查找下一個、替換、轉到、全選、時間/日期 JMenuItem eitem1,eitem2,eitem3,eitem4,eitem5,eitem6,eitem7,eitem8,eitem9,eitem10,eitem11; //格式組定義組件 JMenuItem oitem1,oitem2;//格式:自動換行、字體 //查看組定義組件 JMenuItem vitem1;//查看:狀態欄 //幫助組定義組件 JMenuItem hitem1,hitem2;//幫助:查看幫助、關于記事本 JTextArea jta; //工具條 JToolBar jtb; JButton jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8; public static void main(String[] args) { Gui12 win=new Gui12(); } //構造函數 public Gui12(){ //構建組件 //工具條 jtb=new JToolBar(); jb1=new JButton(new ImageIcon("images/new.jpg")); jb1.setToolTipText("新建");//設置提示信息 jb2=new JButton(new ImageIcon("images/open.jpg")); jb2.setToolTipText("打開"); jb3=new JButton(new ImageIcon("images/save.jpg")); jb3.setToolTipText("保存"); jb4=new JButton(new ImageIcon("images/copy.jpg")); jb4.setToolTipText("復制"); jb5=new JButton(new ImageIcon("images/delete.jpg")); jb5.setToolTipText("刪除"); jb6=new JButton(new ImageIcon("images/modify.jpg")); jb6.setToolTipText("編輯"); jb7=new JButton(new ImageIcon("images/print.jpg")); jb7.setToolTipText("打印"); jb8=new JButton(new ImageIcon("images/close.jpg")); jb8.setToolTipText("關閉"); jmb=new JMenuBar(); //主菜單 menu1=new JMenu("文件(F)"); menu1.setMnemonic('F');//設置助記符 menu2=new JMenu("編輯(E)"); menu2.setMnemonic('E'); menu3=new JMenu("格式(O)"); menu3.setMnemonic('O'); menu4=new JMenu("查看(V)"); menu4.setMnemonic('V'); menu5=new JMenu("幫助(H)"); menu5.setMnemonic('H'); //文件--新建--子目錄 xinjian=new JMenu("新建"); file=new JMenuItem("文件"); project=new JMenuItem("工程"); item2=new JMenuItem("打開(O)"); item2.setMnemonic('O'); item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));//設置ctrl快捷組合鍵 item3=new JMenuItem("保存(S)"); item3.setMnemonic('S'); item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); item4=new JMenuItem("另存為(A)"); item4.setMnemonic('A'); item5=new JMenuItem("頁面設置(U)"); item5.setMnemonic('U'); item6=new JMenuItem("打印(P)"); item6.setMnemonic('P'); item6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); item7=new JMenuItem("退出(X)"); item7.setMnemonic('X'); eitem1=new JMenuItem("撤消(U)"); eitem1.setMnemonic('U'); eitem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK)); eitem2=new JMenuItem("剪切(T)"); eitem2.setMnemonic('T'); eitem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK)); eitem3=new JMenuItem("復制(C)"); eitem3.setMnemonic('C'); eitem3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); eitem4=new JMenuItem("粘貼(P)"); eitem4.setMnemonic('P'); eitem4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); eitem5=new JMenuItem("刪除(L)"); eitem5.setMnemonic('L'); eitem5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0)); eitem6=new JMenuItem("查找(F)"); eitem6.setMnemonic('F'); eitem6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK)); eitem7=new JMenuItem("查找下一個(N)"); eitem7.setMnemonic('N'); eitem7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0)); eitem8=new JMenuItem("替換(R)"); eitem8.setMnemonic('R'); eitem8.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,InputEvent.CTRL_MASK)); eitem9=new JMenuItem("轉到(G)"); eitem9.setMnemonic('G'); eitem9.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK)); eitem10=new JMenuItem("全選(A)"); eitem10.setMnemonic('A'); eitem10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); eitem11=new JMenuItem("時間/日期(D)"); eitem11.setMnemonic('D'); eitem11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0)); oitem1=new JMenuItem("自動換行(W)"); oitem1.setMnemonic('W'); oitem2=new JMenuItem("字體(F)"); oitem2.setMnemonic('F'); vitem1=new JMenuItem("狀態欄(S)"); vitem1.setMnemonic('S'); hitem1=new JMenuItem("查看幫助(H)"); hitem1.setMnemonic('H'); hitem2=new JMenuItem("關于記事本(A)"); hitem2.setMnemonic('A'); jta=new JTextArea(); //設定布局管理器 //加入組件 //將按鈕添加到工具條上 jtb.add(jb1); jtb.add(jb2); jtb.add(jb3); jtb.add(jb4); jtb.add(jb5); jtb.add(jb6); jtb.add(jb7); jtb.add(jb8); //將菜單項添加到菜單上 xinjian.add(file); xinjian.add(project); menu1.add(xinjian); menu1.add(item2); menu1.add(item3); menu1.add(item4); menu1.addSeparator();//添加分割線 menu1.add(item5); menu1.add(item6); menu1.addSeparator(); menu1.add(item7); menu2.add(eitem1); menu2.addSeparator(); menu2.add(eitem2); menu2.add(eitem3); menu2.add(eitem4); menu2.add(eitem5); menu2.addSeparator(); menu2.add(eitem6); menu2.add(eitem7); menu2.add(eitem8); menu2.add(eitem9); menu2.addSeparator(); menu2.add(eitem10); menu2.add(eitem11); menu3.add(oitem1); menu3.add(oitem2); menu4.add(vitem1); menu5.add(hitem1); menu5.addSeparator(); menu5.add(hitem2); //將菜單添加到菜單條上 jmb.add(menu1); jmb.add(menu2); jmb.add(menu3); jmb.add(menu4); jmb.add(menu5); //將菜單條添加到窗體上 this.setJMenuBar(jmb); //將工具條添加到窗體上 this.add(jtb,BorderLayout.NORTH); JScrollPane jsp=new JScrollPane(jta); jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); this.add(jsp); //窗體設置 this.setTitle("Java記事本"); this.setSize(500, 400); this.setLocationRelativeTo(null); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ~~~ ### 7、java繪圖坐標體系 ### 繪圖坐標本系--介紹 坐標原點位于左上角,以像素為單位。像素是計算機屏幕上最小的顯示單位。在java的坐標系中,第一個是X坐標,表示當前位置為水平方向,距離坐標原點X個像素;第二個是Y坐標,表示當前位置為垂直方向,距離坐標原點Y個像素。 ![](https://box.kancloud.cn/2016-02-25_56ceb3e17d02e.jpg) ### 坐標體系--像素 ????計算機在屏幕上顯示的內容都是由屏幕上的每一個像素組成的。例如,計算機顯示器的分辨率是800×600,表示計算機屏幕上的每一行由800個點組成,共有600行,整個計算機屏幕共有480000個像素。現在的計算機可以支持更高的分辨率,也就是說,屏幕上可以顯示更多的像素。因此,像素是一個密度單位,而厘米是長度單位,兩者無法比較。 ### 繪圖原理(1) Component類提供了兩個和繪圖相關最重要的方法: 1、paint(Graphics?g)繪制組件的外觀 2、repaint()刷新組件的外觀 當組件第一次在屏幕顯示的時候,程序會自動的調用paint()方法來繪制組件 ? ### 繪圖原理(2) 在以下情況paint()將會被調用: 1、窗口最小化,再最大化 2、窗口的大小發生變化 3、repaint函數被調用 ### java繪圖技術--Graphics #### Graphics類 Graphics類你可以理解就是畫筆,為我們提供了各種繪制圖形的方法: 1、畫直線?drawLine(int?x1,int?y1,int?x2,int?y2); 2、畫矩形邊框?drawRect(int?x,int?y,int?width,int?height); 3、畫橢圓邊框?drawOval(int?x,int?y,int?width,int?height); 4、填充矩形?fillRect(int?x,int?y,int?width,int?height); 5、填充橢圓?fillOval(int?x,int?y,int?width,int?height); 6、畫圖片?drawImage(Image?img.int?x,int?y,..); 7、畫字符串?drawString(String?str,int?x,int?y); 8、設置畫筆的字體?setFont(Font?font); 9、設置畫筆的顏色?setColor(Color?c); ~~~ package com.gui; import java.awt.*; import javax.swing.*; public class Gui13 extends JFrame{ MyPanel mp = null; public Gui13(){ mp = new MyPanel(); add(mp); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui13 gui1 = new Gui13(); } } //定義一個MyPanel,用于繪圖和顯示繪圖的區域 class MyPanel extends JPanel{ //覆蓋JPanel的paint方法 //Graphics是繪圖的重要類,等價于畫筆 public void paint(Graphics g){ //1.調用父類方法,完成初始化 super.paint(g); //空心圓 //g.drawOval(10, 10, 30, 30); //直線 //g.drawLine(10, 10, 40, 40); //空心矩形 //g.drawRect(10, 10, 40, 60); //填充矩形 // g.setColor(Color.BLUE); // g.fillRect(10, 10, 40, 60); // g.setColor(Color.RED); // g.fillRect(70, 70, 40, 60); //在面板上畫出圖片 // Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/images/image01.jpg")); // g.drawImage(im, 10, 10, 200, 150, this); //字符 // g.setColor(Color.red); // g.setFont(new Font(("隸書"), Font.BOLD, 30)); // g.drawString("String 字符串", 100, 100); //圓的輪廓 g.drawArc(100, 100, 100, 100, 20, 300); } } ~~~ ### 8、java事件處理機制 ? ### java事件處理機制--初步介紹 java事件處理是采取“委派事件模型”。所謂“委派事件模型”是指當事件發生時,產生事件的對象(即事件源),會把此“信息”傳遞給“事件的監聽者”處理的一種方式,而這里所說的“信息”實際上就是java.awt.event事件類庫里某個類所創建的對象,我們暫時把它稱為“事件的對象”。 ![](https://box.kancloud.cn/2016-02-25_56ceb3e18eb88.jpg) ? ? 比如:當按下按鈕時,就會在按鈕觸發一個“事件”,程序就會產生一個“事件對象”來表示這個事件,并把這個“事件對象”傳遞給“事件的監聽者”,“事件的監聽者”再根據“事件對象”的類型進行相應處理。 為了讓“產生事件的對象”[比如按鈕]知道要把事件傳遞給哪一個“事件監聽者”,我們必需先把“事件監聽者”在“產生事件的對象”注冊,這個操作也就是要告知“產生事件的對象”要把事件傳遞給它。 ![](https://box.kancloud.cn/2016-02-25_56ceb3e19f8db.jpg) ~~~ /** * 功能:事件處理機制 */ package com.gui; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Gui14 extends JFrame implements ActionListener{ //定義組件 Panel mp = null; JButton jb1, jb2; public Gui14(){ mp = new Panel(); //設置背景顏色 mp.setBackground(Color.black); jb1 = new JButton("黑色"); jb2 = new JButton("紅色"); add(jb1, BorderLayout.NORTH); add(mp); add(jb2, BorderLayout.SOUTH); //注冊監聽 jb1.addActionListener(this); jb2.addActionListener(this); //事件源是jb1,jb2,事件監聽者是gui14的對象 //指定action命令 jb1.setActionCommand("黑色"); jb2.setActionCommand("紅色"); //設置窗體 setSize(300, 200); setLocation(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui14 gui1 = new Gui14(); } //對事件處理的方法 @Override public void actionPerformed(ActionEvent e) { //判斷是哪個按鈕被點擊 if(e.getActionCommand().equals("黑色")){ //System.out.println("黑色"); mp.setBackground(Color.black); } else if(e.getActionCommand().equals("紅色")){ //System.out.println("紅色"); mp.setBackground(Color.red); } else { } } } class MyPanel2 extends JPanel{ public void paint(Graphics g){ } } ~~~ ~~~ /** * 1.通過上下左右鍵來控制一個小球的移動 */ package com.gui; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Gui15 extends JFrame{ //定義組件 MyPanel3 mp =null; public Gui15(){ mp = new MyPanel3(); //mp加入JFrame add(mp); //添加監聽 addKeyListener(mp); //設置窗體 setTitle("小球"); setSize(400, 300); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui15 gui1 = new Gui15(); } } //定義自己的面板 class MyPanel3 extends JPanel implements KeyListener{ private int x = 10; private int y = 10; public void paint(Graphics g){ super.paint(g); //圓 g.fillOval(x, y, 20, 20); } //輸入的一個具體信息 @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub //System.out.println("typed"); } //按壓 @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub //System.out.println("press"); //向下 向上 向左 向右 if(e.getKeyCode() == KeyEvent.VK_DOWN){ y += 2; } else if(e.getKeyCode() == KeyEvent.VK_UP){ y -= 2; } else if(e.getKeyCode() == KeyEvent.VK_LEFT){ x -= 2; } else if(e.getKeyCode() == KeyEvent.VK_RIGHT){ x += 2; } //調用repaint()方法,重繪面板 repaint(); } //釋放 @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub //System.out.println("released" + (char)e.getKeyCode()); } } ~~~ ### java事件處理機制--深入理解 #### 1、事件源 ????事件源是一個產生(或觸發)事件的對象,比如前面的JButton的一個對象jb1。當這個事件源對象的某些狀態以某種方式發生變化時,就會產生某種類型的事件(一個事件源可能會生成多個不同類型的事件)。如果某個組件(對象)希望得到事件源產生的事件,就需要在這個事件源上注冊。 #### 2、事件 事件就是承載事件源狀態改變時的信息對象。或者說,事件是事件源事件監聽器傳輸事件源狀態信息的載體。在用戶與GUI組件進行交互時就會生成事件,比如當鼠標在面板中移動時,就會生成一個鼠標移動事件的對象,而這個對象保存著當前鼠標在面板中位置信息。java.awt.event包和javax.swing.event包中定義了各種事件類型,常見的事件類有: <table><tbody><tr><td valign="top"><p>事件類</p></td><td valign="top"><p>說明</p></td></tr><tr><td valign="top"><p>ActionEvent</p></td><td valign="top"><p>通常在按下按鈕,或雙擊一個列表項或選中某個菜單時發生</p></td></tr><tr><td valign="top"><p>AdjustmentEvnet</p></td><td valign="top"><p>當操作一個滾動條時發生</p></td></tr><tr><td valign="top"><p>ComponentEvent</p></td><td valign="top"><p>當一個組件隱藏、移動、改變大小時發送</p></td></tr><tr><td valign="top"><p>ContainerEvent</p></td><td valign="top"><p>當一個組件從容器中加入或者刪除時發生</p></td></tr><tr><td valign="top"><p>FocusEvent</p></td><td valign="top"><p>當一個組件獲得或是失去焦點時發生</p></td></tr><tr><td valign="top"><p>ItemEvent</p></td><td valign="top"><p>當一個復選框或是列表項被選中時,當一個選擇框或選擇菜單被選中</p></td></tr><tr><td valign="top"><p>KeyEvent</p></td><td valign="top"><p>當從鍵盤的按鍵被按下,松開時發生</p></td></tr><tr><td valign="top"><p>MouseEvent</p></td><td valign="top"><p>當鼠標被拖動、移動、點擊、按下..</p></td></tr><tr><td valign="top"><p>TextEvent</p></td><td valign="top"><p>當文本區和文本域的文本發生改變時發生</p></td></tr><tr><td valign="top"><p>WindowEvent</p></td><td valign="top"><p>當一個窗口激活、關閉、失效、恢復、最小化...</p></td></tr></tbody></table> #### 3、事件監聽器接口 ????事件源產生一個事件,可以傳送給事件監聽者處理,那么怎樣才能編寫一個事件監聽者呢? ????事件監聽者實際上就是一個類,該類實現了某個事件監聽器接口、比如前面我們案例中的MyPanel就是一個類,它實現了ActionListener接口,它就可以作為一個事件監聽者,對接受到的事件進行處理。 ????事件監聽器接口有多種,不同的事件監聽器接口可以監聽不同的事件,一個類可以實現一個事件監聽接口,也可以實現多個監聽接口,這些接口在java.awt.event和javax.swing.event包中定義。 ~~~ package com.gui; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Gui16 extends JFrame{ //定義組件 MyPanel4 mp = null; //構造方法 public Gui16(){ mp = new MyPanel4(); //mp加入JFrame add(mp); //注冊監聽 addMouseListener(mp); addKeyListener(mp); addMouseMotionListener(mp); //設置窗體 setSize(400, 300); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { Gui16 gui1 = new Gui16(); } } //1 鼠標按下輸出坐標,移出,移入,按下,釋放 //2.按鍵按下對應字符 //3.鼠標移動、拖拽 //4.窗口變化(關閉,最小化,最大化) //定義自己的面板 class MyPanel4 extends JPanel implements MouseListener, KeyListener, MouseMotionListener, WindowListener{ public void paint(Graphics g){ super.paint(g); } //鼠標 //鼠標點擊 @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠標點擊了 x = " + e.getX() + " y = " + e.getY()); } //鼠標按下 @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠標按下"); } //鼠標松開 @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠標松開"); } //鼠標移動到MyPanel4 @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠標移出"); } //鼠標移出MyPanel4 @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠標進入"); } //鼠標拖拽 @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub } //鼠標移動 @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub System.out.println("鼠標當前坐標x = " + e.getX() + " Y = " + e.getY()); } //鍵盤 //輸入具體信息 @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } //按下 @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub System.out.println(e.getKeyChar() + "鍵被按下"); } //釋放 @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } //窗口 //窗口打開 @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub } //窗口正在關閉 @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub } //窗口關閉 @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub } //窗口最小化 @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub } //窗口最小化到顯示 @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub } //窗口被激活了 @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub } //窗口變成非激活窗口 @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub } } ~~~ ### java事件處理機制--總結 #### 總結--事件編程步驟: 1、編寫事件處理類(事件監聽者) 2、根據需求給事件處理類實現監聽器接口 3、在事件處理中重寫(實現)其事件處理的函數 4、在事件源類中指定該事件的監聽器(響應者)是誰 ? #### 注意事項: 1、java采用委托機制處理事件 2、java中的事件是分類的,比如對窗體事件、鼠標事件、按鍵事件、操作事件[按按鈕] 3、java中一個類要監聽某個事件,則必需實現相應的事件監聽接口 4、事件監聽接口有多種,程序員應當針對不同的情況,實現不同的監聽接口,比如監聽鼠標事件就應當實現MouseListener;要監聽鍵盤事件,就應當實現KeyListener.. 5、在實現監聽接口的類(事件監聽類/者)中,需要重寫處理函數,比如實現了ActionListener接口,就應當重寫actionPerformed(ActionEvent?e),可以參考前面的事件監聽器接口表格 6、在事件源中需要注冊事件監聽類。否則事件監聽類接收不到事件源發生的事件。 ? #### 一個類要實現監聽的步驟: a、實現相應的接口[KeyListener/MouseListener/ActionListener/WindowListener] b、把接口的處理方法根據需要重新編寫(Override) c、在事件源上注冊監聽 d、事件傳遞是靠事件(類)對象 ----------參考《韓順平.循序漸進學.java.從入門到精通》 ----------參考《JDK_API_1_6_zh_CN》 Java學習筆記--導航[http://blog.csdn.net/q547550831/article/details/49819641](http://blog.csdn.net/q547550831/article/details/49819641)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看