无论如何要删除 a 中的边框JTextField
吗?
txt = new JTextField();
txt.setBorder(null); // <-- this has no effect.
我真的希望它看起来像一个JLabel
- 但我仍然需要它是一个JTextField
,因为我希望人们能够突出它。
无论如何要删除 a 中的边框JTextField
吗?
txt = new JTextField();
txt.setBorder(null); // <-- this has no effect.
我真的希望它看起来像一个JLabel
- 但我仍然需要它是一个JTextField
,因为我希望人们能够突出它。
JTextField textField = new JTextField();
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());
http://java.sun.com/javase/6/docs/api/javax/swing/BorderFactory.html
将边框设置为“null”时,您实际上是在告诉外观使用(操作系统的)本机边框样式(如果有的话)。
从对上一个问题的回答中,您知道某些 PL&F 可能会破坏边界。
因此,显而易见的解决方案是覆盖setBorder
PL&F 正在调用的方法,并丢弃更改。
JTextField text = new JTextField() {
@Override public void setBorder(Border border) {
// No!
}
};
不,您不能删除边框。尤其是 AWT 组件的显示。他们使用本机小部件集(在 Java 之外绘制)。
尝试制作与您的背景相似的线条......例如,如果您的背景是白色的,那么您必须:
setBorder(BorderFactory.createLineBorder(Color.white));
然后将背景设置为白色:
setBackground(Color.white);
尝试将其设置为 BorderFactory.createEmptyBorder() 而不是 null。有时这“成功了”,因为将其设置为 null 实际上具有不同的含义。
如果这不起作用,则您使用的外观可能会覆盖某些东西。你是使用默认的还是自定义的?
txt.setBorder(new LineBorder(Color.BLACK,0));
可能会奏效。
你可以简单地
textField.setBorder(null);
或者
textField.setBorder(new EmptyBorder(0, 0, 0, 0))
使其适用于所有情况的唯一方法是以下设置:
setBorder (BorderFactory.createLineBorder (new Color (0, 0, 0, 0), 2));
否则(当您有父容器的空背景时)您将看到“I”光标永远保留在您的 JTextField 的左边缘。(只需对不同的边框厚度进行一些测试,并观察 JTextField 在您第一次激活它时放置光标的非常奇怪的方式。)
或者,您可以设置:
setBorder (BorderFactory.createLineBorder (getBackground (), 2));
但是您将在所有四个方向上获得 2 个像素的光学场。如果您不指定边框粗细,您将看到光标在此边框和字段之间永久保留。