真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java源代碼界面設計,java程序界面設計

簡述java程序設計中界面設計中的三種布局方式

1 邊框布局

創(chuàng)新互聯(lián)公司專注于烏海海南企業(yè)網(wǎng)站建設,響應式網(wǎng)站,商城建設。烏海海南網(wǎng)站建設公司,為烏海海南等地區(qū)提供建站服務。全流程按需求定制設計,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new FlowLayout());

憑著我們現(xiàn)在所積累的閱讀程序的功夫,應該能夠很快地知道我們通過第一條語句創(chuàng)建了一個容器JPanel類的panel1。

而接下來,我們則調用了panel1.setLayout(new FlowLayout()),在上一章中,我們一直沒有對它進行相應的分析?,F(xiàn)在該是揭開它的面紗的時候了。

單詞layout的中文意思是“布局”、“布置”,setLayout就是設置布局格式。也就是說,容器panel1的方法setLayout是用來設置布局格式的。那么,我們一直用的是什么模式呢?對,就是后面括號里的FlowLayout()。顧名思義,也就是流布局方式。這是一種順其自然的方式:從左到右,一個個對象地擺放,擺不下,就擺到下一行。所以,我們就無法去控制它。

從本章開始,我們就要學習一種控制布局的方法。在Java語言中,提供了各種布局管理器,以便大家能夠達到這一目的。

通常我們最常使用的布局管理器是:Border Layout(邊框布局管理器),如下圖所示,邊框布局管理器將一個屏幕分成了五個部分:東、南、西、北、中。

如果要使用這種邊框布局管理進行布局控制,我們必須先將“容器”設置為“邊框布局控制模式”,具體來說,就是當調用setLayout方法為容器設置布局控制模式時,參數(shù)設置為BorderLayout。例如:

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new BorderLayout());

然后,我們就可以在使用容器的add方法添加部件時,附加上位置參數(shù),使得該部件顯示在指定的位置上。位置參數(shù)分別是:

BorderLayout.NORTH 位置為北

BorderLayout.SOUTH 位置為南

BorderLayout.EAST 位置為東

BorderLayout.WEST 位置為西

BorderLayout.NORTH 位置為中心

實例說明

下面,我們就來試一試,使用按鈕排出五個方向!請創(chuàng)建一個testBorder.java,輸入以下源程序:

源程序:useTextArea.java

import java.awt.*;

import javax.swing.*;

import java.applet.Applet;

public class testBorder extends JApplet

{

public void init()

{

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new BorderLayout());

JButton north=new JButton("North");

JButton south=new JButton("South");

JButton east=new JButton("East");

JButton west=new JButton("West");

JButton center=new JButton("Center");

panel1.add(north,BorderLayout.NORTH);

panel1.add(south,BorderLayout.SOUTH);

panel1.add(east,BorderLayout.EAST);

panel1.add(west,BorderLayout.WEST);

panel1.add(center,BorderLayout.CENTER);

}

}

然后,我們使用javac編譯這個程序,然后編輯一個顯示這個Java Applet的HTML頁面。最后調用appletviewer來觀察這個頁面

為了試一下,如果并沒有在每個位置都安排一個部件,那么會怎么樣呢?我們修改一下程序,將panel1.add(west,BorderLayout.WEST);這一行注釋掉(就是在前面加上“//”號),也就是不顯示西邊的按鈕,看一下結果如何。正如上圖(圖10-3)所示,西邊由于沒有部件,因此“中”就朝西靠,“占領”了它的位置。

而如果我們修改一下程序,讓中間的按鈕不顯示的話,就會出現(xiàn)如圖10-5的樣子,中間的區(qū)域并未并占領,而是空在那里了!這是與其它位置不同的地方,大家一定要記住。

一些提示:

其實這很好理解,如果中間的那一塊的位置被其它位置上的部件占領的話,就會使得分不清“東”、“南”、“西”、“北”了。倒成了“左上角”、“左下角”、“右上角”、“右下角”了。

2 網(wǎng)格布局

實例說明

下面,我們來看一個新的程序!首先創(chuàng)建一個testGrid.java文件,并輸入以下源程序:

源程序:testGrid.java

import java.awt.*;

import javax.swing.*;

import java.applet.Applet;

public class testGrid extends JApplet

{

String buttonLabels[]={"No.1","No.2","No.3","No.4","No.5",

"No.6","No.7","No.8","No.9"};

public void init()

{

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new GridLayout(3,3));

for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));

}

}

然后,我們使用javac編譯這個程序,然后編輯一個顯示這個Java Applet的HTML頁面。最后調用appletviewer來觀察這個頁面

我們主要是關心如何擺放各個部件,而不是如何構建一個程序。所以,正如本例中的按鈕一下,這一章中的所有部件都是一個樣子,沒有任何作用。這樣也使得程序盡可能地變短了,更易于大家閱讀和理解程序。

下面,我們就一起來看一下上面的這個程序。

1) String buttonLabels[]={"No.1","No.2","No.3","No.4","No.5",

"No.6","No.7","No.8","No.9"}

我想大家都能很輕松地讀懂這條語句,我們在此定義了一個字符串數(shù)組buttonLabels,它有9個字符串成員,也就是我們后面定義的9個按鈕的標簽文本。

