作者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
推 mabi:謝謝H45大但我使用Canvas後 還是沒解決也... 11/10 22:57
→ mabi:button動作裡的for還是不能repaint... 還是我會錯意了 謝謝! 11/10 23:00
推 slalala:請用Thread把repaint的邏輯運算分開 11/10 23:32
→ slalala:我習慣實作Runable 11/10 23:33
推 mabi:問題已解決了 感謝H45大和slalala 謝謝! 11/11 00:41
推 slalala:結果勒?我也是新手 想知道原因(敲碗) 11/11 02:06
推 H45:感覺我好像沒有提到重點 XD 11/11 11:34
→ slalala:果然是這樣 感覺視覺外觀 邏輯兩樣要分開~_~ 11/11 15:48
→ slalala:之前我做processBar也遇到這樣的問題/ \ 11/11 15:48