2013-10-02 5 views
0

Я написал пример приложения, состоящего из JTextPane и кнопки, которая печатает содержимое текстовой панели. Тип содержимого текстовой области установлен в «text/html».Запретить HTML JTextPane от форматирования ввода текста

Когда я ввожу текст и распечатываю его на консоль, текст автоматически завернут.

Например, если следующий вход:

Watercress shallot radish chickweed bitterleaf bush tomato salad garlic beet greens black-eyed pea green bean salsify bell pepper. Catsear celery green bean broccoli rabe spring onion tatsoi prairie turnip wattle seed cucumber burdock. Chickweed cucumber chickpea bush tomato wakame taro fava bean arugula catsear azuki bean. 

Выход выходит как таковой

Watercress shallot radish chickweed bitterleaf bush tomato salad garlic 
beet greens black-eyed pea green bean salsify bell pepper. Catsear celery 
green bean broccoli rabe spring onion tatsoi prairie turnip wattle seed 
cucumber burdock. Chickweed cucumber chickpea bush tomato wakame taro fava 
bean arugula catsear azuki bean. 

Есть ли способ, чтобы сохранить формат входного текста? Я планирую хранить вход в базе данных, поэтому я заменяю символы новой строки <br>, но текстовая панель автоматически вставляет свои собственные новые строки.

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

Вот код для образца. Вы должны иметь возможность просто компилировать и запускать его.

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextPane; 

public class TextPaneTest extends JFrame { 

    private JTextPane textPane = null; 

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

    public TextPaneTest() { 

     // Main panel 
     JPanel panel = new JPanel(); 
     panel.setLayout(new BorderLayout()); 

     // Panel holding text 
     JPanel textPanel = new JPanel(); 
     textPanel.setLayout(new BorderLayout()); 

     // Text pane 
     textPane = new JTextPane(); 
     textPane.setContentType("text/html"); 

     // Button 
     JButton button = new JButton(); 
     button.setText("Print Text"); 
     button.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       String text = textPane.getText(); 
       text = text.substring(text.indexOf("<body>") + 6, text.indexOf("</body>")); 
       System.out.println(text); 
      } 
     }); 

     textPanel.add(textPane); 
     panel.add(textPanel, BorderLayout.CENTER); 
     panel.add(button, BorderLayout.SOUTH); 

     // Add everything to the frame 
     this.add(panel); 
     this.setSize(1000, 500); 
     setVisible(true); 
    } 
} 
+0

Итак, если вы намерены вставлять новые строки программным способом, почему бы не использовать 'JTextArea' или' JTextPane' значение 'text/plain'? –

+0

Извините, если есть какая-то путаница. Новые строки не вводятся программно; любой, который вставлен пользователем, преобразуется в '
' 's. – MxyL

+0

* «Новые строки не вставляются программно; ..» * ОК, но это не меняет мой совет. Просто поменяйте новые строки, вводимые пользователем, для того, что действительно необходимо. –

ответ

1
textPane.setText("<html><head><style type='text/css'>" 
      + "body{white-space:nowrap;}" 
      + "</style></head><body>"); 

    JScrollPane scrollPane = new JScrollPane(textPane); 
    scrollPane.setHorizontalScrollBarPolicy(
     ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    //Remove: textPanel.add(textPane); 
    textPanel.add(scrollPane); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

HTML, CSS удаляет обертку. Остается горизонтальная полоса прокрутки. Кроме того, вы, вероятно, можете делать с EXIT_ON_CLOSE, особенно при работе в среде IDE.

Смежные вопросы