имея подкласс JTextField, я заметил, что метод paintComponent вызывается повторно (примерно каждые полсекунды), когда у поля есть фокус, даже без взаимодействия с пользователем.
Я прочитал статью Oracle " Рисуя в AWT и Swing ", но не нашел там никакого просветления.
Это нормальное поведение или что-то пропустили?
Вот мой пример Proggy:
(позиционирование Курсор во 2-м - без подкласса - JTextField, у которого нет ведения журнала, приводит к тому, что подклассовый с регистрацией теряет фокус, который перестает многократно перекрашиваться)
import java.awt.*;
import javax.swing.*;
public class SwingPaintDemo2 extends JFrame {
public SwingPaintDemo2(final String title) {
super(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final Box box = new Box(BoxLayout.Y_AXIS);
box.add(new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(250, 200);
}
@Override
public void paintComponent(final Graphics g) {
super .paintComponent( g);
System.out.println("MyPanel.paintComponent......: " + g);
g.drawString("This is my custom Panel!", 10, 20);
}
});
box.add(new JTextField("JayTekst") {
@Override
public void paintComponent(final Graphics g) {
super .paintComponent( g);
System.out.println("JayTextField.paintComponent.: " + g);
}
});
box.add(new JTextField("JText"));
this.add(box);
this.pack();
this.setVisible(true);
}
public static void main(final String[] args) {
SwingUtilities.invokeLater(() -> new SwingPaintDemo2("Swing Paint Demo"));
}
}