java - 将 Paint 组件添加到 JPanel
问题描述
在我的应用程序(使用 java)中,按下一个按钮,然后打开一个面板,上面有一个图表。要创建图形,我使用图形/绘画。但是,我无法显示图形。现在,我只是想画一个圆圈(而不是实际的图表)。如果有人能解释我做错了什么,将不胜感激。
public class SeeProgressHandleClass extends JPanel{
public SeeProgressHandleClass(JFrame window) {
this.window = window;
}
public void mouseClicked(MouseEvent e) {
panel = new JPanel();
fillPanel();
window.add(panel);
panel.setBackground(Color.white);
panel.setBounds(50, 40, 1100, 660);
}
public static void fillPanel() {
Graph graph = new Graph();
panel.add(graph);
}
}
public class Graph extends JPanel{
public void paintComponent(Graphics g) {
super.paintComponent(g);
this.setBackground(Color.white);
g.setColor(Color.green);
g.fillOval(50, 50, 50, 50);
}
}
解决方案
Graph
应该提供preferredSize
提示,这将允许布局管理器更好地确定组件的显示方式。考虑覆盖getPreferredSize
- 不要调用
this.setBackground(Color.white);
insidepaintComponent
,每次你这样做时,都会触发一个潜在的重绘请求,最终会消耗你所有的 CPU 周期。在构造函数中设置这个 - 您正在添加,然后将其添加
Graph
到JPanel
屏幕......不知道为什么,但这让它变得更加混乱 - After
window.add(panel);
, allwindow.revalidate()
andwindow.repaint()
触发新的布局和绘制通道
推荐阅读
- python - 我有 3.8.3 但我想使用 3.7
- wordpress-theming - 识别wordpress主题代码进行修改
- c++ - 如何将指针的值存储在递归函数中?
- postgresql - postgresql 中不存在列和表之间的关系,即使它确实存在
- firebase - 错误:未为“对象”类型定义运算符“[]”
- javascript - 背景图像在我的样式表中不起作用
- html - 使用 Node.JS 访问 HTML 页面时在 Heroku 中出现错误“错误:ENOENT:没有这样的文件或目录”
- json - 将配置存储为 JSON 文件或数据库
- manim - 如何更改 x(或 y)轴标签的颜色 [manim]
- c++ - 是否可以使用 clang 格式将单行名称空间放在一条线上?