2015-01-06 2 views
0

Первого выпуска: Прикрепление к конкретной строкеНесколько вопросов добавляющих к JTextPane

Я пытаюсь добавить к конкретной строке в JTextPane с использованием методы getStyledDocument. Например:

 try { 
     displayResults.getStyledDocument().insertString(5,"Hello",null); 
    } catch (BadLocationException ex) { 
     Logger.getLogger(ShapeData.class.getName()).log(Level.SEVERE, null, ex); 
    } 

кажется, что смещение 5 только смещает его 5 пробелов по горизонтали. Есть ли другой метод, отличный от insertString, который может достичь того, что я пытаюсь сделать? Это также становится проблемой, когда я пытаюсь выводить строки из таблицы Excel в нисходящем направлении. Я прибегал к добавлению "\n" до того, как определенная строка, которую я хочу вывести.

 try { 
     displayResults.getStyledDocument().insertString(5,"\n + Hello",null); 
    } catch (BadLocationException ex) { 
     Logger.getLogger(ShapeData.class.getName()).log(Level.SEVERE, null, ex); 
    } 

Второй выпуск: Добавляя с подстрочным использованием HTML кода

Некоторые из моих переменных из входного файл Excel имеет индексы, так что я пытаюсь вывести их в JTextPane с использованием синтаксиса HTML. Я попытался использовать метод .setContentType("text/html") дважды. Первый был до получения styledDocument. Без приведенного выше утверждения try-catch работает setContentType("text/html"), но как только я попытаюсь реализовать вышеприведенный выше пример try-catch, тип контента возвращается к умолчанию.

Я нашел следующий вопрос на StackOverflow, чтобы быть полезным:

JTextPane append HTML string

Я пытался использовать решение в вышеуказанной ссылке таким образом:

HTMLDocument doc=(HTMLDocument) displayResults.getStyledDocument(); 
    try { 
     doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()),s1); 
    } catch (BadLocationException ex) { 
     Logger.getLogger(ShapeData.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(ShapeData.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    } 

Однако я получаю ошибка для этого, которая говорит мне:

Exception in thread "AWT-EventQueue-1" java.lang.ClassCastException: javax.swing.text.DefaultStyledDocument cannot be cast to javax.swing.text.html.HTMLDocument

MY ПОЛНЫЙ КОД

private void fullShapeTypesValueChanged(javax.swing.event.ListSelectionEvent evt) {            

StoreData d = new StoreData(); // Class of data 
SubstringGenerator gen = new SubstringGenerator(); 

    labels = d.getLabels(); // Get the headers of each excel column 

    for (int i = 76; i >= 0 ; i--){ 


    int character = 0; // variable to help determine the number of characters of the label 

    String s1 = ""; 
    String s2 = ""; 
    String s3 = ""; 

    character = labels[i].length(); 

    /* Any characters after the first one 
    * will be converted to subscript using HTML. 
    * second variable in gen.subscriptGen(a, b) --> "b" will be converted to 
    * <html><sub>b</sub></html> 
    */ 

    switch(character){ 
      case 1: 
       s2 = labels[i]; 
       s1 = s2; 
       break; 
      case 2: 
      case 3: 
      case 4: 
      case 5: 
       s3 = gen.subscriptGen(s2, labels[i].substring(1)); 
       s1 = s3; 
       break;   
     } 

    HTMLDocument doc=(HTMLDocument) displayResults.getStyledDocument(); 
    try { 
     doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()),s1); 
    } catch (BadLocationException ex) { 
     Logger.getLogger(ShapeData.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(ShapeData.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    } 
displayResults.setContentType("text/html"); 
}    

ответ

2

Для первого класса используют вопрос javax.swing.Utilities, который имеет метод

/** 
* Determines the starting row model position of the row that contains 
* the specified model position. The component given must have a 
* size to compute the result. If the component doesn't have a size 
* a value of -1 will be returned. 
* 
* @param c the editor 
* @param offs the offset in the document >= 0 
* @return the position >= 0 if the request can be computed, otherwise 
* a value of -1 will be returned. 
* @exception BadLocationException if the offset is out of range 
*/ 
public static final int getRowStart(JTextComponent c, int offs) 

, чтобы найти требуемое смещение для заданного числа строк. Затем используйте начальную строку start в insertString()

Для второй проблемы, очевидно, где-то вы сбросите набор редакторов, и это больше не HTMLEditorKit. Где это случается, я не могу предположить без вашего кода. Попытайтесь добавить еще один класс проверки getDocument(), чтобы найти, где и почему ваш EditorKit сбрасывается.

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