Защо рамката ми е празна?

Опитвах се в продължение на 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

Задайте предпочитан размер в редакторския панел. ScrollPane търси това за размера на прозореца си за изглед. Може да искате да зададете и минимален размер на рамката.

person Alan Yackel    schedule 07.01.2013
comment
Когато задам предпочитан размер в редакторския панел, нищо не се променя. Рамката така или иначе е максимизирана. Имате ли друга идея? - person wederer; 08.01.2013
comment
Прозорецът за изглед обикновено няма да се интересува от предпочитания размер на съдържанието си, това е смисълът, вместо това ще използва (ако е налична) информация, предоставена от интерфейса Scrollable. Ако НАИСТИНА искате да следвате този ред на мисли, по-добре е да създадете персонализирана версия на редактора, която внедрява интерфейса Scrollable и вместо това да връща подходяща стойност от Scrollable#getPreferredScrollableViewportSize - но това е много работа, когато няколко ощипвания на или различен мениджър на оформлението би решил проблемите - person MadProgrammer; 08.01.2013