gpt4 book ai didi

java - JPanel 矩形覆盖;不会删除

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

我必须使用插入排序对包含 10 个数字的数组进行排序,并使用矩形(即条形图)显示它们。每次用户点击“下一步”时,它都会对数组中的下一个位置进行排序。控制台确认我的算法正在运行,矩形会变大/变小,但只会在另一个矩形的顶部覆盖自己;在绘制新矩形之前面板不会被删除。我怎样才能解决这个问题?以下是我的代码的重要部分:

 public class graphTest extends JFrame {

int[] numbers = {31, 19, 76, 24, 94, 99, 21, 74, 40, 73};
private JButton action = new JButton("Next");

public graphTest(){
final ImagePanel p1 = new ImagePanel();
add(action, BorderLayout.SOUTH);
p1.add(new ImagePanel(), BorderLayout.CENTER);
add(p1,BorderLayout.CENTER);
action.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Code for insertion sort
p1.repaint();
//System.out.println testing array
}
});
}

class ImagePanel extends JPanel{
public void paintComponent (Graphics g){
super.paintComponents(g);
g.setColor(Color.black);
for(int i = 0; i < 10; i++)
g.drawRect(10*i+10,200-numbers[i],7,numbers[i]);
}
}

public static void main(String[] args) {
JFrame frame = new graphTest();
frame.setTitle("Hi");
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

}

我已经通过在绘制常规矩形之前绘制一个大的 fillRect 来快速解决问题,但我仍然想学习如何正确地重绘 JPanel。

最佳答案

ImagePanel.paintComponent( Graphics g ) 中:

当您真正想要的是 super.paintComponent(g) 时,您调用了 super.paintComponents(g)

关于java - JPanel 矩形覆盖;不会删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9834352/

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