當前位置:首頁 » 操作系統 » gc1演算法

gc1演算法

發布時間: 2023-07-07 05:13:00

java網格包布局管理器的GridBagConstraints類型的約束參數:

double weightx和double weighty參數(默認值為0)
這是兩個非常重要的參數,該參數直接影響到怎樣設置網格單元的大小,因此常握好該參數就可以對網格包布局應用自如。
該參數對x方向和y方向指定一個加權值。這個加權值直接影響到網格單元的大小,比如weightx的值分別為10,20,30,則在容器的x方向也就是列的方向,按一定的比例(比如1:2:3其具體演算法請參看java文件)分配三個網格單元,其中加權值越大網格單元就越大,可以看出值的大小是沒有關系的,加權值的作用是讓容器以設定的值的比例在橫向和縱向分配網格,且在容器的大小改變時這個比例不改變。
如果weightx只設置了一個值,而組件卻不只一個以上,則被設置了的這個組件的網格單元的大小為容器在x方向的大小減去那兩個組件的最小尺寸就是該組件的網格單元大小。默認情況下組件的最小尺寸是比較小的。
如果兩個參數都為0(默認值),則組件會被顯示在容器的中央,不管容器是放大還是縮小組件都只會顯示在容器的中央。
由上所述,在使用網格包布局時首先應先使用weightx和weighty來劃分網格單元(不是直接劃分,而是按一定比例來劃分),網格單元劃分出來後,組件放置在網格單元中的位置和大小就由後面介紹的約束來決定。
一定要注意的是設置權值後要使當前的設置生效應使用setConstraints()函數一次,如果連續設置多個同一方向的權值,則只有最後一次設置的權值有效,比如出現同時兩行都設置了x方向的權值,則以最後一行設置的x方向的權值為標准來劃分網格單元。
因此在使用GridBagLayout網格包布局管理器之前應先設置好網格單元,即要把容器劃分為幾行幾列的網格單元,每行每列在容器中的寬度和高度比例,每個組件應在哪個網格單元。
int fill參數(默認值為GridBagConstraints.NONE)
fill參數指定組件填充網格的方式,當某組件的網格單元大於組件的大小時被使用,一般情況下組件是以最小的方式被顯示的,如果不使用fill參數,則有可能組件占不完整個網格單元,也就是說組件占據的空間比劃分的網格單元小,這時組件將顯示在網格單元中的某個位置(具體在什麼位置由網格包中的參數來設置)。其可取的值如下:
GridBagConstraints.NONE默認值,不改變組件的大小。
GridBagConstraints.HORIZONTAL使組件足夠大,以填充其網格單元的水平方向,但不改變高度,其值等於整數2。
GridBagConstraints.VERTICAL使組件足夠大,以填充其網格單元的垂直方向,但不改變寬度,其值等於整數3。
GridBagConstraints.BOTH使組件足夠大,以填充其整個網格單元,其值等於整數1。
int gridwidth和int gridheight參數(默認值為1)
該參數指定組件占據多少個網格單元,gridwidth指定組件占據多少個網格單元的寬度,gridheight指定組件占據多少個網格單元的高度。兩個參數的默認值都為1。其中值GridBagConstraints.REMAINDER表示當前組件在其行或列上為最後一個組件,也就是說如果是行上的最後一個組件的話,那麼下一個組件將會被添加到容器中的下一行,如果在行上不指定該值(同時也不指定gridx和gridy參數),那麼無論添加多少個組件都是在同一行上,同樣如果在列上不指定該值(同時也不指定gridx和gridy參數)則無論添加多少行組件,都無法把容器填滿。值GridBagConstraints.RELATIVE表示當前組件在其行或列上為倒數第二個組件。
示例:
import java.awt.*;
public class Program
{public static void main(String[] args)
{ Frame ff = new Frame();
GridBagLayout gr = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints(); //創建一個名為gc的約束對象
ff.setLayout(gr); //將容器ff的布局設為GridBagLayout
//創建一組按鈕組件
Button bb1 = new Button(bb1); Button bb2 = new Button(bb2); Button bb3 = new Button(bb3);
Button bb4 = new Button(bb4); Button bb5 = new Button(bb5); Button bb6 = new Button(bb6);
Button bb7 = new Button(bb7); Button bb8 = new Button(bb8);
gc.fill = GridBagConstraints.BOTH;//設置約束的fill參數,該參數表示當組件的大小小於網格單元的大小時在水平和垂直方向都填充,
gc.weightx =11; //設置x方向的加權值為11。
gc.weighty = 11;//設置y方向的加權值為11。
gr.setConstraints(bb1, gc); //將以上gc所設置的約束應用到按鈕組件bb1
gc.weightx = 22;//設置x方向的加權值為22,如果不設置weightx則以下的組件都將自動應用上面所設置的weightx值11。
gr.setConstraints(bb2, gc); //將以上所設置的約束應用到按鈕組件bb2。
//gc.weighty=111; //注意如果不注釋掉該行,則以後使用gc約束的按鈕組件在y方向的加權值將為111,而在前面設置的y方向的加權值11將失去作用。
gc.weightx =33;
gc.gridwidth = GridBagConstraints.REMAINDER;//設置gridwidth參數的值為REMAINDER這樣在後面使用該約束的組件將是該行的最後一個組件。
gr.setConstraints(bb3, gc); //第一行添加了三個按鈕組件bb1,bb2,bb3,且這3個按鈕的寬度按weightx設置的值11,22,33按比例設置寬度
GridBagConstraints gc1 = new GridBagConstraints();//創建第二個約束gc1
gc1.fill = GridBagConstraints.BOTH;
gc1.weighty = 22; //將第2行的y方向加權值設為22
gr.setConstraints(bb4, gc1);
gr.setConstraints(bb5, gc1);
gc1.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb6, gc1); //第二行添加了三個按鈕組件bb4,bb5,bb6
gc1.weighty =33;
gc1.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb7, gc1);//第三行添加了一個按鈕組件bb7
gc1.weighty=0;
gr.setConstraints(bb8, gc1); //第四行添加了一個按鈕組件bb8,bb8並沒有添加到bb7的後面,因為bb8使用了bb7前面的gridwidth參數設置的值,所以bb8也是單獨的一行。
ff.setSize(500, 300);
ff.add(bb1); ff.add(bb2);ff.add(bb3); ff.add(bb4); ff.add(bb5); ff.add(bb6); ff.add(bb7); ff.add(bb8);
ff.setVisible(true);} }
運行結果見下圖
int gridx和int gridy參數(默認值為GridBagConstraints.RELATIVE)
該參數表示組件被添加到容器中的X或者Y坐標處,坐標以網格單元為單位,也就是說不管網格單元有多大,一個網格單元就是1X1的大小,也就是說如果把gridx和gridy都設為1,那麼該組件會被顯示到第二行的行二列上。其中值GridBagConstraints.RELATIVE(默認值)表示當前組件緊跟在上一個組件的後面。
int ipadx和int ipady參數(默認值為0)
ipadx和ipady也被稱為內部填充,該參數用以設置組件的最小尺寸,如果參數值為正值則組件的最小尺寸將比原始最小尺寸大,如果為負值,則組件的最小尺寸將會變得比原始的最小尺寸小。該參數也可以理解為直接為組件指定大小,這個設置的大小就是組件的最小尺寸。其設置後組件的大小為組件的原始最小尺寸加上ipadx*2個像素。
int anchor參數(默認值為GridBagConstraints.CENTER)
該參數指定當組件的大小小於網格單元時,組件在網格單元中的位置。一般情況下,在設置了weightx或者weighty的加權值時,如果不使用fill參數填充空白區域,則組件的大小將小於網格單元的大小,這時使用anchor參數就能看到其中的效果了。anchor參數可取的值有:GridBagConstraints.CENTER;GridBagConstraints.NORTH;GridBagConstraints.NORTHEAST;GridBagConstraints.EAST;GridBagConstraints.SOUTHEAST;GridBagConstraints.SOUTH;GridBagConstraints.SOUTHWEST;GridBagConstraints.WEST;GridBagConstraints.NORTHWEST;即居中,北,東北,東,東南,南,西南,西,西北方向。
Insets insets參數(默認值為0)
insets參數也被稱為外部填充,該參數指定組件與網格單元之間的最小空白區域大小,要注意的是即使使用了fill參數填充橫向和縱向但只要設置了insets參數,同樣會留出insets所設置的空白區域,在insets設置的空白區域不會被填充。在使用該參數時需要設置對象的top,left,right,bottom四個方向的值來調整組件與網格單元之間的空白區域大小,比如gc.insets=new Insets(10,10,10,10);其中gc是GridBagConstraints類型的約束對象,這里要注意後面的new Insets其中的Insets第一個字母是大寫的。當然也可以為insets指定負值,以擴大其網格單元。
示例:
import java.awt.*;
public class Program
{public static void main(String[] args)
{//將容器ff的布局設為GridBagLayout
Frame ff = new Frame();
GridBagLayout gr = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints(); //創建一個名為gc的約束對象
ff.setLayout(gr);
//創建一組按鈕組件
Button bb1 = new Button(bb1); Button bb2 = new Button(bb2); Button bb3 = new Button(bb3);
Button bb4 = new Button(bb4); Button bb5 = new Button(bb5); Button bb6 = new Button(bb6);
Button bb7 = new Button(bb7); Button bb8 = new Button(bb8);
gc.fill = GridBagConstraints.BOTH;
gc.weightx = 11; gc.weighty = 11;
gr.setConstraints(bb1, gc);
gc.weightx = 22;
gc.gridx = 1; gc.gridy = 1; //將下一個組件放置在坐標為1,1的位置。
gr.setConstraints(bb2, gc);
gc.weightx = 33;
gc.gridx = 2; gc.gridy = 1; //將下一個組件放置在坐標為2,1的位置。
gc.insets = new Insets(-10, -10, -10, -10); //將下一個組件與網格單元的空白區域向外擴展10個像素,在這里可以看到網格包布局允許組件之間重疊。
gc.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb3, gc);
GridBagConstraints gc1 = new GridBagConstraints();
gc1.weighty = 22;
gc1.ipadx = 50; gc1.ipady = 50; //將組件的最小尺寸加大ipadx*2個像素。
gr.setConstraints(bb4, gc1);
gc1.ipadx = 0;
gc1.ipady = 0; //將以後的組件的最小尺寸設置為默認值,如果省掉該行,則以後組件的最小尺寸都會加大ipadx*2個像素。
gc1.anchor = GridBagConstraints.NORTHWEST; //將下一個組件bb5的位置放置在單元網格的西北方向。
gr.setConstraints(bb5, gc1); //因為bb5未設置fill,同時bb5設置了weightx(由gc參數設置)和weighty兩個值以確定bb5所在的網格單元的大小,因而組件bb5的原始最小尺寸無法佔據整個網格單元。
gc1.fill = GridBagConstraints.BOTH;
gc1.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb6, gc1);
gc1.weighty = 33;
gc1.insets = new Insets(5, 15,40,150); //使下一個組件bb7與網格單元之間在上,左,下,右,分別保持5,15,40,150個像素的空白位置。
gr.setConstraints(bb7, gc1);
gc1.weighty = 0;
gc1.insets = new Insets(0, 0, 0, 0); //將insets的參數值設為默認值。
gr.setConstraints(bb8, gc1);
ff.setSize(500, 300);
ff.add(bb1); ff.add(bb2); ff.add(bb3); ff.add(bb4); ff.add(bb5); ff.add(bb6); ff.add(bb7); ff.add(bb8);
ff.setVisible(true);}}

熱點內容
寬頻撥號連接中賬戶密碼是什麼 發布:2025-03-17 23:49:06 瀏覽:359
android貪吃蛇 發布:2025-03-17 23:45:57 瀏覽:69
zbar源碼 發布:2025-03-17 23:42:18 瀏覽:771
水星wifi改密碼怎麼改 發布:2025-03-17 23:41:39 瀏覽:791
編程班表 發布:2025-03-17 23:41:34 瀏覽:882
網上鄰居訪問許可權 發布:2025-03-17 23:41:31 瀏覽:391
國行安卓11如何使用谷歌 發布:2025-03-17 23:40:52 瀏覽:147
ftp數據傳輸和控制埠 發布:2025-03-17 23:40:52 瀏覽:876
首演算法 發布:2025-03-17 23:40:02 瀏覽:452
php應用程序池 發布:2025-03-17 23:36:13 瀏覽:411