Как показать изображение внутри нередактируемого JTextField? - PullRequest
1 голос
/ 12 октября 2011

В моем приложении Java Swing я хочу поместить изображение блокировки в JTextField, которое не редактируется, чтобы оно выглядело так:

Locked JTextField

Я создал JTextField, вставил над ним JLabel и определил значок блокировки для JLabel. Если JTextField является редактируемым, то JLabel выглядит нормально, как показано на рисунке выше, но если JTextField не редактируется, то изображение вообще не отображается.

Как я могу это исправить?

Ответы [ 5 ]

2 голосов
/ 12 октября 2011

Вы можете попытаться добавить как ярлык (для значка), так и текстовое поле на панели.Удалите границу из текстового поля и добавьте общую рамку вокруг панели.Установите фон таким же, как фон текстового поля.

1 голос
/ 12 октября 2011

Почему вы не используете 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) {
}
0 голосов
/ 13 октября 2011

Вы используете Java 7?Затем используйте JLayeredPane .

0 голосов
/ 12 октября 2011

Создайте пользовательский Border, назовем его IconBorder.Взгляните на исходный код MatteIcon, а затем настройте его так, чтобы рисовать только одно изображение.Затем вы добавили бы Border в текстовое поле с кодом:

Border border = new CompoundBorder(textField.getBorder(), new IconBorder(...));
textField.setBorder( border );
0 голосов
/ 12 октября 2011

написать собственный класс, который расширяет JTextField, и внутри этого класса вы должны тщательно переопределить paintComponent(Graphics g)

1) с позициями для Icon

, потому что

2) поместите Custom JTextField в resizibale Container, попробуйте, если Icon останется на правой стороне, если изменение размера работает правильно для Custom JTextField с Icon внутри,

3) создайте конструктор дляsetEditable(true) и setEditable(false) с Icon

...