0

ズームイン機能を実装しようとしています。

そして、私の現在の問題は次のとおりです。ズームインをクリックするたびに、新しいズームイン画像がパネルに表示されます。ただし、元の画像はまだパネル上にあります。そこで、リペイント方式を使ってみました。問題は、新しい画像が画面上で点滅してから消えるのを見ることができるということです。コードを間違った方法で使用していますか?現在、コードは次のようになっています。

ダブルクリックしてズームインします。

    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);
    }
}
4

1 に答える 1

2

panel.remove(image)元の画像を削除するには、を使用する必要があります。次に、新しい画像を追加してから、repaint()

ズームの提案私はむしろCardLayoutを使用し、元の画像を1枚のカードで安全に保ちます

于 2012-04-19T20:30:39.030 に答える