Swing JTextField如何删除边框?

反正有没有删除JTextField中的边框?

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

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

从你上一个问题的答案中你知道一些PL&F可能会破坏边界。

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

 JTextField text = new JTextField() { @Override public void setBorder(Border border) { // No! } }; 
 JTextField textField = new JTextField(); textField.setBorder(javax.swing.BorderFactory.createEmptyBorder()); 

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

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

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

如果这不起作用,那么您使用的外观可能会覆盖某些内容。 您使用默认或自定义的东西吗?

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

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

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

然后将背景设置为白色:

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

可能有用。

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

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

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

或者你可以设置:

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

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