Перезапись прямоугольников JPanel;не удаляю - PullRequest
2 голосов
/ 23 марта 2012

Мне нужно отсортировать массив из 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.

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

В ImagePanel.paintComponent( Graphics g ):

вы звоните super.paintComponents(g), когда вы действительно хотите super.paintComponent(g)

2 голосов
/ 23 марта 2012

Я изменил super.paintComponents на super.paintComponent (нет 's' в конце), и, кажется, работает нормально.

...