Функция PaintComponent продолжает работать - PullRequest
0 голосов
/ 27 мая 2018

Каким-то образом мне удалось сломать довольно простую часть моего приложения.Я создал панель, которая показывает поля, которые заполнены продуктами по алгоритму.Это должно решить проблему упаковки бункера.Под каждым полем находится небольшой текст «Содержание ...», который при наведении курсора покажет setToolTipText, в котором указывается, сколько процентов заполнено.Однако ...

... Каждый раз, когда я нажимаю на них, функция paintComponent просто запускается снова.В то время как буквально нет ни одного события мыши, и я просто не могу понять, ПОЧЕМУ это происходит.

public void paintComponent(Graphics g){
        super.paintComponent(g);
        setBackground(Color.LIGHT_GRAY);
        g.setColor(Color.BLACK);

        try {
            if (packedBoxes != null || packedBoxes.size() != 0) {
                drawboxWidth = (getWidth() / packedBoxes.size()) - (100 / packedBoxes.size()) - 5;
                drawboxHeight = (getHeight() / 2);

                //drawing products
                for (int i = 0; i < packedBoxes.size(); i++) {

                    int x = 50 + (drawboxWidth * i) + (i * 5);
                    int currentY = 50;

                    for (Item item : packedBoxes.get(i).getItems()) {
                        float productHeight = (float) item.height / (float) boxHeight;
                        float drawProductHeight = drawboxHeight * productHeight;
                        g.setColor(item.color);
                        g.fillRect(x, currentY, drawboxWidth, (int) drawProductHeight);
                        currentY += drawProductHeight;
                    }

                    int y = 50;
                    g.setColor(Color.BLACK);
                    g.drawRect(x, y, drawboxWidth, drawboxHeight);

                    boxLabels.add(new JLabel("Contents.."));
                    boxInfo.add("<html><font face=\"sansserif\"><h2>Box nr."+(i+1)+"</h2>" +
                            "Percentage filled: "+(int)(((float)packedBoxes.get(i).getUsedSize()/(float) boxHeight)*100)+ "% \n</html>");
                }

                for (int i = 0; i < boxLabels.size(); i++) {

                    int x = 50 + (drawboxWidth * i) + (i * 5);
                    int y = drawboxHeight + 100;

                    boxLabels.get(i).setBounds(x, y, drawboxWidth, 20);
                    boxLabels.get(i).setHorizontalAlignment(SwingConstants.CENTER);
                    boxLabels.get(i).setToolTipText(boxInfo.get(i));
                    this.add(boxLabels.get(i));
                }
            }
        } catch (NullPointerException ex) {
            //ex.printStackTrace();
        }
    }

Есть ли логическая причина, почему это происходит?Это заставляет arraylist boxLabels заполняться каждый раз, это означает, что boxLabels.size () также увеличивается на количество ящиков каждый раз.

Любая помощь приветствуется, я действительно понятия не имею, p

...