值得注意的是,大家一定要知道,buttonLabels[1]表示哪個字符串!如果您的答案是“No.1”的話,就錯了!正確的答案是“No.2”,這是因為在數(shù)組中索引值是從0開始的,也就是說如果要使用“No.1”的話,應該使用buttonLabels[0]。這對更好地理解后面的程序十分重要,也是基本功之一。

2) JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new GridLayout(3,3));

在這兩行程序中,我們首先定義了一個容器部件panel1。然后調用setLayout方法設置布局管理器。這里我們使用了一個新的布局管理器:GridLayout,網(wǎng)格布局管理器。

我們注意到GridLayout的后面帶了兩個參數(shù):3,3。這有什么用呢?我們一起來看一下GridLayout方法的定義:

public GridLayout (int rows,int cols)

我們看一下這兩個參數(shù),首先它們都是int型—整型的。那么它們分別起到什么作用呢?我們還是采用顧名思義法吧!row的中文意思是行,col的中文意思是列,后面加上一個s,是這兩個單詞的復數(shù)形式。

好,我們現(xiàn)在串起來想一下,我們定義了一個網(wǎng)格布局,然后定了它的行、列數(shù)!這不就畫出了這個網(wǎng)格了嗎?如果我們在語句是使用GridLayout(5,5)的話,就會把整個容器分成25個單元

而我們在程序中使用的是GridLayout(3,3),所以它就將整個容器分成了

注意:

這種劃分是一種邏輯上的,暗藏式的劃分,而不會把格子給劃出來。另外,我們這里舉的兩個例子行、列都相等,其實完全可以不等。

3) for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));

這是一個循環(huán)結構的程序。我們先看循環(huán)語句,循環(huán)的初值是“x=0”,繼續(xù)執(zhí)行循環(huán)的條件語句是“xbuttonLabels.length就是用來請得字符串數(shù)組buttonLabels的長度!也就是這個字符串數(shù)組中有多少個字符串?我們知道,我們在該數(shù)組中定義了9個。

從程序中,我們可以獲知,當x=buttonLabels.length時,循環(huán)就將結束,應為它不滿足條件x別忘了,我們使用buttonLabels[0]表示第一個字符串,buttonLabels[1]表示第二個字符串……,那么最后一個字符串就應該是buttonLabels[buttonLabels.length-1]嘛。

在循環(huán)中,我們使用容器提供的add方法,將新定義的按鈕部件添加進去。

有時,我們可能想獲得象下圖所示的布局效果!讓各個部件之間存在一些間隙。使用Java的網(wǎng)格布局可以實現(xiàn)嗎?

我很高興地回答你:“可以!”,我們可以使用GridLayout的另一種構造器方法(簽名不同)來實現(xiàn):

public GridLayout (int rows,int cols,int hgap,int vgap)

在這個方法中,可以帶上四個整型參數(shù),前兩個我們已經(jīng)很熟悉了,行數(shù)與列數(shù)。后面則是兩個新的參數(shù)。

第一個是hgap,其中gap的意思是間隙、空隙的意思,而h則是horizontal(水平)的第一個字母。也就是說,我們可以通過hgap參數(shù)設置橫向的間隙。

第二個是vgap,v則是vertical(垂直)的第一個字母。也就是說,我們可以通過vgap參數(shù)設置縱向的間隙。

自測練習

1)_________________是網(wǎng)格布局管理器。

a.BorderLayout b.GridLayout c.ReseauLayout

d.FlowLayout

利用以下代碼回答問題2、3、4、5:

2)這個布局中有__________行?

a.7行 b.5行 c.6行 d.8行

3)這個布局中有__________列?

a.7行 b.5行 c.6行 d.8行

4)這個布局將容器分為_________個部分?

a.48個 b.35個 c.30個 d.40個

5)第5個部件位于__________位置。

a.左上角 b.左下角 c.右上角 d.右下角 e.中間

6)根據(jù)以下界面,編寫一個程序

圖10-12 練習題圖

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

7) 如果我們構建一個5*5的網(wǎng)格布局,但只在該容器中加入17個按鈕,將會出現(xiàn)什么情況?請編寫一個程序,來試一試效果。

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

練習答案

1)b 沒什么好解釋的,請大家記?。?/p>

2)a 第一個參數(shù)是行數(shù),因此是7行。

3)b 第二個參數(shù)是列數(shù),因此為5列。

4)b 7行5列,其7*5,35個部分嘛。

5)c 第5個部件是第一行的最后一個,當然在右上角嘛。

6)下面是一個實現(xiàn)的程序實例:

源程序:lianxi10_2.java

import java.awt.*;

import javax.swing.*;

import java.applet.Applet;

public class lianxi10_2 extends JApplet

{

String buttonLabels[]={"1","2","3","4","5","6","7",

"8","9","*","0","#"};

public void init()

{

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new GridLayout(4,3,10,10));

for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));

}

}

7)下面是一個實現(xiàn)的程序實例:

源程序:lianxi10_3.java

import java.awt.*;

import javax.swing.*;

import java.applet.Applet;

public class lianxi10_3 extends JApplet

{

String buttonLabels[]={"No.1","No.2","No.3","No.4","No.5",

"No.6","No.7","No.8","No.9","No.10","No.11","No.12",

"No.13","No.14","No.15","No.16","No.17"};

public void init()

{

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new GridLayout(5,5));

for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));

}

}

