国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java學習第一個圖形界面

2019-11-18 11:50:08
字體:
來源:轉載
供稿:網友

  學了幾天java,就迫不及待地想進入圖形界面,因為圖形界面可以給人一個直觀的視覺效應,假如自己在記事本中寫的一行行枯燥的代碼可以變成漂亮的圖形,那該是一種什么感受啊!下面我將會分步驟講解一個畫圖程序,供大家參考。
  首先構思一個畫圖程序的界面
  
 Java學習第一個圖形界面(圖一)


  假設這個程序的界面如上所示,文件菜單中有清屏、打印和退出功能,這個程序的主要功能就是可以完成畫圖的功能,如圖所示,可以畫紅色、綠色、藍色、黑色的圖形,可選的圖形先假設有矩形和橢圓形,Filled的功能為是否填充封閉圖象。
  在開始創建圖形界面前,先介紹一下創建圖形的基本知識。
  Frame,也叫框架,它是由一個包括最大化、最小化、關閉和Frame名稱所組成的一個框架運行界面。Panel,也叫面板,將Panel添加在Frame上可以使得許多事情變得輕易解決,這一點我們將在后面看到,如下,是一個將100×100的Panel添加到200×200的Frame上的界面,注重,為什么Panel顯示的是一個矩形框?這是由于原點選取的是包括標題行最左上角的(0,0)。
  
 Java學習第一個圖形界面(圖二)

  Frame的默認布局治理器為邊界布局治理器,Panel的默認布局治理器為流式布局治理器,所謂的布局治理器分為好多種,最常見的有流式布局治理器(FlowLayout)、邊界布局治理器(BorderLayout)和表格布局治理器(GridLayout)。
  1.流式布局治理器是將組件流水似的擺放在Frame或其它構件上,從左到右,依次排放,碰到邊界就重新另起行,順序排放,整體置放在中心的位置。如下所示(這是將Button添加到Frame上,由于Frame的默認布局治理器不是FlowLayout,所以要進行相應的修改,修改方法將在后面介紹):
  
 Java學習第一個圖形界面(圖三)

  將Frame拉大的時候上圖5個Button將順序擺放在Frame中部,排成一行,而將Frame縮小的時候,將顯示成下圖的狀態:
  
 Java學習第一個圖形界面(圖四)

  五個Button始終還是順序排放的,只不過在一行中擺放不下的時候將換行排放。
  2.邊界布局治理器則將板塊分為東西南北中五個方向,每添加一個組件就要指定組件擺放的方位,放置在東西南北四個方向的組件將貼邊放置,如下所示:
  
 Java學習第一個圖形界面(圖五)

  當拉大Frame的時候,處在center(中間)的組件就不斷積壓東西南北四個方向的組件,如下圖所示,Button4和Button3只是拉長而寬度不變,而Button1和Button2只是拉寬,而長度不變,Button5則是長寬都變化:
  
 Java學習第一個圖形界面(圖六)

  3.表格布局治理器就是分幾行幾列將部件擺放到Frame上去,幾個部件也是貼邊放置的,如下圖所示,將6個Button按2行3列排放:
  
 Java學習第一個圖形界面(圖七)

  將Frame拉大了的結果如下
  
