Java Swing:当移动到第二台显示器时,包含填充有文本的 JTextArea 的 JScrollPane 变得非常小
Java Swing: JScrollPane containing JTextArea filled with text gets very small when moved to 2nd monitor
我有一个 Java Swing GUI,它由一些包含 JTextAreas 的 JScrollPanes 组成,这些 JTextAreas 会填充数据以便出现滚动条。滚动条出现后,当我将 window 移动到我的第二台显示器时,JScrollPane 变得非常小,以至于我再也看不到它包含的文本。
示例:
这是我主显示器上的 window,其中 JScrollPane 填充有文本:
这是 window 在我用文本填充它并将其移动到第二台显示器之后:
这是一个演示问题的小示例程序:
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 充满文本时移动到另一个监视器时,它才会变得很小。如果里面没有文字,它似乎保持正确的大小。
我的问题是,当我将 window 移动到我的第二台显示器时,如何防止 JScrollPane 变得非常小?
GridBagLayout
将恢复为组件 minimumSize
属性,当组件的可用 space 小于组件 preferredSize
.[=17 时=]
例如,您可以使用 GridBagConstraints
、weightx
/weighty
属性覆盖它。
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
add(scrollpane, gbc);
我有一个 Java Swing GUI,它由一些包含 JTextAreas 的 JScrollPanes 组成,这些 JTextAreas 会填充数据以便出现滚动条。滚动条出现后,当我将 window 移动到我的第二台显示器时,JScrollPane 变得非常小,以至于我再也看不到它包含的文本。
示例:
这是我主显示器上的 window,其中 JScrollPane 填充有文本:
这是 window 在我用文本填充它并将其移动到第二台显示器之后:
这是一个演示问题的小示例程序:
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 充满文本时移动到另一个监视器时,它才会变得很小。如果里面没有文字,它似乎保持正确的大小。
我的问题是,当我将 window 移动到我的第二台显示器时,如何防止 JScrollPane 变得非常小?
GridBagLayout
将恢复为组件 minimumSize
属性,当组件的可用 space 小于组件 preferredSize
.[=17 时=]
例如,您可以使用 GridBagConstraints
、weightx
/weighty
属性覆盖它。
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
add(scrollpane, gbc);