我有一个JTextField
,我想要setMargin。但是当我设置任何边框时,它都不能正常工作。它的保证金功能不起作用。
这是我的代码;
import java.awt.Color;
import java.awt.Insets;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class ImageField {
public static void main(String[] args) throws IOException {
JTextField textField = new JTextField();
textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
textField.setMargin(new Insets(0, 20, 0, 0));
JOptionPane.showMessageDialog(null, textField, "",
JOptionPane.PLAIN_MESSAGE);
}
}
如果我告诉这一行,它可以正常工作
//textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
答案 0 :(得分:17)
保证金在边框方面存在一些问题,要解决此问题,您可以尝试使用CompoundBorder将EmptyBorder设置为内边框,并将所需边框(在您的情况下为lineBorder)设置为外边框。
这样的事情应该有效:
Border line = BorderFactory.createLineBorder(Color.DARK_GRAY);
Border empty = new EmptyBorder(0, 20, 0, 0);
CompoundBorder border = new CompoundBorder(line, empty);
textField.setBorder(border);
答案 1 :(得分:5)
从JavaDoc阅读。
设置文本组件边框与其文本之间的边距。文本组件的默认Border对象将使用此值来创建适当的边距。但是,如果在文本组件上设置了非默认边框,则Border对象有责任创建适当的边距空间(否则将有效地忽略此属性)。这会导致重新绘制组件。 PropertyChange事件(“margin”)将发送给所有侦听器。
您可能正在寻找复合边框:
BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY),
BorderFactory.createEmptyBorder(0, 20, 0, 0));