在我的Java Swing应用程序中,我想将一个锁定图像放在一个不可编辑的JTextField中,如下所示:
我创建了一个JTextField,并在其上方插入了一个JLabel,并为JLabel定义了锁图标。如果JTextField是可编辑的,则JLabel在上图所示时显示正常,但如果JTextField不可编辑,则图像根本不显示。
我该如何解决?
答案 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
,如果Icon
在Custom 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。