2014-06-19 4 views
0

J'ai deux JTextPane et les ai tous configurés pour effectuer un défilement vertical, mais pour une raison quelconque, je ne suis pas convaincu qu'un seul fonctionne.Le défilement automatique de JTextPane ne fonctionne qu'une seule fois

Quelle pourrait être la raison?

JTextPane textA = new JTextPane(); 
    textA.setName(text); 
    textA.setContentType("text/html"); 
    DefaultCaret caret = (DefaultCaret)textA.getCaret(); 
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
    JScrollPane filler = new JScrollPane (textA, 
    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 

    JTextPane textB = new JTextPane(); 
    textB.setName(text + "_T"); 
    textB.setFont(textA.getFont()); 
    DefaultCaret caret_T = (DefaultCaret)textB.getCaret(); 
    caret_T.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
    JScrollPane filler_T = new JScrollPane (textB, 
    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    panel.add(filler); panel.add(filler_T); 

filler_T (textb) est le seul qui fonctionne

Répondre

1

Vous n'avez pas utilisé la mise en page pour votre panel. Donc, JScrollPane filler_T est placé sur JScrollPane filler, donc JTextPane textA n'est pas visible.

Utilisez une mise en page, par exemple ajouter ces lignes dans votre code:

panel.setLayout(new BorderLayout(0, 0)); 
panel.add(filler,BorderLayout.NORTH); 
panel.add(filler_T,BorderLayout.CENTER); 

Votre fenêtre ressemblera:

enter image description here

Code de fonctionnement complet:

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextPane; 
import javax.swing.border.EmptyBorder; 
import javax.swing.text.DefaultCaret; 

public class TestScroll extends JFrame { 

    private JPanel panel; 


    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        TestScroll frame = new TestScroll(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 


    public TestScroll() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel = new JPanel(); 
     panel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     panel.setLayout(new BorderLayout(0, 0)); 
     setContentPane(panel); 



     JTextPane textA = new JTextPane(); 
     textA.setName("text"); 
     textA.setContentType("text/html"); 
     DefaultCaret caret = (DefaultCaret)textA.getCaret(); 
     caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
     JScrollPane filler = new JScrollPane (textA, 
     JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 

     JTextPane textB = new JTextPane(); 
     textB.setName("text" + "_T"); 
     textB.setFont(textA.getFont()); 
     DefaultCaret caret_T = (DefaultCaret)textB.getCaret(); 
     caret_T.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
     JScrollPane filler_T = new JScrollPane (textB, 
     JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
     panel.add(filler,BorderLayout.NORTH); 
     panel.add(filler_T,BorderLayout.CENTER); 

     pack(); 

    } 

} 

Aussi pour mieux comprendre lire LayoutManagers

Questions connexes