Java Swing : JScrollPane containing JTextArea filled with text gets very small when moved to 2nd monitor

标签 java swing jscrollpane

我有一个 Java Swing GUI,它由一些包含 JTextAreas 的 JScrollPanes 组成,这些 JTextAreas 会填充数据以便出现滚动条。滚动条出现后,当我将窗口移动到我的第二台显示器时,JScrollPane 变得非常小,以至于我无法再看到它包含的文本。

例子:

这是我的主显示器上的窗口,其中 JScrollPane 充满了文本: enter image description here

这是我用文本填充并将其移动到第二台显示器后的窗口: enter image description here

这是一个演示问题的小示例程序:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class Main extends JFrame {
    public Main() {
        Test theGui = new Test();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(true);
        add(theGui);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Main();
            }
        });
    }
}

class Test extends JPanel {
    private static final int PADDING = 3;
    private JLabel label;
    private JTextArea textarea;
    private JScrollPane scrollpane;
    private GridBagConstraints gbc;

    public Test() {
        super(new GridBagLayout());
        label = new JLabel("Fill this text box with text so the scrollbars appear, then move the window to 2nd monitor:");
        textarea = new JTextArea(10, 40);
        scrollpane = new JScrollPane(textarea);

        gbc = new GridBagConstraints();
        gbc.gridheight = 1;
        gbc.insets = new Insets(PADDING, PADDING, PADDING, PADDING);
        gbc.anchor = GridBagConstraints.LINE_START;
        gbc.fill = GridBagConstraints.BOTH;

        gbc.gridwidth = 4;
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(label, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        add(scrollpane, gbc);

    }
}

请注意,只有当 JScrollPane 移动到另一个监视器时,它才会变得非常小,因为它充满了文本。如果其中没有文字,它似乎会保持正确的大小。

我的问题是,当我将窗口移至第二台显示器时,如何防止 JScrollPane 变得非常小?

最佳答案

当组件的可用空间小于组件 preferredSize 时,

GridBagLayout 将恢复为组件 minimumSize 属性。

例如,您可以使用 GridBagConstraintsweightx/weighty 属性来覆盖它。

gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
add(scrollpane, gbc);

关于Java Swing : JScrollPane containing JTextArea filled with text gets very small when moved to 2nd monitor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403710/

相关文章:

java - 我怎样才能用Java解析格式

java - 组合多个graphics2d 复合 Material ?

java - 如何从匿名 ActionListener 访问 JFrame 以在框架中添加面板?

java - TextArea Swing与JavaFX选择范围区别

java - 如何在空布局中添加滚动条?

java - 调整父 JFrame 大小时调整子面板大小

java - 如何对indexedEmbedded中的字段进行排序

java - 监听SQS队列时org.springframework.core.task.TaskRejectedException?

java - 检查线程是否需要 EDT?

java - 当文本超出窗口宽度时,JScrollbar 不会激活