這個程序使用javac編譯完后,編寫一個包含這個類的HTML頁面,再用appletviewer來觀察發(fā)現(xiàn)運行結果如下圖所示:

圖10-13 練習答案圖

這個輸出是不是令你感到十分意外,整個程序根本不按要求分成5列,所以我們從這里得到一個使用網(wǎng)格布局中要十二分注意的一點:“請別忘了將網(wǎng)格填滿”。否則程序的輸出將不可預料。

一些提示:

如果你真的沒有那么多東西來“占領”網(wǎng)格的話,我建議你使用一個空標簽來填補這個空白的網(wǎng)格,使得程序的輸出如你所愿。使用空標簽的方法很容易:

panel1.add(new Label(“”));

從這里,我們也看出了,我們學習過的流布局管理器、邊框布局管理器,以及我們剛學習過的網(wǎng)格布局管理器都比較死板,不夠高級。

10.3 組合布局

傳授新知

正如我們在上一小節(jié)結束的時候說的一樣,各種布局管理器都有自己的缺點,沒有一種能夠真正地完全滿足我們編寫GUI程序時的要求。

而在Java語言中,允許在容器中加入其他容器,這樣每個容器可以根據(jù)自己的需要采用不同的布局管理器,組合成為一個我們所需要的GUI程序界面。這種方法,我們就稱之為組合布局。

注意:

與流布局、邊框布局、網(wǎng)格布局不同,組合布局并不是一個新的布局管理器,它是通過結合各種布局管理器的優(yōu)點,將它們組合地應用在GUI程序界面的開發(fā)中。這是一種布局管理的方法。也可以說是一種GUI程序界面的開發(fā)技巧。

當我們設計GUI程序界面時,最好先在紙上把它畫出來,然后“分塊解決”。也就是將能夠組合在一起的部件找出來,將它們放在一個容器里,并為它們選擇合適的布局管理器。然后把這些容器擺放在一起,就解決了。

設計時還要考慮到窗體大小發(fā)生改變的時候,引起的部件形體變化。這方面,請你熟記幾個設計技巧:

1) 對于那些要求扁平狀的部件,我們應該將它放置在邊框布局中的南面或北面;

2) 對于那些要求細高狀的部件,我們應該將它放置在邊框布局中的東面或西面;

3) 對于那些可以隨著窗體改變大小部分,我們可以將它放置在邊框布局的中間;

4) 如果我們要求部件保持大小相同,那么,我們就應該采用網(wǎng)格布局。

下面,我們就通過幾個實際的例子,來讓大家領會和掌握這種設計的思路與方法。

實例說明

我們首先創(chuàng)建一個testCombination.java文件,然后輸入以下源程序:

源程序:testCombination.java

import java.awt.*;

import javax.swing.*;

import java.applet.Applet;

public class testCombination1 extends JApplet

{

public void init()

{

Frame frame1=new Frame("testCombination1");

frame1.setLayout(new BorderLayout());

TextArea text1=new TextArea();

frame1.add(text1,BorderLayout.CENTER);

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new GridLayout(1,3,10,5));

panel1.add(new JButton("A"));

panel1.add(new JButton("B"));

panel1.add(new JButton("C"));

frame1.add(panel1,BorderLayout.SOUTH);

frame1.pack();

frame1.show();

}

}

然后,我們使用javac編譯這個程序,然后編輯一個顯示這個Java Applet的HTML頁面。最后調用appletviewer來觀察這個頁面,如下圖所示:

圖10-14 程序testCombination.java的輸出

正如上圖所示,程序的輸出與以前不同,各個部件不是顯示在Appletviewer程序框中,而是顯示在另一個窗口中。

這是怎么回事呢?下面我們就一起來看一下這個程序!

傳授新知

在以前的程序中,我們一直都是使用容器JPanel,面板。而我們在這個程序中引進了一個新的容器Frame。使用了這個容器后,就會新創(chuàng)建一個窗口。這也就是為什么程序的輸出有這么大的變化的原因。

1)Frame frame1=new Frame("testCombination");

這條語句,定義了一個Frame容器frame1,然后使用new操作符調用構造器方法,后面帶的參數(shù)“testCombination”則是這個Frame的標題。

一些提示:

其實大家能Frame所體現(xiàn)出來的效果是很熟悉的,它等價于Windows中的窗體。而Frame的標題就是窗體的標題。

2) frame1.setLayout(new BorderLayout());

與JPanel容器一樣,我們可以調用setLayout方法來設置Frame的布局管理器。在這里,我們將Frame容器frame1的布局管理器設置成為邊框布局管理器(也就是我們在10.1小節(jié)中學習過的布局管理器)。

3) frame1.add(text1,BorderLayout.CENTER);

緊接著,我們調用frame1的add方法,將文本區(qū)部件text1添加到frame1容器中來。注意我們設置了它的位置:BorderLayout.CENTER。

這是因為,我們希望這個文本區(qū)能夠隨著窗體的大小變化而變化。所以適合將其放在在中間位置。

4) panel1.setLayout(new GridLayout(1,3,10,5));

我們又定義了一個JPanel容器panel1,并將其的布局管理器設置為網(wǎng)格布局管理器。并通過指定參數(shù),使得整個panel1被分成1行3列,水平空隙為10的網(wǎng)格。

