切换水龙头后保持textArea大小

时间:2017-11-28 12:05:16

标签: java swing user-interface scroll textarea

我有一个简单的GUI,有多个标签,如: GUI

问题是,在将文本区域填充到底部(filled console)并切换标签后 - 它会完全打破标记(bottom-broken

以下是textArea和Constraints的代码示例

JTextArea textArea = new JTextArea();
        textArea.setEditable(false);
        tabbedPanelOne.add(textArea);
        CustomAppender.setTextArea(textArea);

        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.CENTER;
        gbc.gridy++;
        gbc.gridx = 0;
        gbc.gridwidth = 5;
        gbc.weightx = 1.0;
        gbc.weighty = 10.0;

        Font font = textArea.getFont();
        float size = font.getSize() - 4.0f;
        textArea.setFont(font.deriveFont(size));

        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        //textArea.setPreferredSize(new Dimension(500, 300));
        layout.setConstraints(textArea, gbc);

        /*
         * Scrolls for TextArea
         */
        JScrollPane scroll = new JScrollPane (textArea,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        tabbedPanelOne.add(scroll);
        layout.setConstraints(scroll, gbc);

//textArea.setPreferredSize(new Dimension(500, 300));工作正常,但它会禁用垂直滚动条。

1 个答案:

答案 0 :(得分:0)

layout.setConstraints(textArea, gbc);

首先,在向滚动窗格中添加组件时,您永远不会尝试在组件上设置约束。 JScrollPane使用自己的自定义布局管理器,因此在将组件添加到滚动窗格的视口时,您不会执行任何特殊操作。

但是,最简单的解决方案是在添加到选项卡的面板上使用BorderLayout。类似的东西:

JPanel top = new JPanel();
top.add(...);
JTextArea textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane( textArea );
JPanel main = new JPanel( new BorderLayout() );
main.add(top, BorderLayout.PAGE_START);
main.add(scrollPane, BorderLayout.CENTER);

现在,滚动窗格将占用选项卡中的所有可用空间,并在需要时显示滚动条。