Java學習第一個圖形界面(圖八)

  上面提到了關于修改布局治理器的問題,Frame的默認布局治理器是邊界布局治理器,假如要將它轉化成FlowLayout或者GridLayout甚至null的布局治理方式應該如何處理呢?java給我們提供了修改的方法,假設創建的Frame對象為f,那么將其修改成FlowLayout的方法就是f.setLayout(new FlowLayout()),而假如修改成null,則只需要寫成f.setLayout(null)即可。
  有了以上的知識,我們就可以開始進行我們的圖形創作了,
  首先要添加一個MenuBar,也就是菜單項,雖然Frame是默認BorderLayout的,但是也沒有必要將MenuBar放置在最上面,因為MenuBar默認就是一定要放在最上方的,即使是再添加一個置于NORTH的部件,也是位于MenuBar下方的。
  中間我們留出的主要部分是畫圖用的,需要較大的空間,所以放置在CENTER部位。
  下方的部件比較多,也比較復雜。選擇圖形類型的部件叫做Choice,單選框和復選框都叫做Checkbox,不同的地方是,對于單選框而言,要添加一個叫CheckboxGroup的部件將單選框圈在其范圍內,這樣我們就可以完成單選的功能了。于是,需要放在最下方的部件有3個之多,那么,假如都使用BorderLayout.SOUTH的話,幾個部件將疊加在一起,我們就只能夠看見最上方的部件,這樣的結果顯然不是我們希望的。那么怎么處理這個問題呢?我們知道Panel的默認布局治理器是FlowLayout的,那么假如我們將一個Panel加在Frame的最南端,然后依次加入Choice和Checkbox單選框和復選框,那么問題就可以解決。
  現在,讓我們來著手做我們自己的圖形界面吧!
  首先要引入java.awt.*,這個包是基本的圖形包,如Frame,Panel都在這個包中。引用方法為:import java.awt.*;
  接下來你可以創建一個叫做Drawing的類,讓它繼續原包中有的Frame類,在Drawing類中,可以添加自己想要的功能以完善這個Frame,繼續用extends來操縱,如下:
  public class Drawing extends Frame
  {
   Drawing(String ss)
    {
       setTitle(ss); //設置標題
       setVisible( true );
    }
   
    public static void main(String args[])
       {
           Drawing d = new Drawing("Paint        }
  }
  在main函數中創建了一個Drawing的對象,命名為d,并傳遞這個Frame的標題名,類Drawing中的Drawing(String ss)表示對Drawing重新構造了一遍,Drawing(String ss)稱為過載,ss接受main函數傳遞過來的字符串。假如不使用過載方式也可以完成,程序如下修改即可:
  public class Drawing extends Frame
  {
    Drawing()
    {
       setTitle("Paint Program");
       setVisible( true );
    }
   
    public static void main(String args[])
       {
           Drawing d = new Drawing();
       }
  }
  
  由于Drawing繼續了Frame,所以Drawing本身也是一個Frame,所以它可以設置標題(setTitle(ss)),可以添加組件。現在程序就已經可以運行了,但只會是一塊白板,什么都沒有,大家有愛好的話可以試一下。記住,setVisible(true)這句話不可省略,假如省略,就什么都看不見了。
  假如按照上面嘗試運行了一下,你就會發現這個程序還是有很多弊病的,例如圖象沒有馬上顯現出來,要將Frame拉開(或者點最大化)才可以看得見那塊白板,更要命的就是程序無法關閉,因為對關閉程序內容我們并沒有做任何處理,你需要到任務治理器中找到一個叫javaw.exe或java.exe的線程,將它關閉才可以,這給我們帶來了很多的麻煩,那么怎么解決這些問題呢?首先,我們可以設置Frame的大小,并且還可以將它設置為不可修改大小的,添加如下兩條語句即可:
  setSize (400,400); //設置大小
  setResizable( false ); //將大小改為不可更改的
  那么如何完成關閉程序的功能呢?我們需要調用一個系統的監聽,如下添加:
  addWindowListener( new WindowAdapter(){
   public void windowClosing( WindowEvent e ){
       System.exit( 0 );
       }
    });//增加關閉程序功能
  這樣調用的一個Frame的addWindowListener方法進行關閉處理,就可以滿足我們的需求了,這個方法是系統提供的,完成的就是關閉程序的功能。
  下面,我將講解將如何描述MenuDown、MenuUp和Draw類。因為這三個類都是放置在剛才我們創建的Drawing上的,為了方便調用,我們可以將這三個類放置在Drawing類中,這叫做內部類。下面,我們先創建一個菜單類—MenuUp:
    class MenuUp extends MenuBar
    {
       public MenuUp(){
           Menu m1 = new Menu( "File" );
           Menu m2 = new Menu( "Help" ); //創建兩個菜單目錄項
           MenuItem mi1 = new MenuItem( "Clear" );
           MenuItem mi2 = new MenuItem( "Print" );
           MenuItem mi3 = new MenuItem( "Quit" ); //創建3個菜單項
           m1.add( mi1 );
           m1.add( mi2 );
           m1.addSeparator();
           m1.add( mi3 ); //將3個菜單項添加到名為File的菜單下,并加分隔符
           add( m1 );
           add( m2 );
           setHelpMenu( m2 ); //將菜單目錄項添加到MenuBar中
       }
    }
  
  首先,類MenuUp繼續了MenuBar類的性質,所謂的MenuBar就是類庫中已經創建好的可供繼續和使用的類,它的默認放置是在面板中的最上端,可以為它添加菜單項,這個可以由用戶自行編寫,如上,我們創建了兩個菜單目錄項,即File和Help,注重,由于Help是一個非凡的菜單,一般放置在菜單欄的最末位,所以添加的時候也需要注重,要添加一條setHelpMenu()的語句。程序中的“對象.add()”表示在對象中添置一些其它的對象,“對象.addSeparator()”是指添加分隔符的意思。
  
  創建好這個類后,在Drawing(String ss)中要添加一條setMenuBar( new

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗山县| 西城区| 都匀市| 庆安县| 东丰县| 九龙坡区| 山丹县| 大渡口区| 江达县| 新泰市| 玛曲县| 淮南市| 龙陵县| 图们市| 象州县| 奈曼旗| 徐汇区| 曲沃县| 星子县| 招远市| 邵东县| 嘉禾县| 唐河县| 高唐县| 灌南县| 尼玛县| 金溪县| 阳高县| 丹棱县| 耒阳市| 新民市| 日喀则市| 金坛市| 通海县| 安庆市| 泰安市| 灯塔市| 青阳县| 五常市| 德钦县| 海南省|