Swing JTextField如何去掉边框?
Posted
技术标签:
【中文标题】Swing JTextField如何去掉边框?【英文标题】:Swing JTextField how to remove the border? 【发布时间】:2011-01-17 22:11:27 【问题描述】:无论如何要删除JTextField
中的边框吗?
txt = new JTextField();
txt.setBorder(null); // <-- this has no effect.
我真的希望它看起来像 JLabel
- 但我仍然需要它是 JTextField
,因为我希望人们能够突出显示它。
【问题讨论】:
了解您使用的系统/环境会很有趣。或者涉及更多代码......它(再次)非常适合我。查看这张图片和一些结果(和代码):img709.imageshack.us/img709/9034/fields.jpg 【参考方案1】:JTextField textField = new JTextField();
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());
http://java.sun.com/javase/6/docs/api/javax/swing/BorderFactory.html
将边框设置为“null”时,实际上是在告诉外观使用(操作系统的)本机边框样式(如果有的话)。
【讨论】:
+1 提到为什么 null 不能按预期工作的原因 应该是-1。因为它不起作用。可行的解决方案是建议说:覆盖 setBorder 什么都不做 由于非显而易见的原因,这可能会或可能不会根据上下文起作用。 ***.com/questions/2281539/… 但是,这是很好的信息,我看不出有什么理由拒绝它。 正如汤姆所说,这可能在上下文中起作用。鉴于 OP 的上下文,这将非常有效。谢谢汤姆,顺便说一句。 :)【参考方案2】:从您之前的@987654321@ 的回答中,您知道某些 PL&F 可能会破坏边界。
因此,显而易见的解决方案是覆盖 PL&F 正在调用的 setBorder
方法,并丢弃更改。
JTextField text = new JTextField()
@Override public void setBorder(Border border)
// No!
;
【讨论】:
@finnw:在括号中输入“null”。你不需要覆盖它。 @user3300710 在哪里输入'null'?与最初的问题一样,setBorder(null)
是不可靠的(即,当您自己测试它时,它可以工作,但可能无法在现场工作,或者在您继续其他事情之后的某个时间随机)。
@finnw:好吧,你说得对。我没有仔细阅读原始问题,对不起。
懒洋洋地回答“不!”【参考方案3】:
尝试将其设置为 BorderFactory.createEmptyBorder() 而不是空值。有时这会“起到作用”,因为将其设置为 null 实际上具有不同的含义。
如果这不起作用,则您使用的外观可能会覆盖某些内容。你是使用默认的还是自定义的?
【讨论】:
@Markus,根据我使用 Swing 的经验,它的问题通常不限于一个问题,而是必须像洋葱一样剥皮。没有看到你的整个代码,我不知道这是否能完全解决问题。如果我正在处理这个错误,这将是我会尝试的第一件事。如果它不起作用,我会尝试调查外观(如果您使用的是花哨的东西)是否有干扰。【参考方案4】:不,您不能删除边框。尤其是 AWT 组件的显示。他们使用本机小部件集(在 Java 之外绘制)。
尝试使线条与您的背景相似...例如,如果您的背景是白色,那么您必须:
setBorder(BorderFactory.createLineBorder(Color.white));
然后将背景设置为白色:
setBackground(Color.white);
【讨论】:
【参考方案5】:txt.setBorder(new LineBorder(Color.BLACK,0));
可能会起作用。
【讨论】:
【参考方案6】:你可以简单
textField.setBorder(null);
或
textField.setBorder(new EmptyBorder(0, 0, 0, 0))
【讨论】:
【参考方案7】:使其适用于所有情况的唯一方法是以下设置:
setBorder (BorderFactory.createLineBorder (new Color (0, 0, 0, 0), 2));
否则(当父容器的背景为空时)您将看到“I”光标永远保留在 JTextField 的左边缘。 (只需对不同的边框厚度进行一些测试,并观察 JTextField 在您第一次激活它时放置光标的非常奇怪的方式。)
您也可以设置:
setBorder (BorderFactory.createLineBorder (getBackground (), 2));
但您会在所有四个方向上获得光学上大 2 个像素的场。如果您不指定边框粗细,您将看到光标在此边框和字段之间永久保留。
【讨论】:
以上是关于Swing JTextField如何去掉边框?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java Swing 中控制 JTextField 的宽度?
如何拦截转到 Java Swing JTextField 的键盘敲击?
如何在具有许多 JTextField 的 Java Swing JFrame 实例中获取关键事件?