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

时间:2011-10-12 16:28:06

标签: java swing jlabel jtextfield

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

Locked JTextField

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

我该如何解决?

5 个答案:

答案 0 :(得分:2)

您可以尝试在面板中添加标签(用于图标)和文本字段。从文本字段中删除边框并在面板周围添加公共边框。将背景设置为与文本字段的背景相同。

答案 1 :(得分:1)

为什么不使用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) {
}

答案 2 :(得分:0)

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

1)仔细查看Icon

的位置

,因为

2)将Custom JTextField放入resizibale Container,如果IconCustom JTextField Icon上正常调整,请尝试setEditable(true)保持在正确的位置内,

3)使用setEditable(false)

创建Icon和{{1}}的构造函数

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

您使用的是Java 7吗?然后使用JLayeredPane