7

我有一个边界相当大的 JTextField,但是文本的行为不像我想要的那样。

 _________________
|                 |
|                 |
|text             |
|                 |
|_________________|

我该怎么做才能让我的文字像这样对齐

 _________________
|text             |
|                 |
|                 |
|                 |
|_________________|

编辑:使用JTextArea解决了我的问题。谢谢你。

4

3 回答 3

13

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

于 2013-03-23T08:15:08.663 回答
1
mytext.setHorizontalAlignment(SwingConstants.LEFT);
mytext.setVerticalAlignment(SwingConstants.TOP);

这已经足够了,适用于 JTextField

于 2019-12-14T20:42:31.277 回答
0

这是一个很老的问题,但我需要它,这为我解决了它。

请注意:此解决方案假定不使用 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);
}

}

于 2019-06-23T15:01:58.537 回答