ホームページ Java &#&チュートリアル Java グラフィカル インターフェイスのレイアウト設計

Java グラフィカル インターフェイスのレイアウト設計

Jan 17, 2017 pm 04:20 PM

インターフェースデザインでは、見た目を美しくするために、コンポーネントをコンテナーの位置に配置する必要があります。これがレイアウトデザインです。 java.awt には複数のレイアウト クラスが定義されており、各レイアウト クラスはレイアウト戦略に対応します。次のレイアウト クラスが一般的に使用されます:

•FlowLayout。コンポーネントを順番に配置します。
•BoarderLayout、コンポーネントを境界線に配置します。
•CardLayout は、トランプのようにコンポーネントをスタックし、一度に 1 つのコンポーネントのみを表示できます。
•GridLayout は、表示領域を行と列で均等なグリッドに分割し、そのグリッドにコンポーネントを順番に配置します。
•GridBagLayout は、表示領域を多数の小さな長方形の単位に分割し、各コンポーネントは 1 つ以上の小さな単位を占有することができます。

その中で、GridBagLayout は細かい位置制御を行うことができ、最も複雑でもありますが、このチュートリアルでは当面このレイアウト戦略については説明せず、特別記事で詳しく説明します。

各コンテナには、コンテナ内に配置されたコンポーネントをどのように配置するかを決定するレイアウト マネージャーがあります。レイアウト マネージャーは、LayoutManager インターフェイスを実装するクラスです。

1. FlowLayout レイアウト (JApplet、JPanel、JScrollPane のデフォルト レイアウト)

FlowLayout レイアウトは、追加された順序でコンポーネントを左から右に配置します。1 つの行がいっぱいになったら、次の行に移動して左から右へ配置を続けます。右。各行のコンポーネントが中央に配置されます。これは最も単純なレイアウト戦略であり、コンポーネントの数が少ない場合に、コンテナ内のコンポーネントが不均等に表示され、各行の長さが異なる場合に使用されます。

FlowLayout は、小さなアプリケーションとパネルのデフォルトのレイアウトです。FlowLayout レイアウトの構築メソッドは次のとおりです:

1.FlowLayout() は、デフォルトの FlowLayout レイアウトを生成します。デフォルトでは、コンポーネントは 5 ピクセルの間隔で中央に配置されます。
2.FlowLayout(intalignment)、各コンポーネントの配置を設定します。配置値は、FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT です。
3.FlowLayout(int aligment, int horz, int vert)、配置を設定し、コンポーネントの水平間隔 horz と垂直間隔 vert を設定します。スーパークラス Container の setLayout() メソッドを使用して、コンポーネントのレイアウトを設定します。容器。たとえば、コード setLayout(new FlowLayout()) は、コンテナーの FlowLayout レイアウトを設定します。コンポーネントをコンテナに追加するメソッドは add(コンポーネント名) です。

2.BorderLayout レイアウト (JWindow、JFrame、JDialog のデフォルトのレイアウト)

BorderLayout のレイアウト戦略は、単純にコンテナ内のスペースを東、西、南、北に分割することです。「中央」には 5 つのエリアがあります。コンポーネントを追加するときは、コンポーネントを配置する領域を指定する必要があります。コンポーネントを 1 つの位置に配置します。複数のコンポーネントを特定の場所に追加する場合は、この場所に追加するコンポーネントを最初に別のコンテナに配置してから、そのコンテナをこの場所に追加する必要があります。

BorderLayout レイアウトの構築メソッドは次のとおりです:
(1) BorderLayout()。デフォルトの BorderLayout レイアウトを生成します。デフォルトでは、ギャップはありません。
(2) BorderLayout(int horz,int vert)、コンポーネント間の水平方向と垂直方向の間隔を設定します。

BorderLayoutのレイアウト戦略の設定メソッドはsetLayout(new BorderLayout())です。コンポーネントをコンテナに追加するメソッドは add(コンポーネント名, 位置) です。コンポーネントを追加するときに位置を指定しない場合、デフォルトの位置は「中間」です。

BorderLayout レイアウトは、JWindow、JFrame、および JDialog のデフォルトのレイアウトです。
【例 11-5】アプリケーションには 5 つのラベルがあり、ウィンドウの東、西、南、北、中央の領域に配置されます。

