java - 带流的 JPanel 中的固定宽度、可变高度

标签 java swing fixed-width layout-manager

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/

相关文章:

Java正则表达式选择字符串中的开始和结束引号

java - 将数据附加到 JTextArea 以进行运行模拟

java - JLabel 不透明和 alpha

java - 创建后按指定顺序设置 JTable 的列

python - 列规范不匹配,因此使用 pd.read_fwf 和使用 colspecs 读取错误的值

java - 按下 JButton 时 JFrame 不添加组件

java - 无法解析 WifiManager 类中的公共(public)方法 setFrequencyBand

python - Python 中的固定宽度整数类型(例如 uint32)

python - 将固定宽度、交替行文件缓慢解析为 pandas 数据帧

java - 如何从 AsyncTask 的类中获取 JsonArray