5) frame1.add(panel1,BorderLayout.SOUTH);

這是組合布局方法最重要的一步,我們將panel1這個容器,加入到了frame1這個容器中去了。并且指定了panel1這個容器在整個frame1中所占的位置:BorderLayout.SOUTH,也就是下邊。這樣,panel1中包含的三個按鈕就會永遠(不管窗體大小如何改變)呆在文本區(qū)的下邊,而且三個按鈕的大小會根據(jù)窗體大小的改變而改變。

一些提示:

這是因為,panel1中的按鈕是用網(wǎng)格布局的。

6) frame1.pack();

frame1.show();

與JPanel不一樣,使用Frame容器,不能夠直接顯示了出來。我們必須調用Frame容器的show方法才能使得Frame顯示出來。

而在使用show方法之前,我們還需要使用pack方法將Frame中的內容做一個整合。請記住這里的使用方法。

4 GridBag布局

實例說明

到現(xiàn)在為止,我們已經(jīng)學習了邊框布局、網(wǎng)格布局以及組合布局,現(xiàn)在大家試一試編寫一個程序,

怎么樣,挺有難度的吧!完成這個GUI得花很多心思去設計組合,十分討厭,下面我們就使用一個新的布局管理器GridBagLayout來解決這種難題。

首先,輸入以下源程序:

源程序:testGridBag.java

import java.awt.*;

import javax.swing.*;

import java.applet.Applet;

public class testGridBag extends JApplet

{

public void init()

{

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new GridBagLayout());

GridBagConstraints gbdc=new GridBagConstraints();

gbdc.fill=GridBagConstraints.BOTH;

gbdc.weightx=1;

gbdc.weighty=1;

panel1.add(new JButton("No.1"),gbdc);

panel1.add(new JButton("No.2"),gbdc);

panel1.add(new JButton("No.3"),gbdc);

gbdc.gridwidth=2;

gbdc.gridx=0;

panel1.add(new JButton("No.4"),gbdc);

gbdc.gridx=2;

gbdc.gridwidth=1;

gbdc.gridheight=2;

panel1.add(new JButton("No.5"),gbdc);

gbdc.gridx=0;

gbdc.gridheight=1;

panel1.add(new JButton("No.6"),gbdc);

gbdc.gridx=1;

panel1.add(new JButton("No.7"),gbdc);

gbdc.gridx=0;

gbdc.gridwidth=2;

panel1.add(new JButton("No.8"),gbdc);

gbdc.gridx=2;

gbdc.gridwidth=1;

panel1.add(new JButton("No.9"),gbdc);

}

}

在這個程序中,我們使用了GridBagLayout輕松地完成了這個界面的設計,允分凸現(xiàn)出它的強大??梢赃@么說,GridBagLayout是Java語言中最強大的布局管理器。

GridBagLayout,從名字上看,就知道它與GridLayout有一定的淵源,是的,GridBagLayout的確與其十分類似,也是使用網(wǎng)格來進行布局管理的。但與GridLayout(網(wǎng)格布局)不同的是,GridBagLayout不像網(wǎng)格布局一相,需要所有的部件的大小、形狀相同。而且還可以將某一個部件放在一個固定的位置上。

下面,我們一起來分析一下testGridBag.java程序。

1) panel1.setLayout(new GridBagLayout());

在調用setLayout方法時,指定為GridBagLaoyout,使panel1使用GridBag布局管理。

2) GridBagConstraints gbdc=new GridBagConstraints();

GridBagLayout布局管理器是通過一個GridBagConstraints類來實現(xiàn)神奇的效果的。所以,我們要在使用時先定義一個GridBagConstraints類的對象。在這個程序中,我們定義了一個GridBagConstraints類的對象gbdc。

3) gbdc.fill=GridBagConstraints.BOTH;

由于網(wǎng)格單元可能比該單元中的部件大,如果是這樣,部件放置在單元格內會有一些多余空間。在默認情況下,部件不會擴張,也就是不會填充這個多余空間。

GridBagConstraints提供了一個fill屬性,我們可以通過設置它的值來起到不同的效果。

¨ GridBagConstraints.NONE:不擴張,是默認值;

¨ GridBagConstraints.HORIZONTAL:部件水平擴張,將水平方向的多余空間填滿;

¨ GridBagConstraints.VERTICAL:部件垂直擴張,將垂直方向的多余空間填滿;

¨ GridBagConstraints.BOTH:部件同時向兩個方向擴張,將單元格填滿。

4) gbdc.weightx=1;

gbdc.weighty=1;

weightx和weighty是GridBagConstraints提供的另一對屬性。它的取值是整型數(shù),默認值為0。用來設置行(weightx)、列(weighty)的“重量”,如果值為0的話,所有的部件都會緊收在一起,聚集在中央,如圖10-17所示。

而如果取值為其它數(shù)字,則會根據(jù)值來分配空間。

5) panel1.add(new JButton("No.1"),gbdc);

panel1.add(new JButton("No.2"),gbdc);

panel1.add(new JButton("No.3"),gbdc);

在沒有任何約束的時候,向gbdc中添加按鈕,這時效果與采用網(wǎng)格布局的效果完全一樣。一個接著一個地“占領”單元格。

