Jas*_*n S 5 java swing layout-manager
我正在寻找一个LayoutManager允许我在一个容器(例如JPanel)中显示一组组件的列,大致如下.
这是一个显示13个组件的示例(低科技文本显示).如果它们可以放在3列中,它们看起来像这样:
Foo1 Foo6 Foo11
Foo2 Foo7 Foo12
Foo3 Foo8 Foo13
Foo4 Foo9
Foo5 Foo10
Run Code Online (Sandbox Code Playgroud)
如果它太宽,它们看起来像这样:
Foo1 Foo8
Foo2 Foo9
Foo3 Foo10
Foo4 Foo11
Foo5 Foo12
Foo6 Foo13
Foo7
Run Code Online (Sandbox Code Playgroud)
如果它太宽,它们看起来像这样:
Foo1
Foo2
Foo3
Foo4
Foo5
Foo6
Foo7
Foo8
Foo9
Foo10
Foo11
Foo12
Foo13
Run Code Online (Sandbox Code Playgroud)
是否有可以使用的预先存在的LayoutManager或子类来执行此类操作?
编辑:这非常接近关于垂直布局的另一个问题,但是该布局将组件高度作为约束,并且我的组件宽度是约束.
您可能想查看 GribBagLayout http://download.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
通过了解网格袋布局的大小,您可以设置特定行中的组件数量。
但如果我没记错的话,网格布局不应该完全按照你想要的方式做。
让我们使用简单的标签。如果标签的尺寸*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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4097 次 |
| 最近记录: |