Почему моя рамка пуста?

я пытался в течение 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) кадр пуст.

Где моя ошибка?

Спасибо

P.S. Я не могу опубликовать весь код, потому что он довольно большой.


person wederer    schedule 07.01.2013    source источник
comment
Это в каком классе? От чего он наследует?   -  person matts    schedule 08.01.2013


Ответы (2)


  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);
            }
        });
    }
}
person MadProgrammer    schedule 07.01.2013

Установите предпочтительный размер в editorPane. ScrollPane ищет это по размеру области просмотра. Вы также можете установить минимальный размер кадра.

person Alan Yackel    schedule 07.01.2013
comment
Когда я устанавливаю предпочтительный размер в EditorPane, ничего не меняется. Кадр в любом случае максимизируется. У вас есть другая идея? - person wederer; 08.01.2013
comment
Окно просмотра, как правило, не будет заботиться о предпочтительном размере своего содержимого, в этом суть, вместо этого оно будет использовать (если доступно) информацию, предоставленную интерфейсом Scrollable. Если вы ДЕЙСТВИТЕЛЬНО хотите следовать этой мысли, вам лучше создать специальную версию редактора, которая реализует интерфейс Scrollable и вместо этого возвращает соответствующее значение из Scrollable#getPreferredScrollableViewportSize, но это большая работа, когда несколько настроек или другой менеджер компоновки решит проблемы - person MadProgrammer; 08.01.2013