6) gbdc.gridwidth=2;

gbdc.gridx=0;

panel1.add(new JButton("No.4"),gbdc);

由于第四個按鈕(No.4)是寬度是2,在GridBagLayout中,是由gridwidth屬性來控制添加進入的部件的寬度的。

我們通過gbdc.gridwidth=2將其設置為2,這樣,再添加進入的部件就會變成為2個單元格的寬度。

另外,我們再使用gbdc.gridx=0讓其另起一行,從最左邊的單元格開始填充。

因此,我們發(fā)現(xiàn)第四個按鈕被加在了第二行,寬度為2個單元格。

7) gbdc.gridx=2;

gbdc.gridwidth=1;

gbdc.gridheight=2;

panel1.add(new JButton("No.5"),gbdc);

接下來,我們要擺放第五個按鈕,這個按鈕將從第3個單元開始填充,其寬度為一個單元格,而高度則為兩個單元格。

因此,我們首先使用用gbdc.gridx=2,使得下一個添加的部件(第五個按鈕)放入第3個單元格(0代表第1個單元格,因此第3個單元格應該是2)。

由于,前面我們已經(jīng)將gridwidth設置為2了,因此,我們需要使用gbdc.gridwidth=1,將其值設置回1。

最后使用gdbc.gridheight=2,使得添入的部件的單元格縱向跨越兩個單元格。

8) gbdc.gridx=0;

gbdc.gridheight=1;

panel1.add(new JButton("No.6"),gbdc);

我想這一段程序,大家應該都不會再有什么理解上的問題了吧!主要提醒大家注意的是,我們使用gbdc.gridheight=1將單元格縱向跨度改成了默認值1。這是因為我們在前面需要時將其改成了2,所以在此需要將其改回來。

實例說明

為了更好地理解這個強大的GridBagLayout布局管理器,我們再來做一個有趣的實驗。首先,我們創(chuàng)建一個testGridBag2.java

源程序:testGridBag2.java

import java.awt.*;

import javax.swing.*;

import java.applet.Applet;

public class testGridBag2 extends JApplet

{

public void init()

{

JPanel panel1=(JPanel)getContentPane();

panel1.setLayout(new GridBagLayout());

GridBagConstraints gbdc=new GridBagConstraints();

panel1.add(new JButton("No.1"),gbdc);

panel1.add(new JButton("No.2"),gbdc);

setSize(300,200);

}

}

然后我們使用鼠標改變一下窗口的大小,看一下,這兩個按鈕有什么變化?你會驚奇地發(fā)現(xiàn),窗口改變了大小,兩個按鈕的大小卻沒有變,而且一直呆在正中央的位置。

一些說明:

在這個程序中,我們使用了一個以前沒有用過的語句:setsize(300.200),它的功能是在程序中設置窗口的大小。

現(xiàn)在我們對這個程序做一些修改!將添加兩個按鈕的兩條語句:

panel1.add(new JButton("No.1"),gbdc);

panel1.add(new JButton("No.2"),gbdc);

將它們擴展為:

gbdc.weightx=1;

panel1.add(new JButton("No.1"),gbdc);

gbdc.weightx=3;

panel1.add(new JButton("No.2"),gbdc);

為什么會得到這個效果呢?我們在程序中添加按鈕的程序段前加入一句:

gbdc.fill=GridBagConstraints.HORIZONTAL;

再重新編譯一下程序,再看看程序的輸出有什么變化!

在得到結果之前,自己可以想象一下結果,然后看一下程序的實際輸出與你的想法是否相吻合。

我們驚奇地發(fā)現(xiàn),第二個按鈕,突然變得十分寬起來(如圖10-20所示)。這是因為放置第二個按鈕的單元格的寬度是3,而第一個按鈕的寬度是1。而且,我們又讓第二個按鈕橫向擴展,因此得到了這樣的輸出結果。

相信實驗做到這里,不須我說,大家也會有一些心得體會了。但是GridBagLayout遠不止這一點,大家應該多做試驗,才能夠在真實的使用環(huán)境中有效地掌握GridBagLayout。

JAVA中GUI登錄界面設計源代碼是什么?

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

public class Login {

private JFrame frame = new JFrame("登錄");

private Container c = frame.getContentPane();

private JTextField username = new JTextField();

private JPasswordField password = new JPasswordField();

private JButton ok = new JButton("確定");

private JButton cancel = new JButton("取消");

public Login(){

frame.setSize(300,200);

c.setLayout(new BorderLayout());

initFrame();

frame.setVisible(true);

}

private void initFrame() {

//頂部

JPanel titlePanel = new JPanel();

titlePanel.setLayout(new FlowLayout());

titlePanel.add(new JLabel("系統(tǒng)管理員登錄"));

c.add(titlePanel,"North");

//中部表單

JPanel fieldPanel = new JPanel();

fieldPanel.setLayout(null);

JLabel l1 = new JLabel("用戶名:");

l1.setBounds(50, 20, 50, 20);

JLabel l2 = new JLabel("密 碼:");

l2.setBounds(50, 60, 50, 20);

fieldPanel.add(l1);

fieldPanel.add(l2);

username.setBounds(110,20,120,20);

password.setBounds(110,60,120,20);

fieldPanel.add(username);

fieldPanel.add(password);

c.add(fieldPanel,"Center");

//底部按鈕

JPanel buttonPanel = new JPanel();

buttonPanel.setLayout(new FlowLayout());

buttonPanel.add(ok);

buttonPanel.add(cancel);

c.add(buttonPanel,"South");

}

public static void main(String[] args){

new Login();

}

}

