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 的宽度?

如何拦截转到 Java Swing JTextField 的键盘敲击?

如何在具有许多 JTextField 的 Java Swing JFrame 实例中获取关键事件?

java.swing JtextField 中怎么限制只能输入数字

java:限制swing中的JTextField只能输入中文,字母,数字。