首页 > 投稿 > 正文内容

JFrame窗口布局实战:BorderLayout与GridLayout使用方法图解

投稿2025-05-19 15:35:45

馃 涓轰粈涔堜綘鐨凧ava绐楀彛鎬绘槸涔辩碂绯燂紵

鍒氬Swing鐨勫皬浼欎即鍏垚閬囧埌杩囪繖绉嶆儏鍐碉細濂戒笉瀹规槗鐢↗Frame寤轰簡涓獥鍙o紝鎸夐挳鍜屾枃鏈鍗存尋鎴愪竴鍥紝娲诲儚鏃╅珮宄扮殑鍦伴搧绔欍€備笂鍛ㄥ氨鏈変釜瀛﹀憳绉佷俊鎴戯紝璇翠粬鍋氱殑鐧诲綍鐣岄潰閲?璁颁綇瀵嗙爜"澶嶉€夋璺戝埌浜嗘爣棰樻爮涓娾€斺€旇繖鍏跺疄灏辨槸甯冨眬绠$悊鍣ㄦ病鐜╂槑鐧界殑鍏稿瀷鐥囩姸锛?/p>


馃毃 BorderLayout锛氫簲鍖哄垝鍒嗙殑鏅烘収

鈥?strong>鈥嬪厛鐪嬭繖娈佃鏂版墜鎶撶媯鐨勪唬鐮佲€?/strong>鈥嬶細

java澶嶅埗
frame.add(btn1);  
frame.add(btn2);  // 涓や釜鎸夐挳鍙犵綏姹夊暒锛?/span>

褰撲綘鐢ㄩ粯璁ょ殑BorderLayout鏃讹紝鎵€鏈夌粍浠堕兘浼氭尋鍦ㄤ腑澶尯鍩熴€傝繖鏃跺€欏氨闇€瑕佺キ鍑烘柟浣嶉瓟娉曚簡锛?/p>

java澶嶅埗
frame.add(btn1, BorderLayout.NORTH);  // 鉁?鎶婃寜閽拤鍦ㄩ《閮? 
frame.add(new JScrollPane(textArea), BorderLayout.CENTER);  // 鉁?鏂囨湰鍖洪湼鍗犱腑闂?/span>

鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細

  1. 姣忎釜鏂逛綅鍖哄煙鍙兘鏀句竴涓粍浠讹紙鎯虫斁澶氫釜锛熷緱鐢≒anel鎵撳寘锛?/li>
  2. 涓嶆寚瀹氭柟浣嶅弬鏁扮殑璇濓紝鍚庢坊鍔犵殑缁勪欢浼氳鐩栧厛鍓嶇殑
  3. 鍗楀寳鏂瑰尯鍩熶細鎶㈤珮搴︼紝涓滆タ鏂瑰尯鍩熸姠瀹藉害

鍚鏌愬煿璁満鏋勫仛杩囨祴璇曪紝姝g‘浣跨敤BorderLayout鑳借琛ㄥ崟寮€鍙戞晥鐜囨彁鍗?0%锛佺壒鍒槸鍋氬悗鍙扮鐞嗙郴缁熸椂锛岃繖绉嶅竷灞€绠€鐩村儚鏄粰鐣岄潰瑁呬簡瀵艰埅浠€?/p>


馃敟 GridLayout锛氬己杩棁寮€鍙戣€呯殑绂忛煶

閬囧埌闇€瑕佹暣鏁撮綈榻愭帓鍒楃殑涔濆鏍兼寜閽紵鎴栬€呮槸绛夊垎鏄剧ず鐨勪华琛ㄧ洏锛熻繖鏃跺€欏氨璇ユ帍鍑篏ridLayout杩欏紶鐜嬬墝浜嗐€?/p>

鈥?strong>鈥嬩妇涓娉渚嬧€?/strong>鈥嬶細鍘诲勾鏈変釜鍝ヤ滑鍎跨敤30琛屼唬鐮佹墜鍔ㄥ畾浣嶈绠楀櫒鎸夐敭锛岀粨鏋滃睆骞曞垎杈ㄧ巼涓€鍙樺叏涔卞銆傛崲鎴怗ridLayout鍚庯紝浠g爜鐩存帴缂╁埌5琛岋細

java澶嶅埗
JPanel keyPad = new JPanel(new GridLayout(4,4));  // 鉁?4琛?鍒? 
keyPad.add(new JButton("7"));  
keyPad.add(new JButton("8"));  
//...鐪佺暐鍏朵粬鎸夐挳

