与JPanel的JFrame.pack类似

问题描述

我有一个JPanel,我想设置其宽度,但让高度由其内容确定。包含的JPanel应该保持其大小。如果我在“内容”中放置多行文本,则它当然应该自动跨越更大的高度。如果所需的高度超过了容器的可用高度,则滚动条将是理想的选择(但这并不重要)。

enter image description here

这可能真的很简单,但是我只是想不通...

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class JPanelContentSizedDemo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(JPanelContentSizedDemo::new);
    }

    JPanelContentSizedDemo() {
        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,300);
        frame.setResizable(false);
        frame.setLayout(null);

        // the containing panel
        JPanel panelContainer = new JPanel();
        panelContainer.setBorder(BorderFactory.createEmptyBorder(10,10,10));
        panelContainer.setBounds(50,50,300,200);
        panelContainer.setBackground(Color.RED);
        frame.add(panelContainer);
        
        // what to do...
        //panelContainer.setLayout(new BoxLayout(panelContainer,BoxLayout.Y_AXIS));
        panelContainer.setLayout(new BorderLayout());

        // the panel that I want to size to its content
        JPanel dialog = new JPanel(new BorderLayout());
        dialog.setBackground(Color.GREEN);
        dialog.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        dialog.add(new JLabel("This is some content!"));
        panelContainer.add(dialog);
        
        frame.setVisible(true);
    }
}

解决方法

这可能有效:

    // what to do...
    panelContainer.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 1.0;
    c.weighty = 1.0;
    c.anchor = GridBagConstraints.CENTER;
    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 1;
    c.gridheight = 1;

    ...

    panelContainer.add(dialog,c);

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...