用java寫一個登陸界面代碼。

概述

具體框架使用jframe,文本框組件:JTextField;密碼框組件:JPasswordField;標簽組件:JLabel;復選框組件:JCheckBox;單選框組件:JRadioButton;按鈕組件JButton。

登錄界面:

代碼實例

import javax.swing.*;

import java.awt.*; ? //導入必要的包

public class denglu extends JFrame{

JTextField jTextField ;//定義文本框組件

JPasswordField jPasswordField;//定義密碼框組件

JLabel jLabel1,jLabel2;

JPanel jp1,jp2,jp3;

JButton jb1,jb2; //創(chuàng)建按鈕

public denglu(){

jTextField = new JTextField(12);

jPasswordField = new JPasswordField(13);

jLabel1 = new JLabel("用戶名");

jLabel2 = new JLabel("密碼");

jb1 = new JButton("確認");

jb2 = new JButton("取消");

jp1 = new JPanel();

jp2 = new JPanel();

jp3 = new JPanel();

//設置布局

this.setLayout(new GridLayout(3,1));

jp1.add(jLabel1);

jp1.add(jTextField);//第一塊面板添加用戶名和文本框

jp2.add(jLabel2);

jp2.add(jPasswordField);//第二塊面板添加密碼和密碼輸入框

jp3.add(jb1);

jp3.add(jb2); //第三塊面板添加確認和取消

// ? ? ? ?jp3.setLayout(new FlowLayout()); ?//因為JPanel默認布局方式為FlowLayout,所以可以注銷這段代碼.

this.add(jp1);

this.add(jp2);

this.add(jp3); ?//將三塊面板添加到登陸框上面

//設置顯示

this.setSize(300, 200);

//this.pack();

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

this.setTitle("登陸");

}

public static void main(String[] args){

new denglu();

}

}

拓展內容

java swing包

Swing 是一個為Java設計的GUI工具包。

Swing是JAVA基礎類的一部分。

Swing包括了圖形用戶界面(GUI)器件如:文本框,按鈕,分隔窗格和表。

Swing提供許多比AWT更好的屏幕顯示元素。它們用純Java寫成,所以同Java本身一樣可以跨平臺運行,這一點不像AWT。它們是JFC的一部分。它們支持可更換的面板和主題(各種操作系統(tǒng)默認的特有主題),然而不是真的使用原生平臺提供的設備,而是僅僅在表面上模仿它們。這意味著你可以在任意平臺上使用JAVA支持的任意面板。輕量級組件的缺點則是執(zhí)行速度較慢,優(yōu)點就是可以在所有平臺上采用統(tǒng)一的行為。

概念解析:

JFrame?– java的GUI程序的基本思路是以JFrame為基礎,它是屏幕上window的對象,能夠最大化、最小化、關閉。

JPanel?– Java圖形用戶界面(GUI)工具包swing中的面板容器類,包含在javax.swing 包中,可以進行嵌套,功能是對窗體中具有相同邏輯功能的組件進行組合,是一種輕量級容器,可以加入到JFrame窗體中。。

JLabel?– JLabel 對象可以顯示文本、圖像或同時顯示二者??梢酝ㄟ^設置垂直和水平對齊方式,指定標簽顯示區(qū)中標簽內容在何處對齊。默認情況下,標簽在其顯示區(qū)內垂直居中對齊。默認情況下,只顯示文本的標簽是開始邊對齊;而只顯示圖像的標簽則水平居中對齊。

JTextField?–一個輕量級組件,它允許編輯單行文本。

JPasswordField?– 允許我們輸入了一行字像輸入框,但隱藏星號(*) 或點創(chuàng)建密碼(密碼)

JButton?– JButton 類的實例。用于創(chuàng)建按鈕類似實例中的 "Login"。

Java程序界面設計?

可以使用jswing包,這個包主要用于開發(fā)純JAVA得界面,網(wǎng)上也有安裝與使用教程,容易上手。

還有一種可以使用JAVA web作界面,不過需要改動的地方較多,不易上手。

Java 用戶界面設計 求界面代碼

一: 首先弄清題目的意思

A.需要的主要組件列表:

1. ?創(chuàng)建一個窗口,窗口標題叫Information

2. ?3個標簽, 用于顯示文字 Name Number Class

3. ?3個文本框, 用于填寫信息

4. ?1個按鈕, ?文字是確認

5. ?1個文本域

B.業(yè)務邏輯

1. 當點擊按鈕確認的時候, 把 文本框的信息顯示到文本域

C.設計的主要技術

JLabel , JButton, JTextField ...等, 都是swing的組件 , ?所以應該使用swing進行創(chuàng)建

二: ?確定使用的布局

swing雖然重寫了大部分的組件, 但是布局, 依舊沿襲awt技術

分析圖片上的布局:

至少有2種方法可以實現(xiàn),?

方法一: 絕對布局 , 優(yōu)點: ?配合可視化GUI拖曳, 可以完美的實現(xiàn)圖上的組件的位置