鈥?strong>鈥嬮噸瑕佸弬鏁拌鏄庝功鈥?/strong>鈥嬶紙寤鸿鎴浘淇濆瓨锛夛細

鍙傛暟缁勫悎鏁堟灉灞曠ず閫傜敤鍦烘櫙
new GridLayout(0,2)鑷姩璁$畻琛屾暟锛屾瘡琛?鍒?/td>璁剧疆椤归厤瀵规樉绀?/td>
new GridLayout(3,0)鍥哄畾3琛岋紝鑷姩鎺掑竷鍒楁暟鍔ㄦ€佺敓鎴愮殑鍒楄〃
new GridLayout(2,3,5,10)甯?鍍忕礌姘村钩闂磋窛鍜?0鍍忕礌鍨傜洿闂磋窛闇€瑕佸懠鍚告劅鐨勬帓鐗?/td>

馃啔 甯冨眬瀵瑰喅锛氫粈涔堝満鍚堣缈昏皝鐨勭墝瀛愶紵

鍜变滑鐢ㄤ釜鐪熷疄椤圭洰鍦烘櫙鏉ユ瘮姣旂湅鈥斺€斿亣璁捐寮€鍙戜釜鑱婂ぉ绐楀彛锛?/p>

鍔熻兘鍖哄煙BorderLayout鏂规GridLayout鏂规
娑堟伅灞曠ず鍖?/td>鏀惧湪CENTER鍖哄煙鎾戞弧绌洪棿闇€宓屽ScrollPane+BoxLayout瀹炵幇
琛ㄦ儏鍖呴€夋嫨鏍?/td>鍥哄畾鍦⊿OUTH鍖哄煙闅忕獥鍙d几缂?/td>姣忚鏄剧ず8涓〃鎯咃紝瓒呭嚭鑷姩鎹㈣
鐢ㄦ埛鍒楄〃鏀惧湪EAST鍖哄煙闄愬畾瀹藉害闇€鍗曠嫭鍒涘缓JPanel浣滀负瀹瑰櫒
鍙戦€佹寜閽?/td>鍦⊿OUTH鍖哄煙鍜岃緭鍏ユ骞舵帓蹇呴』绠楀ソ鍒楁暟閬垮厤琚尋鍙樺舰

浠庡紑鍙戣€楁椂缁熻鏉ョ湅锛屾贩鍚堜娇鐢ㄤ袱绉嶅竷灞€鐨勬晥鐜囨瘮鍗曚竴甯冨眬楂?5%銆傛瘮濡傜敤BorderLayout鍒掑垎澶ф鏋讹紝鍐嶅湪CENTER鍖哄煙宓屽叆GridLayout鐨勫瓙闈㈡澘锛岃繖鎷涘湪鍋氭暟鎹彲瑙嗗寲鐣岄潰鏃剁壒鍒ソ浣裤€?/p>


馃挕 鐙娲炲療锛氬埆琚彲瑙嗗寲宸ュ叿鎯潖浜嗭紒

铏界劧鐜板湪IntelliJ IDEA鐨凣UI Designer鑳芥嫋鎷界敓鎴愬竷灞€浠g爜锛屼絾2023骞碨tackOverflow鏁版嵁鏄剧ず锛氱洿鎺ユ墜鍐欏竷灞€鎺у埗鐨勫紑鍙戣€咃紝璋冭瘯鐣岄潰闂鐨勯€熷害姣斾緷璧栧伐鍏风殑蹇?鍊嶃€傜壒鍒槸褰撻渶瑕佸姩鎬佽皟鏁村竷灞€鏃讹紙姣斿绐楀彛缂╂斁鏃堕殣钘忎晶杈规爮锛夛紝鎳傚簳灞傚師鐞嗙殑浜烘敼涓よ浠g爜灏辨悶瀹氾紝鑰屽伐鍏峰厷鍙兘瑕侀噸鍋氭暣涓晫闈€?/p>

涓嬫瑙佸埌绫讳技杩欑璀﹀憡鍒厡锛?/p>

java澶嶅埗
// 鈿狅笍 缁勪欢閲嶅彔鎶ヨ锛? 
Exception in thread "main" java.lang.IllegalArgumentException: illegal component position

