【发布时间】:2014-05-23 15:34:16
【问题描述】:
下面的代码显示了当打开图像时,用户应该能够使用箭头键放大和缩小图像。但是当我放大时,我得到以下图片:
我希望有人能在我移动框架时看到我哪里出错了(有点像刷新),那么图片就可以了,但如果你不移动它,那么这就是你所看到的。我想解决这个问题,所以即使你不移动框架,图片仍然可以。提前致谢。
这是包含对 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);
【问题讨论】:
标签: java swing user-interface imagej