import javax.swing.*;import java.awt.*;
public class J505{
  public static void main(String[]args){
    JLabel label1,label2,label3,label4,label5;
    JFrame mw=new JFrame("我是一个窗口");//创建一个窗口容器对象
    mw.setSize(250,200);
    Container con=mw.getContentPane();
    con.setLayout(new BorderLayout());
    label1=new JLabel("东标签");//默认左对齐
    label2=new JLabel("南标签",JLabel.CENTER);
    label3=new JLabel("西标签");
    label4=new JLabel("北标签",JLabel.CENTER);
    label5=new JLabel("中标签",JLabel.CENTER);
    con.add(label1,"East");
    con.add(label2,"South");
    con.add(label3,"West");
    con.add(label4,"North");
    con.add(label5,"Center");
    mw.setVisible(true);
  }
}
ログイン後にコピー

3. GridLayout レイアウト

GridLayout レイアウトは、コンテナを行と列のグリッドに分割し、行と列の数はプログラムによって制御され、コンポーネントはグリッドの小さなグリッドに配置されます。 GridLayout レイアウトは、比較的正確なコンポーネントの配置が特徴です。 GridLayout レイアウト内の各グリッドは同じ形状とサイズであるため、コンテナーに配置されるコンポーネントも同じサイズのままである必要があります。

GridLayout レイアウトの構築メソッドは次のとおりです:
(1) GridLayout()。単一列の GridLayout レイアウトを生成します。デフォルトでは、ギャップはありません。
(2) GridLayout(int row,int col)、行 row と列col で GridLayout レイアウトを設定します。
(3) GridLayout(int row,int col,int horz,int vert) は、レイアウトの行数と列数、およびコンポーネントの水平方向と垂直方向の間隔を設定します。

GridLayout のレイアウトは、配置されたコンポーネントの数が制限を超えると自動的に列が追加され、逆にコンポーネントが少なすぎる場合は列の数は変更されません。コンポーネントは行の優先順位に従って配置されます (列はコンポーネントに基づいて自動的に増加または減少します)。 GridLayout レイアウトの各グリッドにはコンポーネントを入力する必要があります。グリッドを空白にしたい場合は、空白のラベルに置き換えることができます (add(new Label()))。

[例 11-6] アプレットは、最初にいくつかのボタンとラベルを JPanel に配置し、次に JPanel を JScrollPane に配置し、最後にプログラムによって作成された JScrollPane をアプレットのウィンドウに配置します。および垂直スクロール バーの場合、スクロール パネルの表示範囲がパネルの実際の要件よりも小さい場合、スクロール バーのスライダーを移動して、本来表示範囲内にないパネルの領域を表示できます。

import java.applet.*;
import javax.swing.*;
import java.awt.*;
class MyWindow extends JFrame{
  public MyWindow(int w,int h){
    setTitle("滚动面板实例");
    Container con=getContentPane();
    con.setPreferredSize(new Dimension(w,h));
    con.setLayout(new BorderLayout());
    JPanel p=new JPanel();
    p.setLayout(new GridLayout(6,6));
    for (int i=0;i<6;i++){
      p.add(new JLabel());
      for(int j=1;j<=2;j++){
        p.add(new JButton("按钮"+(2*i+j)));
        p.add(new JLabel("标签"+(2*i+j)));
      }
      p.add(new JLabel());
    }
    p.setBackground(Color.blue);
    p.setPreferredSize(new Dimension(w+60,h+60));
    JScrollPane ScrollPane=new JScrollPane(p);
    ScrollPane.setPreferredSize(new Dimension(w-60,h-60));
    add(ScrollPane,BorderLayout.CENTER);//小程序添加滚动面板
    setVisible(true); pack();
  }
}
class ScrollPane extends JScrollPane{
  public ScrollPane(Component p){
    super(p);
    setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  }
}
public class J506 extends Applet{
  MyWindow myWindow;
  public void init(){
    myWindow=new MyWindow(400,350);
  }
}
ログイン後にコピー

GridLayout布局要求所有组件的大小保持一致,这可能会使用界面外观不够美观。一个补救的办法是让一些小组件合并放在一个容器中,然后把这个容器作为组件,再放入到GridLayout布局中。这就是前面所说的容器嵌套。例如,容器A使用GridLayout布局,将容器均分为网格;另有容器B和C各放入若干组件后,把B和C分别作为组件添加到容器A中。容器B和C也可以设置为GridLayout布局,把自己分为若干网格,也可以设置成其他布局。这样,从外观来看,各组件的大小就有了差异。

