Java窗口精細全方位講解
好了,stop!
我們呢
咳咳咳
下面呢
也就直接進入正題?。?!
一、新建簡單窗口
在java中新建窗口將會用到"java.awt",大家可以參見API文檔
import java.awt.*; //包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有類。
這是API文檔的下載鏈接;
API下載地址
我呢用的是Notpad++進行編寫的,所以就用這個直接給鐵鐵們演示了;
首先我們先寫一個個簡單的窗口代碼:
import java.awt.*; public class chuangko{ public static void main(String args[]){ Frame p=new Frame("Hello");//定義窗口名稱 p.setSize(500,500);//設置窗口大小(長,寬) p.setLocation(300,200);//設置窗口左上角點界面位置(長,寬) p.setBackground(Color.BLUE);//設置窗口內(nèi)部顏色 p.setVisible(true);//顯示窗口 } }
運行效果如下:
現(xiàn)在呢我們已經(jīng)掌握了最基礎的窗口代碼編寫;
ps:是不是感覺也不難哎
二、編寫窗口中的按鍵
在一個窗口代碼中我們不僅僅要將窗口顯示出來,更重要的是將這個窗口代碼實現(xiàn)其價值,所以添加窗口按鍵是必不可少的方法!
我們呢還在上面那段代碼中繼續(xù)修改;
首先我們在API文檔中找到button這個類;
public class Button extends Component implements Accessible //此類創(chuàng)建一個標簽按鈕。當按下該按鈕時,
這是button類常用的方法;
在原來代碼中填寫:
import java.awt.*; public class chuangko{ public static void main(String args[]){ Frame p=new Frame("Hello"); p.setSize(1000,500); p.setLocation(300,200); p.setBackground(Color.BLUE); p.add(new Button("!"));//顯示,新建按鍵,定義按鍵名稱 /*或者: Button b=new Button("!"); p.add(b); */ p.setVisible(true); } }
這樣能我們就簡單的寫出來個按鍵,但是遠遠不夠!
我們將按鍵布局:
import java.awt.*; public class chuangko{ public static void main(String[] args){ Frame f=new Frame("Hello"); f.setLayout(new GridLayout(2,1));//初始化按鍵布局樣式,兩行一列 f.setSize(300,200); f.setBackground(new Color(200,50,104));//定義窗口背景顏色,括號內(nèi)代表顏色取值 f.setLocation(500,400); Panel a=new Panel(new BorderLayout());//定義上半部分 Panel b=new Panel(new BorderLayout());//定義下半部分 Panel a1=new Panel(new GridLayout(2,1));//定義一個值a1,是兩行一列 Panel b1=new Panel(new GridLayout(2,2));//定義一個值b1,是兩行2列 a.add(new Button("0"),BorderLayout.WEST);//放在a部分西邊 a.add(new Button("0"),BorderLayout.EAST);//放在a部分東邊 a1.add(new Button("0"));//中間第一行 a1.add(new Button("0"));//中間第二行 a.add(a1,BorderLayout.CENTER);//將a1放到a部分中間里面 b.add(new Button("0"),BorderLayout.WEST);//放在b部分西邊 b.add(new Button("0"),BorderLayout.EAST);//放在b部分東邊 for(int i=0;i<4;i++) { b1.add(new Button("0"));//將中間4個位置平均分布 } b.add(b1,BorderLayout.CENTER);//將b1放到b部分中間里面 f.add(a);//定義上半部分 f.add(b);//定義下半部分 f.setVisible(true);//顯示 } }
鐵鐵們看到這么長的代碼先別慌,其實仔細理解很簡單的
代碼運行效果如下:
這樣子呢我們就了解了按鍵布局,但是我們發(fā)現(xiàn)按動按鍵并未有反應所以我們需要寫一個監(jiān)聽方法來進行對按鍵的操作;
我們呢就先了解一下什么是監(jiān)聽;
首先我們在API文檔中找到:Monitor
public abstract class Monitor extends Notification Broadcaster Support implements MonitorMBean, MBeanRegistration //定義所有監(jiān)視器 MBean 的公共部分。
我們用接口“ActionListener”進行調(diào)用;
了解完監(jiān)聽方法那么我們試這來寫一個簡單的程序;
代碼如下:
import java.awt.*; import java.awt.event.*; public class jt{ public static void main(String[] args){ Frame f=new Frame("監(jiān)聽"); Button b=new Button("!!!!!"); Monitor bh=new Monitor();//監(jiān)聽,new誰調(diào)用誰 b.addActionListener(bh);//被動監(jiān)聽,鉤子函數(shù) f.add(b,BorderLayout.CENTER);//按鍵局中 f.pack();//根據(jù)按鍵設置頁面合理大小 f.setVisible(true); } } class Monitor implements ActionListener //接口 { public void actionPerformed(ActionEvent e)//封裝 { System.out.println("ok");//監(jiān)聽表述 } }
代碼運行效果:
當我們點擊按鍵時,在命令提示符中會有“ok”顯示出來;
由此我們掌握了一定的按鍵編寫的方法?。。?/p>
三、簡單的按鍵運行
在了解以上知識之后我們試的來編寫一個加法程序,用窗口進行展示出來;
在編寫之前我們要掌握以下幾個知識點:
1.流布局管理器:
類:FlowLayout
這個我們在API文檔中可進行查詢
2.靜態(tài)文本框:
在API文檔中找到:Label
格式如下:
Label a=new Label(" ");
在了解完以上知識后我們可以著手編寫加法程序了
代碼,解析如下:
import java.awt.*; import java.awt.event.*; public class jiafa{ public static void main(String[] args){ new TFFrame().launchFrame(); } } class TFFrame extends Frame{ TextField tf,tf1,tf2;//在外部定義,否則調(diào)用不上! public void launchFrame()//運行 { tf=new TextField(10);//允許編輯單行文本的文本組件,設置寬度 tf1=new TextField(10); tf2=new TextField(20); Label lblPlus=new Label("+"); //輸入靜態(tài)文本,是一個可在容器中放置文本的組件。一個標簽只顯示一行只讀文本。文本可由應用程序更改,但是用戶不能直接對其進行編輯。 Button b=new Button("=");//設置按鍵 b.addActionListener(new MyMonitor()); setLayout(new FlowLayout());//使用流布局管理器 add(tf);//按想輸出樣式順序?qū)慳dd add(lblPlus); add(tf1); add(b); add(tf2); tf.addActionListener(new TFActionListener());//新建接口 tf1.addActionListener(new TFActionListener());//新建接口 pack(); setVisible(true);//顯示輸入框 } //聲明在class里面,方法外面?。?! private /* 只可以自己訪問*/ class MyMonitor implements ActionListener//直接定義內(nèi)部類,可以直接訪問!?。?! { public void actionPerformed (ActionEvent e)//封裝 { int n1=Integer.parseInt(tf.getText());//將文本框輸入值調(diào)用Integer int n2=Integer.parseInt(tf1.getText()); tf2.setText(""+(n1+n2));//定義值的運算 } } }
這樣我們就寫好了基礎的加法代碼了;
運行一下試試:
————————————————————手動分割—————————————————————
在學習了以上知識后我們可以試試自己編寫一個計算平方的一個窗口程序;
答案放在文章結尾處鐵鐵們;
————————————————————手動分割—————————————————————
對了!
細心的鐵鐵們可能發(fā)現(xiàn)了所有窗口無法關閉,所以我們呢需要一個窗口關閉代碼;
這個就不詳細說了,我往期博客中有專門講解過,直接上代碼吧!
this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e)//封裝窗口關閉類型 { setVisible(false); System.exit(0);//顯示關閉 } } );
這串代碼直接放到輸出顯示出口代碼的后面即可!
四、窗口畫圖
這個呢本來是不屬于新建窗口方面的,但是這個太過于簡單我也就直接一起說了吧鐵鐵們;
ps:是真的真的很簡單哎
咳咳咳首先呢我們還是老樣子直接打開API文檔。在awt里面找到Color類和Graphics類;
public class Color extends Object implements Paint, Serializable //Color 類用于封裝默認 sRGB 顏色空間中的顏色,或者用于封裝由 ColorSpace 標識的任意顏色空間中的顏色
public abstract class Graphics extends Object
Color類用于設定圖像顏色;Graphics類用于設定圖像類型;
在此之后我們找到專門用于畫圖的接口Paint;
public void paint (Graphics g) { }
掌握以上知識點呢我們可以試的來寫一個小的程序;
import java.awt.*; import java.awt.event.*; public class ht{ public static void main(String[] args){ new PainFrame().launchFrame(); } } class PainFrame extends Frame{ public void launchFrame(){ setBounds(200,0,640,480);//定義界面位置及其大小 setVisible(true); //拿來吧你 addWindowListener ( new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } } ); } public void paint(Graphics g)//繪制對象,圖像上進行繪制 //Graphics 類是所有圖形上下文的抽象基類,允許應用程序在組件(已經(jīng)在各種設備上實現(xiàn))以及閉屏圖像上進行繪制。 { Color c=g.getColor();//定義新建顏色 g.setColor(Color.red);//顏色 g.fillOval(50,60,50,50);//定義圖像樣式、位置及其大小 g.setColor(Color.blue); g.fillRect(200,360,80,50); g.setColor(c);//回復現(xiàn)場(習慣) } }
運行效果:
雖然看起來比較簡陋但是至少掌握了最基礎的窗口畫圖;
五、窗口鼠標響應
昨天是七夕節(jié),想必鐵鐵們有不少人都孤寡了吧;(/dog我也一樣)
但是!
別灰心鐵鐵們,我們可以自己寫一個窗口對自己表白嘛;
吶!這就是我自己寫的;(/dog 心畫的有點丑了,差不多看吧)
鐵鐵們看到這個是不是想試一試呢;
這件窗口其實很簡單,也就是用鼠標響應方法寫出來的窗口!
首先
我們還是還是還是要用API文檔查詢!
找到類 Point;
構造方法摘要 Point() 在坐標空間的原點 (0,0) 構造并初始化一個點。 Point(int x, int y) 在坐標空間中指定的 (x,y) 位置構造并初始化一個點。 Point(Point p) 構造并初始化一個與指定的 Point 對象具有相同位置的點。
還有接口:MouseListener
方法摘要 void mouseClicked(MouseEvent e) 鼠標按鍵在組件上單擊(按下并釋放)時調(diào)用。 void mouseEntered(MouseEvent e) 鼠標進入到組件上時調(diào)用。 void mouseExited(MouseEvent e) 鼠標離開組件時調(diào)用。 void mousePressed(MouseEvent e) 鼠標按鍵在組件上按下時調(diào)用。 void mouseReleased(MouseEvent e) 鼠標按鈕在組件上釋放時調(diào)用。
找到以上兩個呢,也就完事具備只差拼湊了,哈哈哈
那么我們來寫出這個代碼:
import java.util.*; import java.awt.*; import java.awt.event.*; public class shub{ public static void main(String[] args){ new MyFrame("孤寡");//窗口名稱 } } class MyFrame extends Frame{ ArrayList<Point> points=null;//初始化接口,<Point> 指定只能裝入類型 MyFrame(String s){ super(s); points=new ArrayList<Point> ();//將空間(x,y)放入接口,<Point> 指定只能裝入類型 setLayout(null); setBounds(600,200,520,520);//文本框大小位置 this.setBackground(new Color(255,100,100)); setVisible(true); /**/ //關閉窗口,寫在顯示窗口后面! this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e)//封裝窗口關閉類型 { setVisible(false); System.exit(0);//顯示關閉 } } ); /**/ this.addMouseListener(new Monitor());//addMouseListener添加指定的鼠標偵聽器,以接收發(fā)自此組件的鼠標事件。 } public void paint(Graphics g)//畫圖(鼠標點完的樣式) { Iterator<Point> a=points.iterator();//指定拿出只能是point while(a.hasNext())//每點一次出一次圖案,循環(huán) { Point p=(Point)a.next(); g.setColor(Color.RED); g.fillOval(p.x,p.y,10,10); } } public void addPoint(Point p){ points.add(p);//加入新建的鼠標點 } } class Monitor extends MouseAdapter//接收鼠標事件的抽象適配器類。 { public void mousePressed(MouseEvent e)//接收后封裝,方法類型在里面 { MyFrame f=(MyFrame)e.getSource();//拿到MyFrame事件源 f.addPoint(new Point(e.getX(),e.getY()));//Point表示 (x,y) 坐標空間中的位置的點,以整數(shù)精度指定。鼠標每點一下會新建一個點對象出來 f.repaint();//將Frame進行重畫,重繪此組件。 /*repaint-update()-paint(),調(diào)用順序(雙緩沖)*/ } }
這樣子呢;
這個看似復雜的代碼也就迎刃而解了;
所以說代碼這個嘛,看似復雜其實都是紙老虎哎!
六、總結
鐵鐵們以上呢就是java窗口入門學習的基本知識點了;
要是鐵子們有時間可以試試吧這些代碼都拼湊在一起;(/摸魚)
最后呢!
還有一點!
很重要滴!
就是 !
幫我兄弟找個對象,哈哈哈哈
吶!表情包附上?。?! (ps:看上的可以私信聯(lián)系我,hxd)
哦對了!正經(jīng)事忘了!
我把上面練習的平方代碼附上,記得寫完之后在看哈!
代碼如下:
import java.awt.*; import java.awt.event.*; public class pf{ public static void main(String[] args){ //new MyFrame("平方"); new TFFrame().launchFrame(); } } class TFFrame extends Frame{ TextField n1,n2; public void launchFrame() { //Frame f=new Frame("平方"); n1=new TextField(10); n2=new TextField(15); Label f=new Label("平方"); Button b=new Button("="); b.addActionListener(new MyMonitor()); setLayout(new FlowLayout()); add(n1); add(f); add(b); add(n2); n1.addActionListener(new TFActionListener()); pack(); setVisible(true); addWindowListener ( new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } } ); } private class MyMonitor implements ActionListener{ public void actionPerformed (ActionEvent e){ int a=Integer.parseInt(n1.getText()); n2.setText(""+(a*a)); } } }
記得!記得!記得!不懂的話評論區(qū)或者私信問我哈鐵鐵們!
還有就是求波關注唄,我努力日更,鐵鐵們,生活不易哎!
到此這篇關于Java窗口精細全方位講解的文章就介紹到這了,更多相關Java窗口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mybatis-plus?查詢傳入?yún)?shù)Map,返回List<Map>方式
這篇文章主要介紹了mybatis-plus?查詢傳入?yún)?shù)Map,返回List<Map>方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12java的三種隨機數(shù)生成方式的實現(xiàn)方法
這篇文章主要介紹了java的三種隨機數(shù)生成方式的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09spring boot 2.x html中引用css和js失效問題及解決方法
這篇文章主要介紹了spring boot 2.x html中引用css和js失效,需要的朋友可以參考下2018-11-11Java如何獲取JSONObject內(nèi)指定字段key的value值
這篇文章主要介紹了Java如何獲取JSONObject內(nèi)指定字段key的value值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12詳解SpringBoot實現(xiàn)JPA的save方法不更新null屬性
直接調(diào)用原生Save方法會導致null屬性覆蓋到數(shù)據(jù)庫,使用起來十分不方便。本文詳細的介紹了如何解決這個問題,非常具有實用價值,需要的朋友可以參考下2018-12-12使用hibernate和struts2實現(xiàn)分頁功能的示例
本篇文章主要介紹了使用hibernate和struts2實現(xiàn)分頁功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01