2016-12-20 2 views
0

の高さが主なアイデアは、(escposプリンタに転送されます画像を生成するために使用されるが、別の質問のthatsされます)Swingライブラリを使用して、特定のフォームを描画することですましょう。フォーム自体には、ラベルを表す上部に全幅のコンテナがあります。ラベルはカスタムフォントとフォントサイズを持ち、折り返し線を持つことができるので、JTextPaneを使用しました。 JTextPane要素とすべてのフォームは、500pxの固定サイズになります。試験としては、JTextPaneのコンテンツ

は、コードは次のようになります。

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); 

、どのように私はそれを保持しているコンテナにその高さを設定するためには、JTextPaneののフルサイズを計算しますされる問題?多分同じ問題(あるいは単に好奇心)に打たれた人のために、私はhardcodedlyでも働いていた、高さ補正を与えることをしようとしたが、その後、私はフォントを追加した部分...

答えて

2

私は同様の問題について詳細な回答を書きました。 Check here

考えられるのは、JTextPaneで呼び出されるgetPreferredSize()。heightは、現在のコンテンツが現在の幅で表示されるのに必要な高さを返します。幅がまだ設定されていない場合は、JTPの幅が最も長い行の幅である場合に必要な高さが返されます。同じロジックで

、のgetPreferredSize()。幅は、最長線の幅を返します。

+0

ありがとうございました。今私は通常、StyledDocとectを使用することができます。 –

0

。発見ここに解決策:link

は、アイデアは非常に単純なものになりました:

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