四.CardLayout布局

采用CardLayout布局的容器虽可容纳多个组件,但是多个组件拥有同一个显示空间,某一时刻只能显示一个组件。就像一叠扑克牌每次只能显示最上面的一张一样,这个显示的组件将占据容器的全部空间。CardLayout布局设计步骤如下:
先创建CardLayout布局对象。然后,使用setLayout()方法为容器设置布局。最的,调用容器的add()方法将组件加入容器。CardLayout布局策略加入组件的方法是:
add(组件代号,组件);
其中组件代号是字符串,是另给的,与组件名无关。

例如,以下代码为一个JPanel容器设定CardLayout布局:

CardLayout myCard = new CardLayout();//创建CardLayout布局对象
JPanel p = new JPanel();//创建Panel对象
p.setLayout(myCard);
ログイン後にコピー

用CardLayout类提供的方法显示某一组件的方式有两种:
(1) 使用show(容器名,组件代号)形式的代码,指定某个容器中的某个组件显示。例如,以下代码指定容器p的组件代号k,显示这个组件:
myCard.show(p,k);
(2) 按组件加入容器的顺序显示组件。

first(容器):例如,代码myCard.first(p);
last(容器):例如 , myCard.last(p);
next(容器):例如,myCard.next(p);
previous(容器):myCard.previous(p);

【例11-7】小应用程序使用CardLayout布局,面板容器p使用CardLayout布局策略设置10个标签组件。窗口设有4个按钮,分别负责显示p的第一个组件、最后一个组件、当前组件的前一个组件和当前的组件的最后一个组件。

import java.applet.*;import java.awt.*;
import java.awt.event.*;import javax.swing.*;
class MyPanel extends JPanel{
  int x;JLabel label1;
  MyPanel(int a){
    x=a;getSize();
    label1=new JLabel("我是第"+x+"个标签");add(label1);
  }
  public Dimension getPreferredSize(){
    return new Dimension(200,50);
  }
}
public class J507 extends Applet implements ActionListener{
  CardLayout mycard;MyPanel myPanel[];JPanel p;
  private void addButton(JPanel pan,String butName,ActionListener listener){
    JButton aButton=new JButton(butName);
    aButton.addActionListener(listener);
    pan.add(aButton);
  }
  public void init(){
    setLayout(new BorderLayout());//小程序的布局是边界布局
    mycard=new CardLayout();
    this.setSize(400,150);
    p=new JPanel();p.setLayout(mycard);//p的布局设置为卡片式布局
    myPanel=new MyPanel[10];
    for(int i=0;i<10;i++){
      myPanel[i]=new MyPanel(i+1);
      p.add("A"+i,myPanel[i]);
    }
    JPanel p2=new JPanel();
    addButton(p2,"第一个",this);
    addButton(p2,"最后一个",this);
    addButton(p2,"前一个",this);
    addButton(p2,"后一个",this);
    add(p,"Center"); add(p2,"South");
  }
  public void actionPerformed(ActionEvent e){
    if (e.getActionCommand().equals("第一个"))mycard.first(p);
    else if(e.getActionCommand().equals("最后一个"))mycard.last(p);
    else if(e.getActionCommand().equals("前一个"))mycard.previous(p);
    else if(e.getActionCommand().equals("后一个"))mycard.next(p);
  }
}
ログイン後にコピー

五.null布局与setBounds方法

 空布局就是把一个容器的布局设置为null布局。空布局采用setBounds()方法设置组件本身的大小和在容器中的位置:
    setBounds(int x,int y,int width,int height)
组件所占区域是一个矩形,参数x,y是组件的左上角在容器中的位置坐标;参数weight,height是组件的宽和高。空布局安置组件的办法分两个步骤:先使用add()方法身容器添加组件。然后调用setBounds()方法设置组件在容器中的位置和组件本身的大小。与组件相关的其他方法:

1.getSize().width,
2.getSize().height
3.setVgap(ing vgap)
4.setHgap(int hgap);

更多java图形界面之布局设计相关文章请关注PHP中文网!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)