下面的代码显示了打开图像的时间,用户应该可以使用箭头键放大和缩小图像。但是当我缩放时,我得到以下图片:
我希望有人可以看到我出错的原因,因为当我移动框架时(有点像清爽),然后图片没问题但是如果你不移动它然后这就是你所看到的。我想解决这个问题,即使你不移动框架,图片仍然没问题。提前谢谢。
这是包含对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 :(得分:0)
我没有了解如何定义MyInternalFrame类和ImageCanvas的背景。
我建议您查看代码:
f.getImage().getCanvas().fitToWindow(rect);
要调整面板或其他组件上的图像大小:
步骤1:您可以覆盖paintComponent()方法,并使用图形对象的scale()和translate()方法来调整图像大小。
第2步:调用面板的repaint()方法来更新面板。
这确实有用。