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