java JTextField paintComponent方法反复调用。这正常吗?

问题描述 投票:0回答:1

具有JTextField的子类,我注意到当Field具有Focus时,即使没有用户交互,也会重复(大约每半秒一次)调用paintComponent方法。

我读过Oracle文章“ AWT和Swing中的绘画”,但在那里没有发现任何启示。

这是正常行为,还是错过了一些事情?

这是我的Proggy示例:(将Cursor定位在第二个位置-未子类化-没有日志记录的JTextField导致具有日志记录的子类之一失去了Focus,该焦点不再重复绘制)]

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"));
    }
}

具有JTextField的子类,我注意到当Field具有Focus时,即使没有用户交互,也会重复(大约每半秒一次)调用paintComponent方法。我读了Oracle ...

java jtextfield paintcomponent
1个回答
0
投票

当然是正常的。当textfield具有焦点时,您会看到光标闪烁,这意味着您会看到textfield具有新的视觉表示,这意味着paintComponent()

© www.soinside.com 2019 - 2024. All rights reserved.