但是缺點也是致命的, 不同的操作系統(tǒng)平臺下, 可能會出現(xiàn)位置的移動,

只適合開發(fā)平臺, 移植效果差 . ?所以不推薦使用

方法二: 靈活的表格布局, 配合流式布局 , 所有操作系統(tǒng)下,顯示效果都比較統(tǒng)一.?

三: 效果圖

四: 參考代碼

import?java.awt.*;

import?java.awt.event.*;

import?javax.swing.*;

public?class?FrameDemo?extends?JFrame?{

//申明需要的組件

private?final?JTextField?jtf1,jtf2,jtf3;

private?final?JTextArea?jta;

public?FrameDemo()?{

setTitle("Information");//設置窗口標題

setSize(320,?360);//設置窗口大小

setLocationRelativeTo(null);//設置窗口居中

setDefaultCloseOperation(EXIT_ON_CLOSE);//設置關閉時退出虛擬機

getContentPane().setLayout(new?FlowLayout());//設置窗口布局為流式布局

JPanel?jp?=?new?JPanel(new?GridLayout(4,?2));//設置jp面板為表格布局4行2列

//第一行

JPanel?jp01?=?new?JPanel();

JLabel?jl1?=?new?JLabel("Name:");

jp01.add(jl1);

JPanel?jp1?=?new?JPanel();

jtf1?=?new?JTextField(8);

jp1.add(jtf1);

//第二行

JPanel?jp02?=?new?JPanel();

JLabel?jl2?=?new?JLabel("Number:");

jp02.add(jl2);

JPanel?jp2?=?new?JPanel();

jtf2?=?new?JTextField(8);

jp2.add(jtf2);

//第三行

JPanel?jp03?=?new?JPanel();

JLabel?jl3?=?new?JLabel("Class:");

jp03.add(jl3);

JPanel?jp3?=?new?JPanel();

jtf3?=?new?JTextField(8);

jp3.add(jtf3);

//第四行

JPanel?jp04?=?new?JPanel();

JLabel?jl4?=?new?JLabel("");

jp04.add(jl4);

JPanel?jp4?=?new?JPanel();

JButton?jb?=?new?JButton("確認");

jp4.add(jb);

jp.add(jp01);

jp.add(jp1);

jp.add(jp02);

jp.add(jp2);

jp.add(jp03);

jp.add(jp3);

jp.add(jp04);

jp.add(jp4);

getContentPane().add(jp);

jta?=?new?JTextArea();

jta.setColumns(20);//設置文本域的大小

jta.setEditable(false);//設置文本域不可編輯

jta.setBackground(jp.getBackground());//設置文本域的背景色和面板一樣

getContentPane().add(jta);

jb.addActionListener(new?ActionListener()?{//給按鈕添加事件

public?void?actionPerformed(ActionEvent?e)?{//點擊按鈕,顯示信息到文本域

String?name?=?jtf1.getText();

String?number?=?jtf2.getText();

String?clazz?=?jtf3.getText();

jta.setText("You?name?is?"+name+"?number?is?"+number+"?class?is?"+clazz);

}

});

}

public?static?void?main(String[]?args)?{

new?FrameDemo().setVisible(true);//創(chuàng)建窗口,被設置為可見

}

}

五: 拓展

雖然圖形界面的實現(xiàn)方法是多樣的, ?我們一定要根據(jù)具體情況, 選擇一個比較優(yōu)化的 合理的, 符合業(yè)務邏輯的實現(xiàn)方法

用Java語言設計一個界面,

首先:采用什么技術實現(xiàn)

java語言可以使用awt 和swing等技術實現(xiàn)圖形界面

推薦使用Swing,因為Swing比AWT更專業(yè),更漂亮,組件更豐富,功能更強大。

2. ??其次:分析采用什么布局

邊界布局BorderLayout,配合表格布局GridLayout,既簡單又美觀

3. ??最后:分析需求中需要用的組件

學生姓名 學號 ?顯示信息 需要用到文本框JTextField

單選按鈕 需要用到組件?JRadioButton

復選框 ? ?需要用到組件?JCheckBox

組合框 ? ?需要用到組件?JComboBox

圖片效果

參考代碼如下

//導入所需要的包

import?java.awt.event.*;

import?javax.swing.border.*;

import?javax.swing.*;

import?java.awt.*;

