我有以下课程
public class Demo {
private JFrame mainFrame;
static public Color BGCOLOUR1 = new Color(240, 240, 240);
public Demo() {
mainFrame = new JFrame("Demo");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLayout(new BorderLayout());
mainFrame.setSize(900, 800);
JPanel centralPanel = new JPanel();
centralPanel.setOpaque(true);
centralPanel.setBackground(BGCOLOUR1);
centralPanel.setLayout(new GridBagLayout());
centralPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20),
BorderFactory.createTitledBorder("Panel")));
JPanel insidePanel = new JPanel();
insidePanel.setOpaque(true);
insidePanel.setBackground(BGCOLOUR1);
insidePanel.setLayout(new BorderLayout());
insidePanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("Inside panel"),
BorderFactory.createEmptyBorder(10, 10, 10, 10)));
JTextArea insidePanelText = new JTextArea(6, 50);
insidePanelText.setLineWrap(true);
insidePanel.add(insidePanelText);
centralPanel.add(insidePanel, new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.NORTH,
GridBagConstraints.HORIZONTAL, new Insets(10, 10, 10, 10), 0, 0));
JScrollPane scrollPane = new JScrollPane(centralPanel);
mainFrame.add(scrollPane);
}
当我将GridBagConstraints锚点设置为centralPanel
时,为什么内部面板位于NORTH
(垂直)的中心?我希望它位于顶部。
此外,如果我在centralPanel
中添加JScrollPane
,然后根据示例将mainFrame
添加到pack
,我可以将应用程序大小调整得更好,但只要我调整大小它更小(即使它仍然比我最初开始时还大),会出现一个滚动条。我怎样才能防止这种情况发生?
编辑:为了说明滚动问题(当我拍摄这些屏幕时,我wrap_content
编辑了框架:
当我启动应用程序时,它没有滚动条
我将窗口调整得更大,然后再缩小。只要我缩小,就会出现滚动条。
答案 0 :(得分:2)
就GridBagLayout
而言,根据您提供的属性,它已被布置到单元格的NORTH
。
GridBagLayout
主要用于组件的首选大小,并计算每个组件在父容器中心周围的位置。
如果,而不是:
new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.NORTH,
GridBagConstraints.HORIZONTAL, new Insets(10, 10, 10, 10), 0, 0)
我用的是:
new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.NORTH,
GridBagConstraints.HORIZONTAL, new Insets(10, 10, 10, 10), 0, 0)
它会产生预期的结果。
基本上,通过使用gridy
并将其设置为1
,我们要求GridBagLayout
为此单元格提供所有剩余的垂直空间,但因为我们'如果没有填充单元格,内容将被推送到单元格的NORTH
另外,如果我在将JSParollPane中的centralPanel添加到mainFrame之前根据示例我可以将应用程序的大小调整得更好,但是一旦我将其调整得更小(即使它仍然比我原来的大开始吧)出现一个滚动条。我该如何防止这种情况发生?
我无法真正复制这个特定的问题,我可以使用pack
或setSize
并将窗口调整为较小的尺寸,以及#34;打包"大小和滚动条会出现,但一旦我调整窗口大小超过"打包"滚动条的大小会消失