2014-05-23 127 views
0

下面的代码显示了打开图像时,用户应该能够使用箭头键放大和缩小图像。但是,当我放大我得到如下图:ImageJ zoom不刷新图像

enter image description here

我希望有人能看到我错了原因,当我移动帧(有点像清爽型),那么图片是好的,但如果你不要移动它,然后这就是你所看到的。我想解决这个问题,即使你不移动框架的照片仍然可以。提前致谢。

这里是它包含的ImageJ的变焦类的调用主类:

zoom = new JMenu("Zoom"); 
    zoom.setEnabled(false); 

    JMenuItem in = new JMenuItem("Zoom In"); 
    in.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, ActionEvent.ALT_MASK)); 
    in.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      // TODO Auto-generated method stub 

      MyInternalFrame selectedFrame = (MyInternalFrame) desktop.getSelectedFrame(); 
      Zoom z = new Zoom(selectedFrame.getImage()); 
      String args = "in"; 
      z.run(args); 
     } 

    }); 

    JMenuItem out = new JMenuItem("Zoom Out"); 
    out.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, ActionEvent.ALT_MASK)); 
    out.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      // TODO Auto-generated method stub 
      MyInternalFrame selectedFrame = (MyInternalFrame) desktop.getSelectedFrame(); 
      Zoom z = new Zoom(selectedFrame.getImage()); 
      String args = "out"; 
      z.run(args); 
     } 

    }); 

    zoom.add(in); 
    zoom.add(out); 

我也有一个构造函数添加到变焦所以它会拿我的定制GUI打开图像(这是在变焦类):

ImagePlus imp; 
public Zoom (ImagePlus img){ 
    imp = img; 
} 

在自定义窗口类中,当图像被打开,我有一个组件监听器,调整图像大小以适应帧尺寸和工作得非常好(我不知道这是问题):

  @Override 
    public void componentResized(ComponentEvent arg0) { 
     // TODO Auto-generated method stub 
     Rectangle rect = desktop.getSelectedFrame().getBounds(); 
     MyInternalFrame f = (MyInternalFrame) desktop.getSelectedFrame(); 
     f.getImage().getCanvas().fitToWindow(rect); 
     System.out.println("resized- the real one"); 
    } 

在同一个班级,这里就是将图像添加到帧:

  JPanel panel = new JPanel(); 

     ImageCanvas c = new ImageCanvas(image); 
     c.getImage(); 

     //panel2.add(new JLabel(new ImageIcon(c.getImage()))); 
     m = new ImageWindow(image); 

     Image n = new Image(); 
     //frame = new MyInternalFrame(title, img, save,m); 
     //ImageCanvas c = m.getCanvas(); 
     ImagePlus im = new ImagePlus(); 
     im.setImage(image); 

     String [] array = title.split("/"); 
     //System.out.println("in manager: "+array[5]); 
     //image.setTitle(path); 
     frame = new MyInternalFrame(image.getTitle(), image, save, title); 

     m.centerNextImage(); 
     //image.getCanvas().setScaleToFit(true); 

     panel.add(m.getCanvas()); 
     panel.setBackground(Color.white); 
     frame.add(panel); 
     frames.add(frame); 

     frame.setVisible(true); 
     frame.setAutoscrolls(true); 
     frame.setAutoscrolls(true); 
     //frame.setOpaque(true); 
     frame.setResizable(true); 
     desktop.add(frame); 

回答

0

我不明白你是如何定义类MyInternalFrame和ImageCanvas背景。

我建议你检查代码:

第一步:您可以覆盖paintComponent()方法,并用图形对象的

f.getImage().getCanvas().fitToWindow(rect); 

到面板或其他组件上调整大小的图像scale()和translate()方法来调整图像的大小。

step2:调用面板的repaint()方法更新面板。

这真的会起作用。