Исправление размера JEditorPane внутри JPanel

Это очень похоже на мой последний вопрос, но, делая это в JPanel, я пытаюсь отобразить JEditorPane внутри JPanel (фиксированный размер), который затем отображает строку текста HTML. (Это для того, чтобы я мог использовать макет карты и переключать панели с разными дисплеями). Я могу снова отобразить все, хотя кажется, что текст внутри строки HTML, которую я передаю в свою EditorPane, не обрезается и не переносится на новую строку. то есть он просто выходит за пределы экрана. Кажется, что метод setSize не имеет отношения к размеру панели?

Я делаю это приложение для экрана разного размера, поэтому важно, чтобы текст переносился на новые строки и соответствовал размеру экрана, а не убегал! Это работает, когда EditorPane находится непосредственно внутри JFrame, но не JPanel.

    JEditorPane pane = new JEditorPane();
    pane.setEditable(false);
    HTMLDocument htmlDoc = new HTMLDocument () ; 
    HTMLEditorKit editorKit = new HTMLEditorKit () ;
    pane.setEditorKit (editorKit) ; 
    pane.setSize(size);
    pane.setMinimumSize(size); 
    pane.setMaximumSize(size);
    pane.setOpaque(true);
    pane.setText("<b><font face=\"Arial\" size=\"50\" align=\"center\" > Unfortunately when I display this string it is too long and doesn't wrap to new line!</font></b>");
    bg.add(pane, BorderLayout.CENTER);

Большое спасибо Сэм


person Sam Palmer    schedule 27.10.2011    source источник
comment
взгляните на stackoverflow.com/questions/5462798/   -  person Mead3000    schedule 27.10.2011


Ответы (2)


..."Unfortunately when I display this string it is too long and doesn't wrap to new line!"

Установите ширину, используя стиль в элементе body, как в этот пример.

person Andrew Thompson    schedule 27.10.2011
comment
+1 ну это правильный ответ. По сути, мой был просто советом, почему бы не использовать setXXXSize. - person Heisenbug; 27.10.2011

Ну, вы никогда не должны использовать методы setXXXSize из своего приложения. См. этот поток.

Всего несколько соображений:

  1. Это зависит от позиционирования LayoutManager и установки правильного размера компонента, поэтому вам не следует указывать его явно
  2. Не все LayoutManagers заботятся о значениях PreferredSize компонентов.
  3. Даже если LayoutManager позаботится о предпочтительном размере, явно использовать эти методы неправильно.
  4. Если вы хотите явно использовать размер, делайте это только с родительским фреймом, содержащим все компоненты.
  5. Если LayoutManager размещает компоненты неправильно, используйте другой LayoutManager или реализуйте свой собственный.

Записка:

Я знаю, что в определенных ситуациях использование setXXXmethods работает нормально. Я делал это довольно долго, прежде чем понял, насколько это неправильно. Старайтесь избегать этого, иначе рано или поздно вам придется рефакторить много кода.

person Heisenbug    schedule 27.10.2011