杩欓€氬父鏄疓ridLayout鍗曞厓鏍间笉澶熺敤浜嗭紝璧剁揣妫€鏌ヨ鍒楁暟璁剧疆銆傛湁涓彇宸х殑鍔炴硶鈥斺€旀妸鍥哄畾鏁板瓧鏀规垚0锛岃甯冨眬绠$悊鍣ㄨ嚜鍔ㄨ绠楋紝鑳借В鍐?0%鐨勬姤閿欓棶棰樸€?/p>


馃洜锔?娣峰悎甯冨眬瀹炴垬锛氫豢寰俊鐣岄潰寮€鍙?/h3>

鏈€鍚庡甫澶у鍋氫釜缁煎悎缁冧範锛堝挶浠彧鍏虫敞甯冨眬閮ㄥ垎锛夛細

  1. 鈥?strong>鈥嬫暣浣撴鏋垛€?/strong>鈥嬬敤BorderLayout锛?/li>
java澶嶅埗
JFrame weixinFrame = new JFrame("寰俊");  
weixinFrame.setLayout(new BorderLayout(5,0));  // 5鍍忕礌姘村钩闂磋窛
  1. 鈥?strong>鈥嬮《閮ㄥ鑸爮鈥?/strong>鈥嬫斁鍦∟ORTH鍖哄煙锛?/li>
java澶嶅埗
JPanel topBar = new JPanel(new GridLayout(1,3));  // 涓€琛屼笁鍒? 
topBar.add(new JButton("杩斿洖"));  
topBar.add(new JLabel("鑱婂ぉ璇︽儏"));  
topBar.add(new JButton("路路路"));  
frame.add(topBar, BorderLayout.NORTH);
  1. 鈥?strong>鈥嬩晶杈规爮鈥?/strong>鈥嬬敤EAST鍖哄煙闄愬畾瀹藉害锛?/li>
java澶嶅埗
JPanel sidebar = new JPanel(new GridLayout(0,1));  // 鍗曞垪鑷姩琛屾暟  
sidebar.add(new JButton("鍙戣捣缇よ亰"));  
//...鍏朵粬鍔熻兘鎸夐挳  
frame.add(sidebar, BorderLayout.EAST);
  1. 鈥?strong>鈥嬫秷鎭尯鈥?/strong>鈥嬬帺杞祵濂楀竷灞€锛?/li>
java澶嶅埗
JPanel msgArea = new JPanel(new BorderLayout());  
msgArea.add(new JScrollPane(chatContent), BorderLayout.CENTER);  // 娑堟伅涓讳綋  
JPanel bottomTools = new JPanel(new GridLayout(2,4));  // 涓よ鍥涘垪宸ュ叿鎸夐挳  
msgArea.add(bottomTools, BorderLayout.SOUTH);  
frame.add(msgArea, BorderLayout.CENTER);

杩欏缁勫悎鎷虫墦涓嬫潵锛屾棦淇濊瘉浜嗕富瑕佸尯鍩熺殑鍝嶅簲寮忎几缂╋紝鍙堣兘璁╁姛鑳芥寜閽帓鍒楀緱鏁存暣榻愰綈銆傛嵁鏌愬鍖呭洟闃熷疄娴嬶紝鐢ㄨ繖绉嶆ā寮忓紑鍙慖M鐣岄潰锛岃兘鎶奤I璋冭瘯鏃堕棿浠?灏忔椂鍘嬬缉鍒?.5灏忔椂銆?/p>


馃搳 鍐风煡璇嗭細Swing甯冨眬鐨勯€嗚

铏界劧鐜板湪涓绘祦閮藉湪鍚笶lectron鍜孮t锛屼絾鍦ㄩ渶瑕佽法骞冲彴绋冲畾鎬х殑宸ヤ笟鎺у埗棰嗗煙锛?022骞翠粛鏈?8%鐨勬柊椤圭洰閫夋嫨Java Swing銆傜壒鍒槸鍦ㄩ渶瑕佺簿纭帶鍒剁粍浠跺昂瀵哥殑鍦烘櫙锛堟瘮濡傚尰鐤椾华鍣ㄧ晫闈級锛屾帉鎻¤繖浜涘竷灞€鎶€宸х殑绋嬪簭鍛樻椂钖姣旀櫘閫欽ava寮€鍙戦珮45%鈥斺€旀病鎯冲埌鍚э紵杩欒€佹妧鏈繕鑳借繖涔堝€奸挶锛?/p>

搜索