2016-11-09 8 views
2

Она начинается показ, как это:Как я могу показать этот JEditorPane так, как я хочу?

https://i.stack.imgur.com/Eztip.png

Тогда, как и следовало ожидать, когда вы заполняете его с текстом за пределами нижней границы это выглядит следующим образом:

https://i.stack.imgur.com/wPbbv.png

Но текст тропы со стороны немного, что определенно имеет какое-то отношение к горизонтальной полосе прокрутки, которую он активирует, но выглядит очень странно. Итак, как я могу отключить горизонтальную полосу прокрутки и чистое текстовое отображение, если оно немного не сдвинулось вправо?

JEditorPane editorPane = new JEditorPane(); 
    scrollPane.setViewportView(editorPane); 
    editorPane.setLineWrap(true); 

editorPane.setLineWrap (true); не работает, он говорит: «Метод setLineWrap (boolean) не определен для типа JEditorPane« Если есть способ использовать HTML в JTextArea, скажите мне; но я не думаю, что это сработает. Мне нужно иметь возможность добавлять HTML позже.

Полный код:

import java.awt.EventQueue; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 

public class MainGUI { 

private JFrame frame; 
private JTextField textField; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       MainGUI window = new MainGUI(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public MainGUI() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
// frame.setLocationRelativeTo(null); 
    frame.setBounds(500, 200, /*W*/600, /*H*/435); 
// frame.setSize(/*W*/600, /*H*/435); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JScrollPane scrollPane = new JScrollPane(); 
    scrollPane.setBounds(10, 11, 564, 337); 
    frame.getContentPane().add(scrollPane); 

    JEditorPane editorPane = new JEditorPane(); 
    scrollPane.setViewportView(editorPane); 

    textField = new JTextField(); 
    textField.setBounds(10, 365, 564, 20); 
    frame.getContentPane().add(textField); 
    textField.setColumns(10); 
} 

}

+1

Проверьте это http://stackoverflow.com/questions/14074549/text-goes-outside-jtextarea. Вероятно, вы ищете 'setLineWrap (true)' на свой объект 'JTextArea()'. Линейный перенос означает, что слова перейдут на новую строку, когда конец горизонтального пробела будет исчерпан. Тем не менее, это разделит слова посреди них и заполнит как можно больше белого пространства. 'setWrapStyleWord (true)' означает, что он не будет вырезать слова пополам при переносе на следующую строку. –

+0

Если это не дубликат, отредактируйте свой вопрос, чтобы включить [mcve], который показывает ваш пересмотренный подход. – trashgod

+0

Открыл вопрос, так как вы подтвердили, что вам нужно использовать JEditorPane для отображения HTML. Однако я сомневаюсь, что вы получите ответ, пока не опубликуете «MCVE». Это может быть просто проблемой JEditorPane, поскольку для нее очень неудовлетворительно иметь непрерывную строку данных, длина которой составляет тысячи строк. Вопрос, почему вы когда-либо показывали это с помощью HTML? – camickr

ответ

1

Если панель редактора содержит HTML, естественное поведение, чтобы обернуть, когда он попадает на максимальную ширину. Хитрость заключается в том, чтобы показать панели прокрутки, чтобы она не показывала горизонтальную полосу прокрутки, поэтому она предлагает компоненту вида ограничить размер любой ширины (черт хорошо), заданной представлением.

E.G. (фактический MCVE)

import java.awt.*; 
import javax.swing.*; 

public class MainGUI { 

