如何解决与JPanel的JFrame.pack类似
我有一个JPanel,我想设置其宽度,但让高度由其内容确定。包含的JPanel应该保持其大小。如果我在“内容”中放置多行文本,则它当然应该自动跨越更大的高度。如果所需的高度超过了容器的可用高度,则滚动条将是理想的选择(但这并不重要)。
这可能真的很简单,但是我只是想不通...
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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。