本文目錄一覽:
- 1、java中布局管理器有幾種 都有什麼
- 2、請問JAVA有幾種布局管理器。分別怎麼用?謝謝
- 3、什麼是容器的布局,試列舉並簡述java中常用的幾種布局策略
- 4、java布局管理器有哪幾種各自的特點
- 5、java中描述常見的幾種布局特點及用法
java中布局管理器有幾種 都有什麼
怎麼才6種呢?10多20種,你自已去JAVA的API裡面查看吧,
java.awt包中大約有
FlowLayout 流式布局
BorderLayout 邊框式布局
GridLayout 網格布局
CardLayout 卡片布局
GridBagLayout 複雜的網格布局
javax.swing包中大約有如下布局
BoxLayout 盒式布局
OverlayLayout 重疊布局
ScrollPaneLayout 類JScrollPane使用的布局管理器
ViewportLayout 類JViewport使用的布局管理器
請問JAVA有幾種布局管理器。分別怎麼用?謝謝
Java的GUI界面定義是由awt類和Swing類來完成的。它在布局管理上面採用了容器和布局管理分離的方案。也就是說,容器只管將其他小件放入其中,而不管這些小件是如何放置的。對於布局的管理交給專門的布局管理器類(LayoutManager)來完成。
其實,java在GUI方面應該是並不成功的。Awt類和swing類的結構非常複雜,加上充斥其間的子類繼承和介面實現,使得要想掌握這兩個類非常困難。這也是很多的java程序員抱怨的事情,但GUI已經成了程序發展的方向,所以這裡我們也得勉為其難了。
現在我們來看java中布局管理器的具體實現。我們前面說過,java中的容器類(Container),它們只管加入小件(Meta),也就是說,它只使用自己的add()方法向自己內部加入小件。同時他記錄這些加入其內部的小件的個數,可以通過container.getComponentCount()方法類獲得小件的數目,通過container.getComponent(i)來獲得相應小件的句柄。然後LayoutManager類就可以通過這些信息來實際布局其中的小件了。
java已經為我們提供了幾個常用的布局管理器類,例如:BorderLayout、FlowLayout、GridBagLayout等等。但在實際的布局上,我們還是會有其他的需要。我在不久前的一個問題中曾經要一個垂直的流式布局,我稱之為VflowLayout,其實BoxLayout和GridBagLayout可以完成類似的工作,但前者是swing類的成員,我的客戶端是一個Applet,不能使用,而後者必須在類生成的時候指定列數,而失去了靈活性,所以我決定重寫一個自己的布局管理器來實現。經過分析,所有的LayoutManager都要實現一個介面,就是LayoutManager Inerface或者是他的一個子介面LayoutManager2 Interface,後者用於複雜的布局管理,例如GridCardLayout。LayoutManager有五個方法需要實現,分別是:
1、public void addLayoutComponent(String name, Component comp);
2、public void removeLayoutComponent(Component comp);
3、public Dimension preferredLayoutSize(Container container);
4、public Dimension minimUMLayoutSize(Container container);
5、public void layoutContainer(Container container);
第一個方法其實就是你在使用container.add(String name,component comp);時調用的方法,例如BorderLayout為布局管理器時。但在FlowLayout中由於沒有其他的附加信息,所以不需要填充這個方法。相應的第二個方法也就不需要填充了。真正核心的方法是第三個和第五個方法,前者是最終確定Container有多大的,而後者就是決定Container中各個小件的實際位置的了。也就是說,當我們用container.setLayout(LayoutManager)後,再加入小件後,最後系統做的工作其實是LayoutManager. layoutContainer(container);和container.setSize(LayoutManager. PreferredLayoutSize(container));。下面是我的新類:VflowLayout。
package render_account;
import java.awt.*;
import java.io.*;
public class VFlowLayout implements LayoutManager,Serializable{
int hgap;
int vgap;
public VFlowLayout(){
this(5,5);
}
public VFlowLayout(int i,int j){
this.hgap=i;
this.vgap=j;
}
public void addLayoutComponent(String name, Component comp){
}
public void removeLayoutComponent(Component comp){
}
public Dimension preferredLayoutSize(Container container){
synchronized(container.getTreeLock()){
Dimension dimension1=new Dimension(0,0);
int i=container.getComponentCount();
for(int j=0;j
Component component = container.getComponent(j);
if(component.isVisible()){
Dimension dimension2=component.getPreferredSize();
dimension1.width=Math.max(dimension1.width,dimension2.width);
if(j0)
dimension1.height+=vgap;
dimension1.height+=dimension2.height;
}
}
Insets insets=container.getInsets();
dimension1.height+=insets.top+insets.bottom+vgap*2;
dimension1.width+=insets.left+insets.right+hgap*2;
Dimension dimension=dimension1;
return dimension;
//return(new Dimension(50,200));
}
}
public Dimension minimumLayoutSize(Container container){
synchronized(container.getTreeLock()){
Dimension dimension1=new Dimension(0,0);
int i=container.getComponentCount();
for(int j=0;j
Component component = container.getComponent(j);
if(component.isVisible()){
Dimension dimension2=component.getMinimumSize();
dimension1.width=Math.max(dimension1.width,dimension2.width);
if(j0)
dimension1.height+=vgap;
dimension1.height+=dimension2.height;
}
}
Insets insets=container.getInsets();
dimension1.height+=insets.top+insets.bottom+vgap*2;
dimension1.width+=insets.left+insets.right+hgap*2;
Dimension dimension=dimension1;
return dimension;
}
}
public void layoutContainer(Container container){
synchronized(container.getTreeLock()){
Insets insets=container.getInsets();
int vSpace=container.getSize().height-(insets.top+insets.bottom+vgap*2);
int componentCount=container.getComponentCount();
int left=insets.left+hgap;
int totalHeight=0;
int width=0;
int componentStart=0;
for(int i=0;i
Component component=container.getComponent(i);
if(component.isVisible()){
Dimension dimension=component.getPreferredSize();
component.setSize(dimension.width,dimension.height);
if(totalHeight==0 || totalHeight+dimension.height=vSpace){
if(totalHeight0)
totalHeight+=vgap;
totalHeight+=dimension.height;
width=Math.max(width,dimension.width);
}else{
moveComponents(container,insets.top+vgap,left,width,componentStart,i);
totalHeight=0;
left+=hgap+width;
width=dimension.width;
componentStart=i;
}
}
}
moveComponents(container,insets.top+vgap,left,width,componentStart,componentCount);
}
}
private void moveComponents(Container container,int top,int left,int width,int componentStart,int componentEnd){
synchronized(container.getTreeLock()){
for(int i=componentStart;i
Component component=container.getComponent(i);
if(component.isVisible()){
component.setLocation(left,top);
top+=component.getPreferredSize().height+vgap;
}
}
}
}
public void setHgap(int i){
this.hgap=i;
}
public void setVgap(int i){
this.vgap=i;
}
public int getHgap(){
return(this.hgap);
}
public int getVgap(){
return(this.vgap);
}
}
大家可以試一下
什麼是容器的布局,試列舉並簡述java中常用的幾種布局策略
容器的布局是指對添加的各個組件進行有序的、統一的對位置進行編排,使其更加美觀。
JavaFX典型的布局策略:
1、lowPane面板
它採用的布局策略是:按照控制項的添加次序按個擺放,按照從上到下、從左到右的次序擺放。當窗口的大小發生變化後,場景的大小也自動跟著變化,面板的大小也跟著變化,並且會重新計算各個控制項的位置,重新擺放各個控制項的位置。
2、GridPane面板
它採用的布局策略是:將整個面板劃分為若干個格子,每個格子的大小是一樣的,每個格子中可以放置一個控制項,類似於表格的方式。
3、BorderPane面板
它採用的布局策略是:將整個面板劃分五個區域,分別是上、下、左、右、中,每個區域可以放置一個控制項。
4、HBox面板
HBox是將所有的控制項放在同一行,無論有多少個控制項都是放在同一行。
5、Box面板
VBox的布局策略與HBox類似,不過VBox是將所有的控制項放在同一列。
擴展資料:
容器沒有布置它自己構件的功能,而把這個責任授權給一個布局管理器。
順序布局是最基本的一種布局,面板的默認布局就是順序布局。順序布局指的是把圖形元件一個接一個地放在面板上。
邊界布局包括5個區:北區、南區、東區、西區和中區。這5個區在面板上的分布規律是「上北下南,左西右東」。
參考資料:百度百科-java軟體開發
java布局管理器有哪幾種各自的特點
大概講簡單的三種:
①FlowLayout流布局管理器,它的布局方式是在一行上排列組件,當一行沒有足夠空間時,則回行顯示,默認為居中
②BorderLayout邊界布局管理器,它的布局方式是將容器劃分為5個部分
③GridLayout網格布局管理器,它的布局方式是將容器按照用戶設置平均劃分成若干網格
java中描述常見的幾種布局特點及用法
Java的GUI界面定義是由AWT類包和Swing類包來完成的,對於布局的管理交給專門的布局管理器類(LayoutManager)來完成。
Java中的布局管理器類有:FlowLayout、BorderLayout、GridLayout、GridBagLayout等,
下面是他們的一些特點:
CardLayout 將組件象卡片一樣放置在容器中,在某一時刻只有一個組件可見
FlowLayout 將組件按從左到右而後從上到下的順序依次排列,一行不能放完則折到下一行繼續放置
GridLayout 形似一個無框線的表格,每個單元格中放一個組件
BorderLayout 將組件按東、南、西、北、中五個區域放置,每個方向最多只能放置一個組件
GridBagLayout 非常靈活,可指定組件放置的具體位置及佔用單元格數目
BoxLayout 就像整齊放置的一行或者一列盒子,每個盒子中一個組件
SpringLayout 根據一組約束條件放置子組件
ScrollPaneLayout 專用於JScrollPane,含一個Viewport,一個行頭、一個列頭、兩個滾動條和四個角組件
OverlayLayout 以彼此覆蓋的形式疊置組件
ViewportLayout JViewport的默認布局管理器
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309422.html