2016-12-20 1 views
0

L'idée principale est de dessiner une forme spécifique, en utilisant la bibliothèque Swing (elle sera utilisée pour générer une image, qui sera transférée à une imprimante escpos, mais c'est une autre question). Le formulaire lui-même a un conteneur pleine largeur en haut, qui représente l'étiquette. L'étiquette a une police personnalisée, taille de police et peut avoir un linewrap, par conséquent j'ai utilisé JTextPane. L'élément JTextPane et tout le formulaire auront une taille fixe de 500 px.Obtenir la hauteur du contenu de JTextPane

En test, le code ressemble à:

JFrame fr = getFrame(); 

    JPanel root = new JPanel(new GridBagLayout()); 

    GridBagConstraints c = new GridBagConstraints(); 

    JPanel titleP = new JPanel(new BorderLayout()); 
    titleP.setBorder(BorderFactory.createTitledBorder("titleP")); 
    c.fill = GridBagConstraints.BOTH; 
    c.gridy = 0; 
    c.gridx = 0; 
    c.gridwidth = 8; 
    c.weightx = 1.0f; 
    c.weighty = 1.0f; 

    JTextPane tp = new JTextPane(); 
    JScrollPane sp = new JScrollPane(tp); 
    Font font = new Font("Arial",Font.BOLD, 37); 
    tp.setFont(font); 
    tp.setText("fdsfdsf sdf sdf sd fdsfsdf sdf sd fsd fdsf sdf sdf sdf sdf sdf sdf sdf ds"); 
    tp.setOpaque(false); 
    titleP.add(sp); 

    root.add(titleP,c); 

    JPanel infoP = new JPanel(); 
    infoP.setBorder(BorderFactory.createTitledBorder("infoP")); 

    c.gridwidth = 5; 
    c.gridy = 1; 
    c.gridx = 0; 

    //infoP.setPreferredSize(new Dimension(350,200)); 

    root.add(infoP,c); 

    JPanel priceP = new JPanel(); 
    priceP.setBorder(BorderFactory.createTitledBorder("priceP")); 

    c.gridx = 5; 
    c.gridwidth = 3; 

    root.add(priceP,c); 

    fr.setContentPane(root); 
    fr.pack(); 

    int size1 = fr.getHeight(); 
    int width = 120; 
    fr.setSize(width, 0); 
    size1 += tp.getHeight(); 
    size1 += 25; 
    fr.setSize(width, size1); 
    fr.setVisible(true); 

La question est, comment je ne calcule pleine taille JTextPane, afin de régler sa hauteur au récipient, qui tient-il? La partie où j'ai hardcodedly essayé de donner une correction de taille, même travaillé, mais j'ai alors ajouté une police ...

Répondre

2

j'ai écrit une réponse détaillée sur une question similaire. Vérification here

L'idée est que getPreferredSize(). Height appelée dans un JTextPane retourne la hauteur nécessaire pour afficher le contenu actuel en fonction de la largeur actuelle. Si la largeur n'est pas encore définie, elle retournera la hauteur nécessaire si la largeur du JTP était la largeur de la ligne la plus longue.

Avec la même logique, getPreferredSize(). Width renvoie la largeur de la ligne la plus longue.

+0

Merci. Maintenant, je peux normalement utiliser StyledDoc et ect. –

0

Pour ceux qui ont peut-être frappé sur le même problème (ou simplement curieux). Trouvé une solution ici: link

L'idée est venue tout à fait simple:

public int getContentHeight(int width, String content) { 
    JEditorPane dummyEditorPane = new JEditorPane(); 
    dummyEditorPane.setSize(width, Short.MAX_VALUE); 
    dummyEditorPane.setText(content); 
    return dummyEditorPane.getPreferredSize().height; 
}