public?class?ClassFrame?extends?JFrame?{//?寫一個類繼承自JFrame?窗體

//?定義組件

private?static?final?long?serialVersionUID?=?1L;

private?JPanel?contentPane;

private?JTextField?tfName,?tfNum,?allInfo;

private?JRadioButton?rb1,?rb2;

private?JCheckBox?cb1,?cb2,?cb3;

private?JComboBoxString?t1,?t2,?t3;

public?static?void?main(String[]?args)?{

EventQueue.invokeLater(new?Runnable()?{

public?void?run()?{

try?{

ClassFrame?frame?=?new?ClassFrame();//?創(chuàng)建一個窗口實例

frame.setVisible(true);//?讓該窗口實例可見

}?catch?(Exception?e)?{

e.printStackTrace();

}

}

});

}

/**

?*?窗口屬性的設置,內部組件的初始化

?*/

public?ClassFrame()?{

setTitle("選課ing...");//標題

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//?設置關閉是退出JVM

setSize(450,?339);//?設置窗體大小

setLocationRelativeTo(null);//?窗體居中

contentPane?=?new?JPanel();//?內容面板

contentPane.setBorder(new?EmptyBorder(5,?5,?5,?5));

contentPane.setLayout(new?BorderLayout(0,?0));//?設置布局

setContentPane(contentPane);

JPanel?panel?=?new?JPanel(new?GridLayout(5,?1,?5,?10));//5行1列的表格布局

panel.setBorder(new?TitledBorder(null,?"",?TitledBorder.LEADING,?TitledBorder.TOP,?null,?null));

contentPane.add(panel,?BorderLayout.CENTER);//給panel添加邊框

JPanel?panel_1?=?new?JPanel();

panel.add(panel_1);

JLabel?label?=?new?JLabel("姓名");

panel_1.add(label);

tfName?=?new?JTextField();

panel_1.add(tfName);

tfName.setColumns(10);

JLabel?label_2?=?new?JLabel("學號");

panel_1.add(label_2);

tfNum?=?new?JTextField();

tfNum.setColumns(10);

panel_1.add(tfNum);

rb1?=?new?JRadioButton("男");

panel_1.add(rb1);

rb1.setSelected(true);//設置單選按鈕中,默認選擇的按鈕

rb2?=?new?JRadioButton("女");

panel_1.add(rb2);

ButtonGroup?bts?=?new?ButtonGroup();//單選按鈕需要加入同一個ButonGroup中才能生效

bts.add(rb1);

bts.add(rb2);

JPanel?panel_2?=?new?JPanel();

panel.add(panel_2);

cb1?=?new?JCheckBox("高等數(shù)學");

panel_2.add(cb1);

t1?=?new?JComboBoxString();

t1.setModel(new?DefaultComboBoxModelString(new?String[]?{?"林老師",?"趙老師",?"孫老師"?}));

panel_2.add(t1);

JPanel?panel_3?=?new?JPanel();

panel.add(panel_3);

cb2?=?new?JCheckBox("世界經(jīng)濟");

panel_3.add(cb2);

t2?=?new?JComboBoxString();

t2.setModel(new?DefaultComboBoxModelString(new?String[]?{?"張老師",?"劉老師"?}));

panel_3.add(t2);

JPanel?panel_4?=?new?JPanel();

panel.add(panel_4);

cb3?=?new?JCheckBox("音樂賞析");

panel_4.add(cb3);

t3?=?new?JComboBoxString();

t3.setModel(new?DefaultComboBoxModelString(new?String[]?{?"王老師",?"周老師"?}));

panel_4.add(t3);

JPanel?panel_5?=?new?JPanel();

panel.add(panel_5);

JButton?jbOk?=?new?JButton("確定");

panel_5.add(jbOk);

JButton?jbRest?=?new?JButton("重填");

panel_5.add(jbRest);

JPanel?panelSouth?=?new?JPanel();

contentPane.add(panelSouth,?BorderLayout.SOUTH);

JLabel?labe?=?new?JLabel("選課信息");

labe.setHorizontalAlignment(SwingConstants.LEFT);

panelSouth.add(labe);

allInfo?=?new?JTextField();

allInfo.setColumns(30);

panelSouth.add(allInfo);

JPanel?panelNorth?=?new?JPanel();

contentPane.add(panelNorth,?BorderLayout.NORTH);

JLabel?labelTitle?=?new?JLabel("學生選課界面");

labelTitle.setForeground(Color.DARK_GRAY);

labelTitle.setFont(new?Font("宋體",?Font.BOLD,?20));

panelNorth.add(labelTitle);

//給確定按鈕添加事件處理代碼

jbOk.addActionListener(new?ActionListener()?{

public?void?actionPerformed(ActionEvent?e)?{

StringBuilder?info?=?new?StringBuilder();

String?name?=?tfName.getText();

String?num?=?tfNum.getText();

String?sex;

if?(rb1.isSelected())?{

sex?=?"男";

}?else?{

sex?=?"女";

}

info.append(name?+?num?+?sex);

if?(cb1.isSelected())?{

String?c?=?cb1.getText();

String?t?=?t1.getSelectedItem().toString();

info.append("?"?+?c?+?t);

}

if?(cb2.isSelected())?{

String?c?=?cb2.getText();

String?t?=?t2.getSelectedItem().toString();

info.append("?"?+?c?+?t);

}

if?(cb3.isSelected())?{

String?c?=?cb3.getText();

String?t?=?t3.getSelectedItem().toString();

info.append("?"?+?c?+?t);

}

allInfo.setText(info.toString());//把學生信息和選課信息放到文本框

}

});

//給重填按鈕?設置事件處理代碼

jbRest.addActionListener(new?ActionListener()?{

public?void?actionPerformed(ActionEvent?e)?{

tfName.setText("");

tfNum.setText("");

rb1.setSelected(true);

cb1.setSelected(false);

t1.setSelectedIndex(0);

cb2.setSelected(false);

t2.setSelectedIndex(0);

cb3.setSelected(false);

t3.setSelectedIndex(0);

allInfo.setText("");

}

});

}

}


標題名稱:java源代碼界面設計,java程序界面設計
標題鏈接:http://weahome.cn/article/hoecdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部