Есть прозрачное окно.
package ru.alexp.tools;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.JFrame;
public class InputFrame extends JFrame {
private static InputFrame instance;
private final ConsoleInputPanel inputPanel = new ConsoleInputPanel();
public InputFrame() {
final Dimension dim = getToolkit().getScreenSize();
setSize(500, 80);
setLocation(dim.width - getWidth() - 50, dim.height - getHeight() - 200);
setUndecorated(true);
setBackground(new Color(255, 255, 255, 0));
setType(Type.UTILITY);
add(inputPanel);
addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
repaint();
}
@Override
public void focusLost(FocusEvent e) {
repaint();
}
});
}
public static InputFrame getInputFrame() {
if (instance == null) {
instance = new InputFrame();
}
return instance;
}
}
В нём нахордится панель на которой отрисовывается стилизованный JTextField.
Для перерисовки содержимого JTextField я перезаписываю paintComponent(Graphics g).
protected void paintComponent(Graphics g) {
Graphics2D gg = (Graphics2D) g;
gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
gg.setColor(Color.WHITE);
gg.setFont(font);
gg.drawString(getText(), 50, 50);
}
При первой отрисовки текста всё отлично работает. Но при при отрисовки другого текста у меня на экране показывается наложение этих отрисованных строк.
(здесь было написано сначала "12345" затем "5432111")
Сразу были найдены возможные решения:
- Перед отрисовкой очищать область через clearRect() -> получил белую область под элементом
- Перерисовывать содержимое полностью содержимое используя repaint() в paintComponent() -> получил бесконечную рекурсию (да, знаю. глупо. но так InputFrame.getInputFrame().repaint() кое как но работало.)
- реализовать через super.paintComponent() -> белый фон; чтобы убрать белый фон setBackground(new Color(255, 255, 255, 0)) -> опять наложение отрисованных строк
Помогите решить эту проблему и подскажите как правильно реализовать остальные визуальные функции JTextField такие как: мигание курсора и выделение символов.
Заранее спасибо.