首先,我重绘了两个jpanel,分为A和B,然后把B添加的A中。
A中paint了一个静态图片作为背景;
B中初始化时paint的是一张静态图片,这个时候没有无限repaint;
当我通过鼠标事件把B中的图片设置成一张动态图后,我都没有对B进行repaint,A和B各自就开始调用repaint,无限循环,这是为什么?
还有当通过鼠标事件把B中的图片重新设置成静态图片后,A和B还是在无限调用repaint,这就让我更糊涂了。
希望各位前辈帮帮忙,谢谢!
A中paint了一个静态图片作为背景;
B中初始化时paint的是一张静态图片,这个时候没有无限repaint;
当我通过鼠标事件把B中的图片设置成一张动态图后,我都没有对B进行repaint,A和B各自就开始调用repaint,无限循环,这是为什么?
还有当通过鼠标事件把B中的图片重新设置成静态图片后,A和B还是在无限调用repaint,这就让我更糊涂了。
希望各位前辈帮帮忙,谢谢!
解决方案 »
- 有正则表达式学得比较好的么??
- 求1到500的和
- 取得文本行中某列数据的问题
- 在jsp中能不能利用超连接传一个表达式
- 关于密钥的问题?初学者大家来帮忙。
- 哪儿有侯捷翻译的《thinking in java2》中文版下载
- java函数参数是数组,可以不用另外定义个数组直接在函数上写个数组传进去吗?
- 在何处可下载有关java类库知识的内容?
- Graphics2D中的DrawString中输出的字体,能够设置字体的宽度和高度吗?
- Javamail收邮件转存到数据库里面去。要求支持各种mail格式,请问数据结构该如何定义?有人有源程序么?
- throw错误,各位大大能说一下这个throw为什么错误了吗
- 新手关于多线程的问题
public class HallJPanel extends JPanel implements MouseListener
{
public Image imgBg, dynamicImg, imgTable[];
public TableJPanel tjp[]; private int wid = 0;
private int hei = 0; private int x = 0;
private int y = 0;
private int w = 0;
private int h = 0; private Graphics2D g2d; public HallJPanel()
{
this.initImages(); this.initTable();
this.addML();
} // initialize the images
public void initImages()
{
try
{
imgBg = ImageIO.read(new File("images\\background\\hallCarpet.png")); imgTable = new Image[10];
for (int i = 0; i < imgTable.length; i++)
{
imgTable[i] = ImageIO.read(new File("images\\table\\table-" + (i + 1) + ".png"));
} } catch (Exception e)
{
e.printStackTrace();
} // Attention : process the dynamic image with Toolkit , not ImageIO.read
dynamicImg = Toolkit.getDefaultToolkit().createImage("images\\table\\table-1.gif");
} // add mouseListener
public void addML()
{
this.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{ if (tjp[0].pressed)
{
tjp[0].pressed = false;
tjp[0].xGap = 0;
tjp[0].yGap = 0;
// 重新设置为静态图
tjp[0].setImg(imgTable[0]);
tjp[0].repaint();
} }
});
}
public void initTable()
{
this.setLayout(null);
tjp = new TableJPanel[1];
tjp[0] = new TableJPanel(imgTable[0]);
tjp[0].addMouseListener(this);
tjp[0].setBounds(100, 100, 100, 100);
this.add(tjp[0]); } public void paintComponent(Graphics g)
{
super.paintComponent(g); wid = getWidth();
hei = getHeight(); g2d = (Graphics2D) g.create();
// 设置成动图后,这句话会无限打印
System.out.println(getWidth());
g2d.drawImage(imgBg, 0, 0, wid, hei, this); g2d.dispose();
} @Override
public void mouseClicked(MouseEvent e)
{
} @Override
public void mousePressed(MouseEvent e)
{
if (e.getSource() == tjp[0])
{
// 设置动图
tjp[0].setImg(dynamicImg);
}
} @Override
public void mouseReleased(MouseEvent e)
{
} @Override
public void mouseEntered(MouseEvent e)
{
}
}第二个JPanel
public class TableJPanel extends JPanel
{
public Image img; public int xGap = 0;
public int yGap = 0; public boolean pressed = false; private MouseAdapter ma;
private Graphics2D g2d; public TableJPanel(Image img)
{
this.img = img;
this.setCursor(Cursors.hand);
this.setOpaque(false);
this.initMouseAdapter();
this.addMouseListener(ma);
} // initialize the MouseAdapter
public void initMouseAdapter()
{
ma = new MouseAdapter()
{
@Override
public void mouseEntered(MouseEvent e)
{
if (!pressed)
{
xGap = 2;
yGap = 1;
repaint();
}
} @Override
public void mouseExited(MouseEvent e)
{
if (!pressed)
{
xGap = 0;
yGap = 0;
repaint();
}
} @Override
public void mousePressed(MouseEvent e)
{
pressed = true;
xGap = 5;
yGap = 3;
repaint();
}
};
} public void paintComponent(Graphics g)
{
super.paintComponent(g);
g2d = (Graphics2D) g.create();
// 设置动图后 , 这句话一直打印
System.out.println(getWidth());
g2d.drawImage(img, xGap, yGap, getWidth() - (2 * xGap), getHeight() - (2 * yGap), this);
g2d.dispose();
} // 设置图片
public void setImg(Image img)
{
this.img = img;
}
}