【发布时间】:2023-03-20 23:30:01
【问题描述】:
我正在尝试对齐 JTextField 中文本的位置(开始 + 结束),但我无法找到和/或理解如何执行此操作...
example of what is wrong and what i'm looking for:
setHorizontalAlignment 方法只允许这个..:
•JTextField.LEFT
•JTextField.CENTER
•JTextField.RIGHT
•JTextField.LEADING
•JTextField.TRAILING
对于android项目,这很容易......但是为了我,我无法弄清楚这个,当做一个swing项目时......这怎么做?
编辑:
我已经能够通过使用双(又名分层)JTextFields 对这个进行排序。 emptyborder(),虽然代码更简单,但会删除所有 JTextField 框架边框,留下一个大的空方块,对于输入框,这不是一个好主意...这是一张图片和一些代码示例:
JTextField Padding Working example
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
public class TextBoxOffset {
public static void main(String[] a) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
frame.setSize(300, 300);
frame.setVisible(true);
JLabel label1 = new JLabel("JTextField, using CreateEmptyBorder");
label1.setHorizontalAlignment(SwingConstants.CENTER);
label1.setFont(new Font("Tahoma", Font.PLAIN, 11));
label1.setBounds(0, 125, 284, 23);
frame.getContentPane().add(label1);
//Creates a new JTextField with a emptyborder
JTextField emptyborder = new JTextField();
emptyborder.setBounds(22, 164, 250, 43);
emptyborder.setBorder(new EmptyBorder(5, 17, 5, 15));
frame.getContentPane().add(emptyborder);
JLabel label2 = new JLabel("JTextField, using double (layered) JTextFields");
label2.setFont(new Font("Tahoma", Font.PLAIN, 11));
label2.setHorizontalAlignment(SwingConstants.CENTER);
label2.setBounds(0, 22, 284, 23);
frame.getContentPane().add(label2);
// Creates a new input field, layered above the (disabled) JTextField background object
JTextField inputbox = new JTextField();
inputbox.setBounds(40, 61, 216, 31);
inputbox.setBorder(null);
frame.getContentPane().add(inputbox);
// Creates a border for the input text field that will serve as a background
JTextField bg = new JTextField();
bg.setBounds(22, 56, 250, 43);
frame.getContentPane().add(bg);
bg.setEnabled(false);
// Grab the overlayed inputbox focus
inputbox.requestFocusInWindow();
}
}
如果有人知道更好、更简单的方法,即控制 JTextField(或任何其他重要字段(例如:控制按钮内文本的位置)不使用双 JTextFields,请发表回复。
【问题讨论】:
-
尝试将 caretlistener 添加到您的文本字段中,检查此java2s.com/Tutorial/Java/0260__Swing-Event/…
-
caretlistener,只读取插入符号的位置 - 这不是我要找的。span>