Swing JTextField如何删除边框?

时间:2010-02-17 15:30:20

标签: java swing jtextfield

有没有删除JTextField中的边框?

txt = new JTextField();
txt.setBorder(null);   // <-- this has no effect.

我真的希望它看起来像JLabel - 但我仍然需要它成为JTextField,因为我希望人们能够突出它。

7 个答案:

答案 0 :(得分:60)

JTextField textField = new JTextField();
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());

http://java.sun.com/javase/6/docs/api/javax/swing/BorderFactory.html

将边框设置为“null”时,您实际上是在告诉外观&amp;感觉使用(操作系统的)本机边框样式(如果有)。

答案 1 :(得分:17)

从您之前的question的答案中,您知道某些PL&amp; Fs可能会破坏边界。

显而易见的解决方案是覆盖PL&amp; F正在调用的setBorder方法,并放弃更改。

JTextField text = new JTextField() {
    @Override public void setBorder(Border border) {
        // No!
    }
};

答案 2 :(得分:3)

尝试将其设置为 BorderFactory.createEmptyBorder() 而不是null。有时这种“诀窍”因为将其设置为null实际上具有不同的含义。

如果这不起作用,您使用的外观可能会覆盖某些内容。您使用的是默认设置还是自定义设置?

答案 3 :(得分:2)

不,你不能删除边框。特别是在AWT组件的显示屏上。它们使用本机窗口小部件集(在Java外部绘制)。

尝试制作与您的背景相似的行...例如,如果您的背景为白色,那么您必须:

setBorder(BorderFactory.createLineBorder(Color.white));

然后将背景设置为白色:

setBackground(Color.white);

答案 4 :(得分:1)

txt.setBorder(new LineBorder(Color.BLACK,0));

可能有用。

答案 5 :(得分:0)

你可以简单地

textField.setBorder(null);

textField.setBorder(new EmptyBorder(0, 0, 0, 0))

答案 6 :(得分:-1)

使其适用于所有情况的唯一方法是以下设置:

setBorder (BorderFactory.createLineBorder (new Color (0, 0, 0, 0), 2));

否则(当您拥有父容器的空背景时),您将看到“I”光标永远保留在JTextField的左边缘。 (只需对不同的边框厚度进行一些测试,并观察JTextField在第一次激活时放置光标的非常奇怪的方式。)

或者您可以设置:

setBorder (BorderFactory.createLineBorder (getBackground (), 2));

但是你会在所有四个方向上获得大于2像素的视场。如果未指定边框粗细,则会看到光标BETWEEN此边框和字段永久保留。