5

LayoutManager大まかに次のように、コンテナ (JPanel など) 内の一連のコンポーネントを列に表示できる を 探しています。

  • コンテナの幅は入力制約です。
  • コンテナーの推奨高さは幅の関数であり、次のいずれかです。
    • 複数の列に配置されている場合に、コンポーネントを幅に収めるのに必要な最小の高さ。
    • コンポーネントを 1 つの列に収めるのに必要な最小の高さ。
  • コンポーネントは、上から下、左から右の新聞コラムの順序で配置されます。

以下は、13 個のコンポーネントを示す例 (ローテク テキスト表示) です。3 列に収まる場合は、次のようになります。

Foo1    Foo6     Foo11   
Foo2    Foo7     Foo12
Foo3    Foo8     Foo13
Foo4    Foo9     
Foo5    Foo10

幅が広すぎる場合は、次のようになります。

Foo1    Foo8 
Foo2    Foo9  
Foo3    Foo10 
Foo4    Foo11 
Foo5    Foo12
Foo6    Foo13
Foo7    

幅が広すぎると、次のようになります。

Foo1     
Foo2      
Foo3     
Foo4     
Foo5    
Foo6    
Foo7    
Foo8
Foo9
Foo10
Foo11
Foo12
Foo13

このようなことを行うために使用またはサブクラス化できる既存の LayoutManager はありますか?


編集:これは垂直レイアウトに関するこの他の質問に非常に近いですが、そのレイアウトにはコンポーネントの高さが制約であり、私のコンポーネントの幅は制約です。

4

2 に答える 2

2

この種のレイアウトを許可するもう 1 つのコンポーネントはで、これには、「セルが垂直方向に続いて水平方向に流れる新聞スタイルのレイアウトを示す」JListが含まれています。必要に応じて、ここに記載されている適切な で十分な場合があります。VERTICAL_WRAPListCellRenderer

于 2011-06-11T01:29:52.507 に答える
1

GribBagLayout http://download.oracle.com/javase/tutorial/uiswing/layout/gridbag.htmlを調べることをお勧めします。

サイズを知っている gridbag レイアウトを使用すると、特定の行に配置するコンポーネントの数を設定できます。

しかし、私が間違っていなければ、gridlayout はあなたが望むことを正確に行うべきではありません。

シンプルなラベルを使用しましょう。ラベルのサイズ * 2 が幅よりも長い場合、行ごとに 1 つのラベルのみが表示されます。等々。

ここにそれをクリアする必要がある例があります

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class GridLayoutDemo implements ActionListener{
    JTextField j1;
    JTextField j2;
    JFrame f;
    public void show(){
        j1=new JTextField("x dimention");
        j2=new JTextField("y dimention");
        f=new JFrame();
        JPanel p=new JPanel();
        JLabel l2=new JLabel("abcdefghijklmnoqrstuvw");
        JLabel l1=new JLabel("abcdefghijklmnoqrstuvw");
        JLabel l3=new JLabel("abcdefghijklmnoqrstuvw");
        JLabel l4=new JLabel("abcdefghijklmnoqrstuvw");
        JButton b=new JButton("new size");
        b.addActionListener(this);

        p.add(l1);
        p.add(l2);
        p.add(l3);
        p.add(l4);
        p.add(j1);
        p.add(j2);
        p.add(b);
        f.setSize(400, 200);
        f.add(p);

        //f.pack();
        f.setVisible(true);

    }

    public static void main(String[] args){
        GridLayoutDemo g=new GridLayoutDemo();
        g.show();
    }
    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
        int x=Integer.parseInt(j1.getText());
        int y=Integer.parseInt(j2.getText());
        f.setSize(x,y);
        f.setVisible(true);

    }
}
于 2011-06-10T20:37:44.757 に答える