我有一个边界相当大的JTextField,但文本的行为并不像我希望的那样。
_________________
| |
| |
|text |
| |
|_________________|
我该怎么做才能让我的文本像这个一样对齐
_________________
|text |
| |
| |
| |
|_________________|
编辑:使用JTextArea
解决了我的问题。非常感谢。
JTextArea
与顶部对齐。
或者使用JLabel
:
JLabel myLabel = new JLabel("my text");
和呼叫:
myLabel.setHorizontalAlignment(SwingConstants.LEFT);
myLabel.setVerticalAlignment(SwingConstants.TOP);
布局管理器是另一种方法:http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html
这是一个很老的问题,但我需要它,这为我解决了它。
请注意:此解决方案假定不使用i18n。如果您启用了i18n函数,那么查看javax.swing.plaf.basic.BasicTextFieldUI.create(Element(可以找到合适的类。
您可以自定义FieldView:中的垂直文本位置
public static class MyTextfieldUI extends com.sun.java.swing.plaf.windows.WindowsTextFieldUI /* TODO which UI class is really used? */ {
public static ComponentUI createUI(JComponent c) {
return new MyTextfieldUI();
}
@Override
public View create(Element elem) {
return new FieldView(elem) {
@Override
protected Shape adjustAllocation(final Shape shape) {
if (shape instanceof Rectangle) {
final Rectangle result = (Rectangle) super.adjustAllocation(shape);
/* set vertical text position to top */
result.y = ((Rectangle) shape).y;
return result;
}
return super.adjustAllocation(shape);
}
};
}
}
public class Test extends JPanel {
private Test() {
super(new BorderLayout());
final JTextField northField = new JTextField();
northField.setBackground(Color.YELLOW);
northField.setText("north");
final JTextField eastField = new JTextField();
eastField.setBackground(Color.GREEN);
eastField.setText("east");
eastField.setPreferredSize(new Dimension(200, -1));
final JTextField centerField = new JTextField();
centerField.setBackground(Color.CYAN);
centerField.setText("center");
centerField.setHorizontalAlignment(SwingConstants.CENTER);
final JTextField westField = new JTextField();
westField.setBackground(Color.GRAY);
westField.setText("west");
westField.setHorizontalAlignment(SwingConstants.RIGHT);
westField.setPreferredSize(new Dimension(200, -1));
final JTextField southField = new JTextField();
southField.setBackground(Color.MAGENTA);
southField.setText("south");
southField.setHorizontalAlignment(SwingConstants.RIGHT);
add(northField, BorderLayout.NORTH);
add(eastField, BorderLayout.EAST);
add(centerField, BorderLayout.CENTER);
add(westField, BorderLayout.WEST);
add(southField, BorderLayout.SOUTH);
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
/* Set custom look and feel for all text fields */
UIManager.put("TextFieldUI", MyTextfieldUI.class.getName());
final JFrame frame = new JFrame("TextDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Test());
frame.setSize(800, 500);
frame.setVisible(true);
}
}
mytext.setHorizontalAlignment(SwingConstants.LEFT);
mytext.setVerticalAlignment(SwingConstants.TOP);
这就足够了,并且适用于JTextField