9

我有一个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));
4

2 回答 2

19

边距与边框有一些问题,要解决此问题,您可以尝试使用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);
于 2012-05-08T10:38:48.240 回答
6

JavaDoc中阅读它。

设置文本组件的边框与其文本之间的边距。文本组件的默认 Border 对象将使用此值来创建适当的边距。但是,如果在文本组件上设置了非默认边框,则 Border 对象负责创建适当的边距空间(否则此属性将被有效忽略)。这会导致组件的重绘。将 PropertyChange 事件(“margin”)发送给所有侦听器。

您可能正在寻找复合边框:

BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY),
                BorderFactory.createEmptyBorder(0, 20, 0, 0));
于 2012-05-08T10:34:26.323 回答