Java PaintComponent函数一直在运行

Java PaintComponent函数一直在运行,java,paintcomponent,Java,Paintcomponent,不知怎的,我已经设法打破了我的应用程序的一个相当简单的部分。我创建了一个显示框的面板,框中填充了通过算法生成的产品。这是为了解决箱子包装问题。每个框下都有一个小文本“Contents…”,悬停时将显示SetToolTiptText,其中包含框中填充的百分比。然而 …每次我点击它们,paintComponent函数就会再次运行。而实际上,没有一个鼠标事件,我只是不明白为什么会发生 public void paintComponent(Graphics g){ super.paint

不知怎的,我已经设法打破了我的应用程序的一个相当简单的部分。我创建了一个显示框的面板,框中填充了通过算法生成的产品。这是为了解决箱子包装问题。每个框下都有一个小文本“Contents…”,悬停时将显示SetToolTiptText,其中包含框中填充的百分比。然而

…每次我点击它们,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();
        }
    }
公共组件(图形g){
超级组件(g);
立根背景(颜色:浅灰色);
g、 设置颜色(颜色为黑色);
试一试{
if(packedBoxes!=null | | packedBoxes.size()!=0){
drawboxWidth=(getWidth()/packedBoxes.size())-(100/packedBoxes.size())-5;
drawboxHeight=(getHeight()/2);
//绘图产品
对于(int i=0;i
这有什么合乎逻辑的原因吗?这会导致boxLabels arraylist每次都被填满,这意味着boxLabels.size()每次也会增加框的数量


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

我不明白,点击就是鼠标事件…@RobinGreen确切地说,这就是为什么我不知道为什么要运行它,因为没有鼠标事件,但点击就是鼠标事件,你说你点击了它们。所以有一个鼠标事件。