PaintComponent函数一直在运行

时间:2018-05-27 19:01:09

标签: java paintcomponent

不知何故,我成功地打破了我应用程序的一个非常简单的部分。我创建了一个显示框的面板,这些框通过算法填充产品。这是为了解决Bin装箱问题。在每个框下面是一个小文本,“内容...”,在悬停时将显示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();
        }
    }

有没有合理的理由说明为什么会这样?这会导致boxLabels arraylist每次都填满,这意味着boxLabels.size()每次都会增加一个盒子的数量。

感谢任何帮助,我真的不知道了; p

0 个答案:

没有答案