JTextField 边距不适用于边框
Posted
技术标签:
【中文标题】JTextField 边距不适用于边框【英文标题】:JTextField margin doesnt work with border 【发布时间】:2012-05-16 19:57:11 【问题描述】:我有一个JTextField
,我想设置保证金。但是当我设置任何边框时,它就无法正常工作。它的边距功能不起作用。
这是我的代码;
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);
如果我commant这一行,它的工作原理
//textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
【问题讨论】:
我喜欢这个复合边框的东西,当涉及到设置边框时,因为你可以用它指定一个空边框,它给人的印象几乎和设置边距一样:-) 【参考方案1】:Margin 与 Border 存在一些问题,要解决此问题,您可以尝试使用 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);
【讨论】:
【参考方案2】:从JavaDoc阅读。
设置文本组件的边框与其文本之间的边距。文本组件的默认 Border 对象将使用此值来创建适当的边距。但是,如果在文本组件上设置了非默认边框,则 Border 对象负责创建适当的边距空间(否则此属性将被有效忽略)。这会导致组件的重绘。将 PropertyChange 事件(“margin”)发送给所有侦听器。
您可能正在寻找复合边框:
BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY),
BorderFactory.createEmptyBorder(0, 20, 0, 0));
【讨论】:
以上是关于JTextField 边距不适用于边框的主要内容,如果未能解决你的问题,请参考以下文章
位置和边距顶部负值不适用于 html 电子邮件模板 [关闭]