java佈局學習 (二)

来源:http://www.cnblogs.com/jilodream/archive/2016/01/03/4970312.html
-Advertisement-
Play Games

前文中介紹了FlowLayout和BorderLayout 本文我們將會繼續介紹java中的佈局方式(3)GridLayout 網格佈局 這種佈局會將整個容器劃分成M行*N列的網格。如下圖: 由模型圖我們可以知道這種佈局,類似於我們常見的掃雷、計算器等軟體的佈局。這種佈局的構造函數有三種1 G...


前文中介紹了FlowLayout和BorderLayout 本文我們將會繼續介紹java中的佈局方式

(3)GridLayout 網格佈局

這種佈局會將整個容器劃分成M行*N列的網格。

如下圖:

                                                                                                     
       
       
       
       
       
       
       

 

 

 

 

由模型圖我們可以知道這種佈局,類似於我們常見的掃雷、計算器等軟體的佈局。

 

這種佈局的構造函數有三種

 

1 GridLayout()  //一行一列 
2 
3 GridLayout(int rows, int cols) 
4 
5 GridLayout(int rows, int cols, int hgap, int vgap)//hgap 水平間距, vgap垂直間距

 

在向這種容器中添加控制項時,會以向左後右,先上後下的順序添加(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )控制項。 而不能在指定的位置中添加控制項,換言之控制項之間不能留有空白。 下麵我們來看代碼

 1 import java.awt.*;
 2 import javax.swing.*;
 3 
 4 class GridFrame extends JFrame
 5 {
 6     JPanel panel=new JPanel(new GridLayout(4,4,3,3));//構造指定佈局的容器
 7     String str[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
 8     public GridFrame(String name)
 9     {
10         super(name); 
11         setLayout(new BorderLayout()); 
12         JButton btnArray[]; 
13         btnArray=new JButton[str.length]; 
14         for(int i=0;i<str.length;i++)
15         {
16             btnArray[i]=new JButton(str[i]);
17             panel.add(btnArray[i]);
18         }
19         setVisible(true);
20         setSize(250,200);
21         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
22         setVisible(true);
23     }
24     
25      public static void main(String[] args)
26     {
27         GridFrame gf=new GridFrame("網格佈局電腦!");
28     }
29 
30 }  

顯示效果如下圖

 

 

(4)GridBagLayout

GridBagLayout也是一種表格,但是可以通過設定規則更自由的將控制項綁定到容器上:

如下圖:

 

將容器切割為若幹個小的格子Cell,然後向這些Cell中添加控制項,同時可以在某一個(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )方向上連續的幾個Cell進行拼接,組成一個大的Cell放置控制項。

操作步驟如下:

(1)new GridBagLayout() 設置到指定容器上。

(2)GridBagConstraint  gbc 新增這樣的一個容器規則。(註意Constraint是規則、約束、條件的意思)

設定的參數規則如下

gridx  gridy 索引

gridwidth gridheight 跨越的索引

fill  是否動態擴充

weightx、weighty 擴大的權重

(3)gb.setConstraints(控制項,gbc)  將控制項和規則綁定起來

(4)constainer.add(c) 添加容器,然後將控制項添加到容器上。

同時gbc 可以重用,反覆的設定骨子額,綁定規則,添加容器

重覆 2、3、4步

 請參照 如下代碼 ,重點註意 addComponent()方法:

 1 public class NumberPad {
 2   private static final Insets insets = new Insets(0, 0, 0, 0);
 3   public static void main(final String args[]) {
 4     final JFrame frame = new JFrame("NumberPad");
 5     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//視窗操作
 6     frame.setLayout(new GridBagLayout());//框架佈局
 7     JButton button;
 8     //下麵利用設立的類對按鍵進行佈局
 9     //第一行
10     button = new JButton("Num");
11     addComponent(frame, button, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
12     button = new JButton("/");
13     addComponent(frame, button, 1, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
14     button = new JButton("*");
15     addComponent(frame, button, 2, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
16     button = new JButton("-");
17     addComponent(frame, button, 3, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
18     //第二行
19     button = new JButton("1");
20     addComponent(frame, button, 0, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
21     button = new JButton("2");
22     addComponent(frame, button, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
23     button = new JButton("3");
24     addComponent(frame, button, 2, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
25     button = new JButton("+");
26     addComponent(frame, button, 3, 1, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
27     // 第三行
28     button = new JButton("4");
29     addComponent(frame, button, 0, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
30     button = new JButton("5");
31     addComponent(frame, button, 1, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
32     button = new JButton("6");
33     addComponent(frame, button, 2, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
34     //第四行
35     button = new JButton("7");
36     addComponent(frame, button, 0, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
37     button = new JButton("8");
38     addComponent(frame, button, 1, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
39     button = new JButton("9");
40     addComponent(frame, button, 2, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
41     button = new JButton("Enter");
42     addComponent(frame, button, 3, 3, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
43     //第五行
44     button = new JButton("0");
45     addComponent(frame, button, 0, 4, 2, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
46     button = new JButton(".");
47     addComponent(frame, button, 2, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);  
48     frame.setSize(250,250);
49     frame.setVisible(true);
50   }
51   
52     private static void addComponent(Container container, Component component, int gridx, int gridy,
53       int gridwidth, int gridheight, int anchor, int fill) {
54     GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0,
55         anchor, fill, insets, 0, 0);//建立網格包對象
56     container.add(component, gbc);//添加到容器中
57   }

ps 此代碼來自http://blog.sina.com.cn/s/blog_6cea57330100pwvq.html

這裡有幾點要註意的

(1)控制動態擴充的fill參數,有四個值分別為 水平擴充、垂直擴充、水平垂直擴充、不擴充。大家根據自己的實際情況來選擇  

(2)weightx、weighty 是擴大的權重,這個權重表示的是,當橫向(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )或縱向擴大N的倍數後,那麼他占的比重是多少。這裡要小心,就是權重大的話,如果往大拖容器size,那麼這個控制項增長的快,同時當size變小時,權重大的也縮小的更快。所以如果要想讓權重大的控制項始終大時,需要將幾個控制項的初始size設定的非常小,這樣所有的控制項都是在拖大的狀態了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 意圖 0 適用性 1 結構 2 實現 3 效果 4 參考 5意圖使多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關係。將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。適用性在以下條件下使用:有多個對象可以處理一個請求,哪個對象處理該請求運行時刻...
  • 怎樣寫出高逼格的計算器(用上封裝、繼承、多態) -- 簡單工廠模式
  • 回到目錄Lind.DDD.Repositories.EF以下簡稱Repositories.EF,之所以把它從Lind.DDD中拿出來,完全出於可插拔的考慮,讓大家都能休會到IoC的魅力,用到哪種方法持久化,就將那個DLL放到應用程式中,完全不需要把所有持久化方式耦合到一個項目里,這也是遵循了OCP的...
  • 回到目錄Lind.DDD.Domain位於Lind.DDD核心項目中,它主要面向領域實體而設計,由一個IEntity的標識介面,EntityBase基類和N個Entity實體類組成,其中IEntity主要用來標識,在倉儲操作時,用它來表明操作的實體範圍和約束;EntityBase定義了幾個公用的屬性...
  • hi懶癌是最可怕的癌了吧,在即將迎來本命年時,給自己定下每天必乾的幾件成習慣的事情,望不再鴿!!php是我一直在學習的東西,但總以為php簡單,難點在需要掌握大量的相關知識,其實並不完全對,php也是有演算法好吧,php也值得認真對待,既然決定學了,拿點樣子出來啊,是男人吧。1、PHP一、PHP基.....
  • 1 package com.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputSt.....
  • 數組與指針閱讀如下代碼,為何出錯。 1 int main() { 2 char a[] = { "I am a bad boy" }; 3 char * pA = new char[ sizeof( a ) ]; 4 pA = a; 5 6 ...
  • 說到Java web開發,就不得不提Servlet 和 JSP。這兩者是java web開發技術。雖然現在有這麼多的web框架,公司中很少會用這兩個技術來直接開發項目,但是理解了這兩個技術,一則會讓你對web的基礎知識要很深的瞭解,二則學其他的相比來說要更好理解點。一、Servlet1. 什麼是se...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...