我有一个简单的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));
工作正常,但它会禁用垂直滚动条。
答案 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);
现在,滚动窗格将占用选项卡中的所有可用空间,并在需要时显示滚动条。