作者yuntechvb (云宝宝)
看板java
标题[J2SE] canvas物件显示图片的问题
时间Fri Jul 17 00:28:16 2009
各位大大好
小弟是刚接触swing的新手
想请问一下
canvas物件
利用方法paint将图片载入
但是图片大过视窗大小
图片就会被剪掉
有何方法可以避免这个问题呢?
补上一些漏掉的讯息
因为我是要做类似地图的功能
所以会有拖曳的作动
在拖曳的事件下有加入repaint的动作
不过还是无法让被裁掉的部份复原
例如:
今天我的图有800*800
jframe为canvas的container
jframe的大小为500*500
canvas的大小和图的大小一样大(800*800)
canvas物件有加入滑鼠拖曳的动作
不过执行後canvas只能显示出500*500
其他部份都变成预设的底色
附上程式码:
public class j5_test{
ImageIcon temp = new ImageIcon("bg.jpg");
JFrame f_main = new JFrame("");
int x1,y1,newx,newy;
float scale=1f;
Canvas canvas1 = new Canvas(){
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d=(Graphics2D) g;
AffineTransform at=new AffineTransform();
at.scale(scale,scale);
g2d.setTransform(at);
g2d.drawImage(temp.getImage(), at, null);
}
};
j5_test(){
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
f_main.getContentPane().setLayout(null);
f_main.setBounds(0, 0, 300, 300);
f_main.addWindowFocusListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
canvas1.setBounds(-50, -50, 500, 500);
f_main.getContentPane().add(canvas1);
f_main.show();
canvas1.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
x1=evt.getX();
y1=evt.getY();
}
});
canvas1.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent evt) {
newx = evt.getX()-x1+canvas1.getX();
newy = evt.getY()-y1+canvas1.getY();
if (newx >= 0){
newx = 0;
}
if (newy >= 0){
newy = 0;
}
if (newx+canvas1.getWidth() <= f_main.getWidth()){
newx = canvas1.getX();
}
if(newy+canvas1.getHeight() <= f_main.getHeight()){
newy = canvas1.getY();
}
canvas1.setLocation(newx, newy);
}
});
}
public static void main(String[] args){
j5_test Test = new j5_test();
}
}
随便放一张大於300*300的图到目录下就可以测试了,档名bg.jpg
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.163.207.124
1F:→ sbrhsieh:这应该不算问题吧~~~~看你要怎麽做罢了 07/17 00:44
2F:→ yuntechvb:有件事忘了说 因为要做类似地图的功能 所以会有拖曳的动 07/17 00:50
※ 编辑: yuntechvb 来自: 218.163.207.124 (07/17 00:56)
3F:→ yuntechvb:作 (已将文章内容修改) 07/17 00:57
4F:→ sbrhsieh:请写一个简单的程式,只有一个视窗放一个 canvas 秀图 07/17 13:30
5F:→ sbrhsieh:canvas 可以滑鼠拖曳,放上程式码来看看。 07/17 13:31
※ 编辑: yuntechvb 来自: 218.163.249.103 (07/17 21:13)
※ 编辑: yuntechvb 来自: 218.163.249.103 (07/17 21:15)