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