问题
Currently it looks so
What to do so that it looks so?
Below is my code:
JFrame f = new JFrame();
JTextPane textPane = new JTextPane();
JTextField component = new JTextField(" ");
component.setMaximumSize(component.getPreferredSize());
textPane.setSelectionStart(textPane.getDocument().getLength());
textPane.setSelectionEnd(textPane.getDocument().getLength());
textPane.insertComponent(component);
try {
textPane.getDocument().insertString(textPane.getDocument().getLength(), "text",
new SimpleAttributeSet());
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
f.add(new JScrollPane(textPane));
f.setSize(200, 100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
The single question which is near to this topic I found: JTextPane insert component, faulty vertical alignment But there is no answer how to change the alignment. But it must be possible according to the discussion there.
回答1:
You can use this http://java-sl.com/tip_center_vertically.html
It should work with JComponents
as well.
You can also override LabelView's
getPreferredSpan()
adding some space to the bottom.
Alternatively you can try to override RowView
inner class in ParagraphView
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/swing/text/ParagraphView.java#ParagraphView.Row
That points to inner class Row extends BoxView
You should replace it with own one. Try to override
public float getAlignment(int axis)
to return CENTER (0.5). If this does not help override layoutMinorAxis(0 to return proper offsets (shifted).
回答2:
Define a style for your document with a JLabel and set the vertical aligment on it:
Style s = doc.addStyle("icUf", regular);
ImageIcon icUf = createImageIcon("uf.png", "Unidad Funcional");
if (icUf != null) {
JLabel jl = new JLabel(icUf);
jl.setVerticalAlignment(JLabel.CENTER);
StyleConstants.setComponent(s, jl);
}
Insert the label:
doc.insertString(doc.getLength(), " ", doc.getStyle("icUf"));
and the text:
doc.insertString(doc.getLength(), " text ", doc.getStyle("bold"));
回答3:
Based on the answer above (which didn't work for me, but helped me find this), I used:
Style s = doc.addStyle("icUf", regular);
ImageIcon icUf = createImageIcon("uf.png", "Unidad Funcional");
if (icUf != null) {
// create label with icon AND text
JLabel jl = new JLabel("some text",icUf, SwingConstants.LEFT);
StyleConstants.setComponent(s, jl);
}
doc.insertString(doc.getLength(), " ", doc.getStyle("icUf"))
This properly aligned the text 'some text' and the icon.
来源:https://stackoverflow.com/questions/13933402/how-to-center-text-and-a-jcomponent-in-a-jtextpane-vertically