当前位置: 首页 > 知识库问答 >
问题:

Java Swing:当移动到第二个监视器时,包含填充文本的JTextArea的JScrollPane变得非常小

浦琪
2023-03-14

我有一个JavaSwing GUI,它由一些JScrollPanes组成,这些JScrollPanes包含JTextArea,这些JScrollPanes填充了数据,以便出现滚动条。一旦滚动条出现,当我将窗口移动到第二个监视器时,JScrollPane变得非常小,因此我无法再看到它包含的文本。

例子:

下面是一个演示该问题的小示例程序:

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变得非常小?

共有1个答案

闽念
2023-03-14

当组件的可用空间小于组件的首选大小时,GridBagLayout将恢复为组件的最小大小属性。

例如,您可以通过使用GridBagConstraints、weightx属性来覆盖它。

gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
add(scrollpane, gbc);
 类似资料:
  • 我正在尝试设置一个视图的动画,并在一些DP被滚动后隐藏它,我把一切都做得很好,但问题是,当你在应该触发动画的Y值之前或之后缓慢滚动时,它会弹得很厉害。 我认为轻弹是因为我必须将其可见性设置为Gone,并将其他视图更新为match_parent,它不会仅与TraslationY一起工作: 我试图将布局设置为相对,并将2视为匹配父对象,以查看是否可以避免可见性更改,但没有成功。。。 我已经实现了Goo

  • 问题内容: 如何将轮询线程传递给另一个线程进行处理。程序执行在具有主方法和线程池的控制器类中: 主类控制器 具有轮询类的线程的方法 具有proc类的线程的方法 轮询类和控制器类 我的任务和问题是: 1.控制器应同时处理轮询器和处理器线程,并且应仅调用轮询器和处理器线程 2.现在我的问题是如何使轮询线程等待3秒并并行通知处理器。 我得到如下错误: 这里如何实现异步处理? 问题答案: 你需要阅读的东西

  • 问题内容: Java中的Monitor是否不限制对实例变量的访问,而不仅限于对已声明为 同步 的方法或在 同步 语句中进行代码访问? 我创建了两个线程,invokes 方法,该方法声明为已 同步, 而invokes 方法,该方法未声明为已同步。两者都调用共享对象上的方法。 可以在对象的 监视器 或 锁 仍由持有者的情况下修改对象的实例变量。 Java中的监视器是否不限制对实例变量的访问,而不仅限于

  • 我有一个JScrollPane,其中包含一个JPanel,该JPanel包含一组JPanels。 集合大小可以更改,这就是为什么我把它放在JScrollPane中的原因。 由于某种原因,无论我做什么,旋钮都不会出现在卷轴上。 正如您所看到的,主JPanel(预览)确实有一个布局。我读到如果布局为空,可能会发生这种情况。 有人知道怎么解决这个吗? null 这是我的代码:

  • 我制作了一个显示数据库的GUI JTable。我在尺寸上有一个问题。 如何使JTable的列填充JScrollPane?例如,如果一个表中有很多列,那么它只需保持它们的默认大小并让它们滚动。 如果SQL JTable确实需要滚动,那么我只想让它保持这样,这样它就需要滚动。 这是我制作JTable的代码: