如何在JTextField中对齐文本



我有一个边界相当大的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

最新更新