0

我尝试了 2 个小时来制作带有滚动条的 JEditorPane,但我即将放弃!

这是我的代码的一部分:

    JEditorPane editorPane = new JEditorPane();
    URL helpURL = GUIMain.class
            .getResource("/resources/einleitungstext1.html");
    this.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    try {
        editorPane.setPage(helpURL);
    } catch (IOException e) {
        System.err.println("Attempted to read a bad URL: " + helpURL);
    }
    editorPane.setEditable(false);
    JScrollPane editorScrollPane = new JScrollPane(editorPane);
    editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    editorScrollPane.setMinimumSize(new Dimension(100, 100));
    editorScrollPane.setPreferredSize(new Dimension(main.screenWidth-200, main.screenHeight-200));
    c.gridx = 0;
    c.gridy = 0;
    this.add(editorScrollPane, c);
    this.setVisible(true);

当我这样做时 this.add(editorScrollPane,c) 框架是空的,但是当我这样做时 this.add(editorPane, c) 面板正在显示。即使使用 this.add(new JLabel("test"),c) 框架也是空的。

我的错误在哪里?

谢谢

PS我不能发布整个代码,因为它很大。

4

2 回答 2

3
  1. 编辑器窗格在后台加载它的内容,这可能意味着当容器准备好布局时,内容尚未加载
  2. 您正在使用的布局管理器和您提供的约束意味着它将使用滚动窗格的首选大小,这可能不足以满足内容的需要(这是滚动窗格的功能,这是方式它是设计的)。

要么提供限制以GridBagLayout鼓励使用更多可用空间,要么提供不依赖于组件首选大小的布局管理器(如BorderLayout

在此处输入图像描述

public class TestLayout18 {

    public static void main(String[] args) {
        new TestLayout18();
    }

    public TestLayout18() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());

                JEditorPane editorPane = new JEditorPane();
                try {
                    editorPane.setPage(new URL("http://docs.oracle.com/javase/6/docs/api/javax/swing/JScrollPane.html"));
                } catch (IOException e) {
                    System.err.println("Attempted to read a bad URL");
                }
                editorPane.setEditable(false);
                JScrollPane editorScrollPane = new JScrollPane(editorPane);
                frame.add(editorScrollPane);

                frame.setSize(400, 400);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}
于 2013-01-07T22:42:05.883 回答
0

在 editorPane 上设置首选大小。scrollPane 正在寻找它的视口大小。您可能还想在框架上设置最小尺寸。

于 2013-01-07T20:53:36.820 回答