    private JFrame frame; 
    private JTextField textField; 
    private String[] loremIpsum = { 
     "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ut nulla egestas arcu rhoncus molestie. Mauris eget consequat sem, a accumsan eros. Praesent sem massa, dignissim sit amet porta ut, interdum sit amet ligula. Pellentesque cursus odio vel vestibulum vulputate. Donec facilisis ex sed pellentesque laoreet. Praesent ut sem id lectus suscipit pulvinar. Mauris a eros dui. Nulla ultrices est eu lacinia sagittis. Vivamus ac erat sit amet dolor ultricies euismod. Curabitur condimentum in ante id mattis. Pellentesque non sagittis diam. Nulla dapibus lacus sagittis turpis vehicula, vitae eleifend odio euismod. Sed elementum facilisis nisl. Donec lectus nulla, rutrum ac sollicitudin pulvinar, tempus ut arcu. Maecenas ut vulputate purus. In luctus cursus magna sit amet facilisis.", 
     "Morbi vitae dictum enim, quis porttitor elit. Nam quis accumsan leo, id rhoncus tortor. Praesent tellus magna, ultrices quis nulla vel, fringilla ultricies purus. In hendrerit volutpat elit a posuere. Duis scelerisque, sapien eu faucibus eleifend, lectus lacus interdum diam, sed bibendum orci est ut urna. Quisque a sem iaculis ex aliquam tempor. In id dictum ex, non gravida lacus. Integer neque mauris, tristique eu ultrices quis, tristique pellentesque nunc. Donec egestas tristique dolor, ac sagittis ante elementum non.", 
     "Mauris sit amet ullamcorper erat. Nunc non condimentum augue. Vivamus et odio eget massa convallis vulputate nec ut lacus. Donec sapien dolor, facilisis sit amet venenatis sit amet, suscipit ut nisi. Praesent vitae lorem lacinia orci volutpat fermentum. Nullam dolor erat, facilisis vitae volutpat id, feugiat et augue. Nunc congue, lectus a vehicula lacinia, est libero volutpat quam, nec maximus ante mauris eu urna. Etiam nunc dolor, auctor et orci vitae, pulvinar pretium orci. Nam et est rhoncus, pharetra mauris id, condimentum leo. In fermentum non urna sed imperdiet. Cras sit amet nulla eget purus convallis accumsan. Donec dictum eget magna pulvinar scelerisque. Fusce efficitur nisl sed nibh vestibulum laoreet.", 
     "Morbi tincidunt eleifend nisl. Nullam libero massa, imperdiet vitae egestas eu, sodales ac lacus. Donec eu commodo dui. Suspendisse potenti. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean vel diam volutpat, gravida quam vitae, tristique dui. Cras aliquet gravida massa eget lobortis. Donec ullamcorper eu purus eget iaculis. Ut id leo erat. Etiam iaculis ante eu mi molestie suscipit.", 
     "Quisque dapibus consectetur mauris eu faucibus. Etiam ac varius odio. Nulla non elit velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus est leo, ultricies quis sem ut, euismod vestibulum augue. Donec auctor eu nisi a aliquam. Integer libero sapien, fringilla ac posuere ut, malesuada ut leo. Maecenas ut ante non arcu molestie gravida nec eu neque. Vivamus elit nisi, auctor at luctus eget, accumsan id dolor." 
    }; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MainGUI window = new MainGUI(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public MainGUI() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame("HTML in editor pane"); 
     frame.setLocationByPlatform(true); 
     //frame.setBounds(500, 200, /*W*/ 600, /*H*/ 435); this is guessing! 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     StringBuilder sb = new StringBuilder(
       "<html><body style='width: 400px;'>"); 
     for (String s : loremIpsum) { 
      sb.append("<p>"); 
      sb.append(s); 
     } 
     JEditorPane editorPane = new JEditorPane(); 
     editorPane.setContentType("text/html"); 
     editorPane.setText(sb.toString()); 
     JScrollPane scrollPane = new JScrollPane(
       editorPane, 
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       // this is an important line! 
       JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
     editorPane.setCaretPosition(0); 
     frame.getContentPane().add(scrollPane); 
     frame.pack(); 
     // it should be the correct size needed to display the content, 
     // but now let's make it half that height. 
     Dimension d = frame.getSize(); 
     d = new Dimension(d.width, d.height/2); 
     frame.setSize(d); 
    } 
} 
+0

Что это за текст? –

+0

@SamuelFinzhry Какой «текст» и написан кем? Процитируйте это (или, по крайней мере, часть его). –

+0

@AndrewThompson The Lorem ipsum dolor sit amet "gobbledegoop. –