Java 的布局管理器有一个烦人的问题。我遇到以下情况:在一个面板 A 中有另外两个面板 B 具有绝对布局,而 C 具有 FlowLayout。 B 是高度自定义的,并且具有通过 setPreferredSize
设置的固定大小。 C 应具有与 B 相同的固定宽度,但高度可变,具体取决于流程中添加的组件数量。生成的 A 应该有固定的宽度和 A.height + B.height
作为高度——至少这是我想要的。
但是我得到的是面板 A 的宽度根本不固定(即使我设置了它的首选大小),并且面板 C 中的内容不会自动换行,而是显示在一长行中。当然,这也会使 B 的宽度超出应有的宽度。
我该怎么做才能解决这个问题?有没有更好的布局,或者我是否必须使用绝对布局来模拟所有布局?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Test extends JPanel
{
public Test ()
{
this.setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) );
JPanel top = new JPanel( null );
top.setBackground( Color.GREEN );
top.setPreferredSize( new Dimension( 200, 20 ) );
JPanel flowPanel = new JPanel( new FlowLayout( FlowLayout.LEFT, 2, 2 ) );
this.add( top );
this.add( flowPanel );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
flowPanel.add( new JButton( "x" ) );
}
}
最佳答案
Wrap Layout应该有帮助。
关于java - 带流的 JPanel 中的固定宽度、可变高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651206/