gpt4 book ai didi

Java repaint() 方法问题。重新绘制 JPanel 将消失 JFrame 中绘制的组件

转载 作者:行者123 更新时间:2023-11-30 01:40:47 25 4
gpt4 key购买 nike

我为 JFrame 和 JPanel 创建了一个单独的类,然后绘制(JFrame 类中的 fillOval)和绘制(JPanel 类中的 fillOval),以及一个仅对 JPanel 组件进行动画处理的按钮。但问题是,每当我重新绘制 JPanel 类时; ---- JFrame 组件消失了。我不明白为什么会发生这种情况。我希望 JFrame 组件对于 JPanel 类中完成的每个动画都是永久的。

示例代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TryRepaintIssue extends JFrame
{
public TryRepaintIssue(){
thePanel panel = new thePanel();
add(panel);
setSize(1000,1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public void paint(Graphics g){
super.paint(g);
g.fillOval(100,500,100,100);
}
public static void main(String[] args){
new TryRepaintIssue();
}

public static class thePanel extends JPanel{
private int y = 100, vector = 1;
public thePanel(){
JButton button = new JButton("Play");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
y += vector;
repaint();
}
});
add(button);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.fillOval(100,y,100,100);
}
}
}

最佳答案

The JFrame components disappeared.

组件不会消失。按钮和面板仍然显示。

我认为你的意思是黑色圆圈的自定义绘画消失了。

I don't understand why is this happening

框架的paint()方法负责绘制框架的所有子组件。因此,它会重新绘制您添加到框架中的 JPanel,而框架又会绘制您添加到面板中的 JButton。

然后在面板顶部绘制黑色圆圈。

当您单击按钮时,您仅重新绘制“面板”,从而导致绘制 JButton 和红色圆圈。

您丢失了黑色圆圈的绘制,因为您不再调用绘制该圆圈的代码。

如果您希望保留黑圈,您有几个选择:

  1. 最好的解决方案是不要覆盖框架上的paint()。相反,在面板中进行所有自定义绘画。所以画黑色和红色圆圈。

  2. 在 ActionListener 代码中重新绘制整个框架:

    //repaint();
    SwingUtilities.windowForComponent(button).repaint();
  3. 按照 Tom 的回答中的建议使用玻璃板。

关于Java repaint() 方法问题。重新绘制 JPanel 将消失 JFrame 中绘制的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60111888/

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