如何设置Java里面textfield的对齐方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置Java里面textfield的对齐方式相关的知识,希望对你有一定的参考价值。

在awt中,TextField没有设置对齐方式的方法。

在swing中,JTextField有一个setHorizontalAlignment()方法可以设置对齐方式。

例如:

/*
JTextField.LEFT  左对齐
JTextField.CENTER 居中对齐
JTextField.RIGHT  右对齐
JTextField.LEADING  
JTextField.TRAILING
*/
JTextField Txt = new JTextField();
Txt.setHorizontalAlignment(JTextField.LEFT);

参考技术A textfield.setHorizontalAlignment(SwingConstants.LEFT); //指定内容的对齐方式

SwingConstants 通常用于在屏幕上定位或定向组件的常量的集合。

LEADING

标识使用从左到右和从右到左的语言的文本开始边。
TRAILING

标识使用从左到右和从右到左的语言的文本结束边。

LEFT

用于指定框左侧位置的框方向常量。
RIGHT

用于指定框右侧位置的框方向常量。
CENTER
某区域的中心位置。

如何使用Swiftui创建用户表单

我想创建一个表单,其中所有文本字段都需要从相同的对齐方式开始,就像下面的图片中那样,它不是从相同的对齐方式开始。名,姓和电话号码的所有textField均未正确对齐。

VStack(){
        HStack(){
            Text("First Name")
            TextField("First name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
        }
        HStack(){
            Text("Last Name")
            TextField("Last Name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
        }
        HStack(){
            Text("Phone number")
            TextField("Phone number", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
        }
        Spacer()
    }.padding(10)

Like in iamge

答案

您可以使用GeometryReader访问设备尺寸,并使用frame设置Text的固定宽度。例如:

GeometryReader { geometry in
    VStack(spacing: 10) {
        HStack {
            Text("First Name").frame(width: geometry.size.width / 3)
            TextField("First name", text: self.$name).textFieldStyle(RoundedBorderTextFieldStyle())
        }
        HStack {
            Text("Last Name").frame(width: geometry.size.width / 3)
            TextField("Last Name", text: self.$name).textFieldStyle(RoundedBorderTextFieldStyle())
        }
        HStack{
            Text("Phone number").frame(width: geometry.size.width / 3)
            TextField("Phone number", text: self.$name).textFieldStyle(RoundedBorderTextFieldStyle())
        }
        Spacer()
    }.padding(10)
}     
另一答案

这将对齐您的TextField:

VStack {
    HStack {
        HStack {
            Text("First Name")
            Spacer()
        }
        TextField("First name", text: $name)
            .textFieldStyle(RoundedBorderTextFieldStyle())
    }
    HStack {
        HStack {
            Text("Last Name")
            Spacer()
        }
        TextField("Last Name", text: $name)
            .textFieldStyle(RoundedBorderTextFieldStyle())
    }
    HStack {
        HStack {
            Text("Phone number")
            Spacer()
        }
        TextField("Phone number", text: $name)
            .textFieldStyle(RoundedBorderTextFieldStyle())
    }
    Spacer()
}   .padding(10) 
另一答案
        VStack{
            HStack(){
                Text("First Name").frame(width: 120, alignment: .leading)
                TextField("First name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
            }
            HStack(){
                Text("Last Name").frame(width: 120, alignment: .leading)
                TextField("Last Name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
            }
            HStack{
                Text("Phone number").frame(width: 120, alignment: .leading)
                TextField("Phone number", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
            }
            Spacer()
        }.padding(10)

或更灵活的解决方案

struct TestView: View {
    @State var name = ""
    @State var width: CGFloat = 0

    struct Label: ViewModifier {
        @Binding var width: CGFloat

        func getWidth(content: Content, proxy: GeometryProxy) -> some View {
            if proxy.size.width > width {
                RunLoop.main.perform {
                    self.width = proxy.size.width
                }
            }
            return content
        }

        func body(content: Content) -> some View {
            content.overlay(GeometryReader { proxy in
                self.getWidth(content: content, proxy: proxy)
            }).frame(minWidth: self.width, alignment: .leading)
        }
    }

    var body: some View {
        VStack(alignment: .center){
            HStack(){
                Text("First Name").modifier(Label(width: $width))
                TextField("First name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
            }
            HStack(){
                Text("Last Name").modifier(Label(width: $width))
                TextField("Last Name", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
            }
            HStack{
                Text("Phone numbe").modifier(Label(width: $width))
                TextField("Phone number", text: $name).textFieldStyle(RoundedBorderTextFieldStyle())
            }

            Spacer()
        }.padding(10)
    }
}

以上是关于如何设置Java里面textfield的对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

word文档里面的文字垂直方向上如何居中?

word2010插入公式以后无法调整公式左对齐、居中、右对齐等等,如何解决?

如何使用Swiftui创建用户表单

Flutter TextField 提示文本对齐

请问在java JTable中如何设置单元格字体居中对齐?

JavaFX TextField 在焦点上将填充更改为 0