作者H45 (!H45)
站内java
标题Re: [急问] Repaint无作用..
时间Sat Nov 10 21:36:18 2007
要不要改用 Canvas?
画布:
public class MyCanvas extends Canvas {
private Image image;
public void paint(final Graphics g) {
if (this.image != null) {
g.drawImage(this.image, 0, 0, this);
}
}
public void setImage(final Image image) {
this.image = image;
}
}
事件控制器:
private MyCanvas imageCanvas;
protected void readImage() {
final JFileChooser fileChooser = new JFileChooser();
final int state = fileChooser.showOpenDialog(null);
if (JFileChooser.APPROVE_OPTION == state) {
final File selectedFile = fileChooser.getSelectedFile();
try {
final BufferedImage image = ImageIO.read(selectedFile);
this.imageCanvas.setImage(image);
this.imageCanvas.repaint();
} catch (final IOException e) {
e.printStackTrace();
}
}
}
图形介面 (JApplet):
private MyCanvas imageCanvas;
public void init() {
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(this.imageCanvas, BorderLayout.CENTER);
}
※ 引述《mabi (魔人)》之铭言:
: 我想写一个button 按下去後图片会移动
: public class MyPanel extends JPanel 里
: public void paintComponent(Graphics g)
: {
: g.drawImage(back, 0, 0, this);
: g.drawImage(abc,x,325,this);
: }
: public void paint(Graphics g)
: {
: g.drawImage(back, 0, 0, this);
: g.drawImage(abc,x,325,this);
: }
: back和abc都是Image
: Button 的 Handler
: class buttonAction implements ActionListener
: {
: public void actionPerformed(ActionEvent event)
: {
: Object object = event.getSource();
: if (object == button)
: button1_ActionPerformed(event);
: }
: }
: void button1_ActionPerformed(java.awt.event.ActionEvent event)
: {
: button.setText("赛跑中");
: button.setEnabled(false);
: move();
: }
: public void move()
: {
: for (int i=0;i<50;i++)
: {
: image.setLocation(x+i, y);
: image.repaint();
: try
: {
: Thread.sleep(50);
: }
: catch(Exception ex) {}
: }
: }
: image为Mypanel
: 作出的结果为Button按下去後,图片一直没更新,直到结束最後一个画面才更新...
: 若小弟表达的不好这里有完整程式http://momo26.myweb.hinet.net/RSAJava.rar
: 谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 mabi:谢谢H45大但我使用Canvas後 还是没解决也... 11/10 22:57
2F:→ mabi:button动作里的for还是不能repaint... 还是我会错意了 谢谢! 11/10 23:00
3F:推 slalala:请用Thread把repaint的逻辑运算分开 11/10 23:32
4F:→ slalala:我习惯实作Runable 11/10 23:33
5F:推 mabi:问题已解决了 感谢H45大和slalala 谢谢! 11/11 00:41
6F:推 slalala:结果勒?我也是新手 想知道原因(敲碗) 11/11 02:06
7F:推 H45:感觉我好像没有提到重点 XD 11/11 11:34
9F:→ slalala:果然是这样 感觉视觉外观 逻辑两样要分开~_~ 11/11 15:48
10F:→ slalala:之前我做processBar也遇到这样的问题/ \ 11/11 15:48