gpt4 book ai didi

java - 添加自定义 JComponent 时未调用 paintComponent

转载 作者:行者123 更新时间:2023-11-29 07:29:27 25 4
gpt4 key购买 nike

为什么在添加自定义 JComponent 时未调用 paintComponent(Graphics)

public class Test {

public static void main(String[] args) {
JFrame frame = new JFrame("Paint Component Example");

frame.setPreferredSize(new Dimension(750, 750));
frame.setLocationByPlatform(true);

JPanel panel = new JPanel();

panel.add(new CustomComponent());
frame.add(panel, BorderLayout.CENTER);

frame.pack();
frame.setVisible(true);
}
}

public class CustomComponent extends JComponent {

public CustomComponent() {
super();
}

@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(10, 10, 10, 10);
}
}

我知道没有理由在这个实例中创建自定义组件,但它是另一个我无法弄清楚的问题的极其简化的版本。

最佳答案

JPanel panel = new JPanel();
panel.add(new CustomComponent());

JPanel 的默认布局管理器是 FlowLayoutFlowLayout 将遵循添加到其中的任何组件的首选大小。默认情况下,JComponent 的首选大小为 (0, 0),因此没有可绘制的内容,因此永远不会调用 paintComponent() 方法。

覆盖 CustomComponent 类的 getPreferredSize() 方法以返回组件的首选大小。

此外,不要忘记在方法开始时调用 super.paintComponent(...)

阅读 Custom Painting 上的 Swing 教程部分获取更多信息和工作示例。

关于java - 添加自定义 JComponent 时未调用 paintComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45065668/

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