作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现放大功能。
我当前的问题是:每次我单击放大时,面板上都会出现一个新的缩放图像。但原始图像仍然在面板上。所以我尝试使用重绘方法。问题是,我可以看到新图像在屏幕上闪烁,然后消失。我是否以错误的方式使用代码?目前代码是这样的:
双击放大:
panel_Show.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
int count = arg0.getClickCount();
if (count == 2 && !arg0.isConsumed()) {
int x = arg0.getX();
int y = arg0.getY();
zoomin(x, y);
}
}
放大方法:
protected void zoomin(int x, int y) {
if (allowZoomIn && zoomLevel < zoomLimit) {
zoomLevel = zoomLevel + 1;
int width = panel_Show.getWidth();
int height = panel_Show.getHeight();
centerX = centerX - (width/2 - x)/alpha;
centerY = centerY - (height/2 - y)/alpha;
alpha = alpha * zoomLevel;
paintSpace(zoomLevel);
}
}
绘制点:
protected void paintSpace(int level) {
panel_Show.repaint();
pointDrawer = (Graphics2D) panel_Show.getGraphics();
Iterator<Integer> keyIterator = xCordTable.keySet().iterator();
while (keyIterator.hasNext()) {
int id = keyIterator.next();
double xcord = xCordTable.get(id);
double ycord = yCordTable.get(id);
//below is just some logic code to control how to paint points
int size = freqTable.get(id);
paintStar(xcord, ycord, Color.BLUE, size * level);
}
}
最佳答案
您必须使用panel.remove(image)
来删除原始图像。然后你必须添加一个新图像,然后repaint()
缩放建议我宁愿使用 CardLayout并将原始图像安全地保存在一张卡中
关于java - 关于JPanel重绘的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10236103/
我是一名优秀的程序员,十分优秀!