不知何故,我成功地打破了我应用程序的一个非常简单的部分。我创建了一个显示框的面板,这些框通过算法填充产品。这是为了解决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