2013-03-22 85 views
-2

我在想如果可以在applet上畫線。我從外部來源加載小程序,但是我想繪製光標在屏幕上的行。使用paint或repaint方法在applet上畫線JAVA

有人能告訴我我該怎麼做嗎?

下面是一個例子。

g.drawLine(mouse.getLocation().x - 6, mouse.getLocation().y, 
      mouse.getLocation().x + 6, mouse.getLocation().y); 
      g.drawLine(mouse.getLocation 

      ().x, mouse.getLocation().y - 6, 


      mouse.getLocation().x, mouse.getLocation().y + 6); 
+1

1.使用JApplet 2.放置JPanel 3.覆蓋JPanel的paintComponent,4.閱讀[Oracle教程](http://docs.oracle.com/javase/tutorial/2d/index.html),5。閱讀相關信息(右側此網站,bellow carrers圖標),6.如果沒有成功,發佈[SSCCE](http://sscce.org/) – mKorbel 2013-03-22 08:51:33

+0

我似乎無法使用JApplet加載它。它不能被施放到JApplet顯然 – user2059879 2013-03-22 09:35:11

回答

2

我想知道是否有可能在一個applet畫線。

當然可以。只需在面板中放置一個面板,添加一個鼠標運動監聽器並根據事件在該面板上繪製。

小例子說明本

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.lang.reflect.InvocationTargetException; 
import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JApplet; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TestAppletDraw extends JApplet { 

    public static class MyDrawPanel extends JPanel { 

     private List<Point> points = new ArrayList<Point>(); 

     public MyDrawPanel() { 
      setBackground(Color.WHITE); 
      MouseAdapter listener = new MouseAdapter() { 

       @Override 
       public void mouseClicked(MouseEvent e) { 
        points.clear(); 
        repaint(); 
       } 

       @Override 
       public void mouseMoved(MouseEvent e) { 
        points.add(e.getPoint()); 
        repaint(); 
       } 
      }; 
      addMouseListener(listener); 
      addMouseMotionListener(listener); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(300, 300); 
     } 

     @Override 
     protected void paintComponent(java.awt.Graphics g) { 
      super.paintComponent(g); 
      Point p1 = null; 
      Point p2 = null; 
      g.setColor(Color.BLUE); 
      for (Point p : points) { 
       p2 = p1; 
       p1 = p; 
       if (p1 != null && p2 != null) { 
        g.drawLine(p1.x, p1.y, p2.x, p2.y); 
       } 
      } 
     } 
    } 

    protected void initUI() { 
     add(new MyDrawPanel()); 
     validate(); 
    } 

    @Override 
    public void init() { 
     super.init(); 
     try { 
      SwingUtilities.invokeAndWait(new Runnable() { 
       @Override 
       public void run() { 
        initUI(); 
       } 
      }); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

NB:使用緩衝的圖像而不是存儲點可以是在一段時間(否則點列表可以變得巨大)長時間更具擴展性的,但它需要照顧面板尺寸增加。

+0

它似乎還沒有爲我工作... – user2059879 2013-03-22 11:41:50

+0

[交叉點: - )](http://www.coderanch.com/t/607872/GUI/java/繪畫 - 鼠標移動 - 小程序) – mKorbel 2013-03-22 11:45:16

+0

不交叉任何東西?我在另一個論壇上問,因爲你們沒有回覆... – user2059879 2013-03-22 11:55:05

相關問題