gpt4 book ai didi

java JTextField PaintComponent 方法被重复调用。这正常吗?

转载 作者:行者123 更新时间:2023-12-02 08:44:43 26 4
gpt4 key购买 nike

通过对 JTextField 进行子类化,我注意到当字段具有焦点时,即使没有用户交互,paintComponent 方法也会被重复调用(大约每半秒一次)。

我阅读了 Oracle 文章“Painting in AWT and Swing”,但没有找到任何启​​发。

这是正常行为,还是遗漏了什么?

这是我的示例 Proggy:
(将光标定位在第二个 - 未子类化 - 没有日志记录的 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"));
}
}

最佳答案

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

关于java JTextField PaintComponent 方法被重复调用。这正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61155300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com