Java 如何在不可编辑的JTextField中显示图像?

Java 如何在不可编辑的JTextField中显示图像?,java,swing,jlabel,jtextfield,Java,Swing,Jlabel,Jtextfield,在我的Java Swing应用程序中,我希望在不可编辑的JTextField中放置一个锁图像,如下所示: 我已经创建了一个JTextField,并在其上方插入了一个JLabel,并为JLabel定义了锁图标。如果JTextField是可编辑的,则JLabel显示良好,如上图所示,但如果JTextField是不可编辑的,则图像根本不显示 如何解决这个问题?编写自己的类,扩展JTextField,在这个类中,您必须覆盖paintComponent(Graphics g) 1) 小心地调整图标的位置

在我的Java Swing应用程序中,我希望在不可编辑的JTextField中放置一个锁图像,如下所示:

我已经创建了一个JTextField,并在其上方插入了一个JLabel,并为JLabel定义了锁图标。如果JTextField是可编辑的,则JLabel显示良好,如上图所示,但如果JTextField是不可编辑的,则图像根本不显示


如何解决这个问题?

编写自己的类,扩展
JTextField
,在这个类中,您必须覆盖
paintComponent(Graphics g)

1) 小心地调整
图标的位置

因为

2) 将您的
自定义JTextField
放入resizibale
容器
,如果
图标
保持在右侧,如果使用
图标
内部调整自定义JTextField
的大小正确


3) 使用
图标为
设置可编辑(true)
设置可编辑(false)
创建构造函数。您可以尝试在面板中添加标签(图标)和文本字段。从文本字段中删除边框,并在面板周围添加公共边框。将背景设置为与文本字段的背景相同。

为什么不使用jTextPane

try {
    // Get the text pane's document
    JTextPane textPane = new JTextPane();
    StyledDocument doc = (StyledDocument)textPane.getDocument();

    // The image must first be wrapped in a style
    Style style = doc.addStyle("StyleName", null);
    StyleConstants.setIcon(style, new ImageIcon("imagefile"));

    // Insert the image at the end of the text
    doc.insertString(doc.getLength(), "ignored text", style);
} catch (BadLocationException e) {
}

创建一个自定义的
边框
让我们称之为IconBorder。查看MatteIcon的源代码,然后将其自定义为仅绘制单个图像。然后将边框添加到文本字段,代码如下:

Border border = new CompoundBorder(textField.getBorder(), new IconBorder(...));
textField.setBorder( border );

您正在使用Java7吗?然后使用。

要更快地获得更好的帮助,请发布一个。在代码中生成一个小图像。感谢大家提供的好的解决方案。这对我来说是最简单的。最后一个部件看起来非常漂亮。谢谢斯坦尼斯拉夫。