25

无论如何要删除 a 中的边框JTextField吗?

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

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

4

7 回答 7

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

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

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

于 2010-02-17T15:34:32.843 回答
22

从对上一个问题的回答中,您知道某些 PL&F 可能会破坏边界。

因此,显而易见的解决方案是覆盖setBorderPL&F 正在调用的方法,并丢弃更改。

JTextField text = new JTextField() {
    @Override public void setBorder(Border border) {
        // No!
    }
};
于 2010-02-17T15:36:02.563 回答
3

不,您不能删除边框。尤其是 AWT 组件的显示。他们使用本机小部件集(在 Java 之外绘制)。

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

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

然后将背景设置为白色:

setBackground(Color.white);
于 2011-08-25T07:56:50.810 回答
3

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

如果这不起作用,则您使用的外观可能会覆盖某些东西。你是使用默认的还是自定义的?

于 2010-02-17T15:33:57.403 回答
1
txt.setBorder(new LineBorder(Color.BLACK,0));

可能会奏效。

于 2013-02-03T13:18:39.570 回答
0

你可以简单地

textField.setBorder(null);

或者

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

于 2021-06-02T08:19:14.813 回答
-1

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

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

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

或者,您可以设置:

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

但是您将在所有四个方向上获得 2 个像素的光学场。如果您不指定边框粗细,您将看到光标在此边框和字段之间永久保留。

于 2012-03-10T10:59:22.193 回答