編寫一個具有圖形使用者介面的Java程式
- 2022-10-25
import javax。imageio。*;
import javax。swing。*;
import java。awt。*;
import java。awt。geom。*;
import java。io。*;
/**
* @author Hardneedl
*/
class ImageZoom extends JFrame {
private static final Dimension minSize = new Dimension(300, 200);
private static final Dimension maxSize = new Dimension(1024, 768);
private static final Dimension preferredSize = new Dimension(600, 400);
public Dimension getMaximumSize() {return maxSize;}
public Dimension getMinimumSize() {return minSize;}
public Dimension getPreferredSize() {return preferredSize;}
public String getTitle() {return “Frame Title”;}
private class ImageCanvas extends JComponent{
private Image img;
private AffineTransform af=new AffineTransform();
private ImageCanvas(Image g,float s) {setImage(g);setScale(s);}
private void setImage(Image img){
this。img = img;
if (isVisible()) paintImmediately(getBounds());
}
protected void paintComponent(Graphics g) {
super。paintComponent(g);
if (img!=null) {
Graphics2D g2d = (Graphics2D)g。create();
g2d。drawImage(img,af,this);
}
}
private void setScale(float scale){
af = AffineTransform。getScaleInstance(scale,scale);
if (isVisible()) paintImmediately(getBounds());
}
};
private static ImageCanvas canvas;
private Image img;private float s;
ImageZoom(Image g,float s) throws HeadlessException {
img =g;this。s=s;
init();
doLay();
attachListeners();
}
private void init() {
canvas = new ImageCanvas(img,s);
}
private void doLay() {
Container container = getContentPane();
container。add(canvas,BorderLayout。CENTER);
pack();
}
private void attachListeners() {
setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);
}
public static void main(final String[] args) {
SwingUtilities。invokeLater(
new Runnable(){
public void run() {
try {
new ImageZoom(ImageIO。read(new FileInputStream(args[0])),Float。parseFloat(args[1]))。setVisible(true);
} catch (IOException e) {
e。printStackTrace();
}
}
}
);
}
}