2011-09-09 4 views
3

私は簡単なプログラムで助けが必要です。プログラムマークをクリックすると、私はそれをマークします。私は過去の動きを見たいと思います。ペイントの鉛筆のように。JFrameを再描画しない方法は?ちょうどペイント

クラスTest.java

import java.awt.*; 
import java.awt.event.*; 
import java.util.Scanner; 
import java.io.IOException; 
import java.lang.*; 
import javax.swing.*; 

public class Test{ 

    JFrame frame; 

    public static void main(String[] args){ 
     Test smallTest = new Test(); 
     smallTest.letsDoIt(); 
    } 

    public void letsDoIt(){ 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton buttonOfTheEnd = new JButton("EXIT"); 
     buttonOfTheEnd.addActionListener(new theEndListener()); 

     graphPanel panelR = new graphPanel(); 
     panelR.setBackground(Color.WHITE); 
     frame.getContentPane().add(BorderLayout.CENTER, panelR); 
     frame.getContentPane().add(BorderLayout.SOUTH, buttonOfTheEnd); 
     frame.setSize(500,500); 
     frame.setVisible(true); 


     frame.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 

       frameMouseClicked(evt); 

      } 
     }); 

    } 

    void frameMouseClicked(java.awt.event.MouseEvent evt) { 


     System.out.println("("+MouseInfo.getPointerInfo().getLocation().x+", "+MouseInfo.getPointerInfo().getLocation().y+")"); 
     frame.repaint(); 

    } 

    class theEndListener implements ActionListener { 
     public void actionPerformed(ActionEvent zdarzenie){ 
      System.exit(0); 
     } 
    } 


    // public void paintComponent(Graphics g){ 
     // super.paintComponent(g); 
     // int wspX = MouseInfo.getPointerInfo().getLocation().x; 
     // int wspY = MouseInfo.getPointerInfo().getLocation().y; 

     // g.setColor(Color.RED); 
     // g.fillRect(wspX, wspY, 10, 10); 

    // 




} 

クラスgraphPanel

import java.awt.*; 
import javax.swing.*; 

class graphPanel extends JPanel{ 


    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 


     int locX = MouseInfo.getPointerInfo().getLocation().x - 10; 
     int locY = MouseInfo.getPointerInfo().getLocation().y - 30; 
     g.setColor(Color.ORANGE); 
     g.fillRect(locX, locY, 10, 10); 
     } 
} 

の助けに感謝します。

+0

してください([受け入れます] http://meta.stackexchange.com/questions/16721/how-does-受け入れ率 - 仕事/ 65088#65088)いくつかの答え! –

答えて

2

イメージにペイントして、graphPanelにペイントし、イメージをコンポーネントにペイントします。
イメージを消去しないと、すべての図面に添付されます。

class graphPanel extends JPanel{ 
    Image img; 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     if(img == null) { 
      img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR); 
      img.getGraphics().setColor(getBackground()); 
      img.getGraphics().fillRect(0, 0, getWidth(), getHeight()); 
     } 
     int locX = MouseInfo.getPointerInfo().getLocation().x - 10; 
     int locY = MouseInfo.getPointerInfo().getLocation().y - 30; 
     Graphics imgG = img.getGraphics(); 
     imgG.setColor(Color.ORANGE); 
     imgG.fillRect(locX, locY, 10, 10); 
     g.drawImage(img, 0, 0, this); 
    } 
} 
+0

1) 'ImageObserver'に' this'を使います。 2) 'if(img == null)チェックでコンポーネントWxHに対してイメージの幅と高さがチェックされない限り、コンポーネントはサイズ変更できません。 –

2

最近の場所はどこかに保存する必要があります。 A Listは良い選択です。ここで、画面のどこかをクリックすると、その場所がリストに追加され、画面を再ペイントする必要があるときは、保存されているすべての場所がペイントされます。これはモデルとビューを分離するようなものですモデルは2Dロケーションのリストです。ビューは画面にペイントしたものです)。

だから、どこか1つのリストを作成します。

// public static only to keep it simple!! 
public static List<Point> points = new ArrayList<Point>(); 

その後(!おかげで、oliholz)panelR代わりのframeにリスナーを追加します。

panelR.addMouseListener(new MouseAdapter() { 
    // ... 

などframeMouseClickedを書く:

void frameMouseClicked(MouseEvent evt) { 
    points.add(evt.getPoint()); 
    frame.repaint(); 
} 

内側paintComponent yo uは、リストを反復処理し、保存されているすべての場所を描く(再び!:非常にシンプルで減少し、improveable)を

g.setColor(Color.ORANGE); 
for (Point point:points) { // <- this is the list of stored points 
    g.fillRect(point.x, point.y, 10, 10); 
} 
+0

あなたのポイントにフレームからグラフへのオフセットがあります。 – oliholz

+1

'points.add(evt.getPoint());'を使用し、 'MouseListener'を' panelR'に追加してください。 – oliholz

+0

@oliholz - ありがとう! –

関連する問題