2017-04-25 10 views
0

私が達成したいのは、ユーザーが色(黒または赤)を選択できるようにする2つのボタンで、色に依存します。キャンバス上の長方形。 Canvasクラスのグラフィックの色を設定するために、ボタンに関連付けられたMouseListenerを関連付けることに問題があります。どこで色を定義すればよいですか?Java - 何をキャンバスに描画するか

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

class Can extends Canvas{ 
    int x,y; 
    ArrayList<Point> points = new ArrayList<Point>(); 
    Can(){ 
      super(); 
      addMouseListener(new MouseAdapter(){ 
       public void mousePressed(MouseEvent k){ 
        x = k.getX(); 
        y = k.getY(); 
        points.add(new Point(x,y)); 
        repaint(); 
       } 
     }); 
    } 
    public void paint(Graphics g){ 
     int x2, y2; 
     Graphics2D g2 = (Graphics2D) g; 

     g2.setColor(Color.black); //here is only black 
     for(Point p:points) 
     { 
      x2=(int)p.getX(); 
      y2=(int)p.getY(); 
      g2.fillRect(x2, y2, 10, 5); 

     } 
    } 
} 
class Win extends JFrame{ 
    Win(String name){ 
     super(name); 
     setLayout(new GridLayout()); 
     JPanel p1 = new JPanel(new FlowLayout()); 
     p1.setBackground(Color.cyan); 

     CheckboxGroup cg = new CheckboxGroup(); 
     Checkbox red = new Checkbox("red", cg, true); 
     Checkbox black = new Checkbox("black", cg, false); 
     p1.add(red); 
     p1.add(black); 
     add(p1); 

     Can k = new Can(); 
     add(k); 

     red.addMouseListener(new MouseAdapter(){ 
      public void mousePressed(MouseEvent me){ 

       System.out.println("Mouse click on red");  
      }  
     }); 

     black.addMouseListener(new MouseAdapter(){ 
      public void mousePressed(MouseEvent me){ 

       System.out.println("Mouse click on black"); 
      }  
     }); 

     setSize(600, 400); 

     setResizable(false); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 
} 

public class ItM { 

    public static void main(String[] args) { 

     Win o = new Win("that's the window"); 

     o.setVisible(true); 
    } 
} 
+0

'paint()'では、チェックボックスの状態を確認します。次に、どちらが選択されているかに基づいて色を選択します。 –

+0

しかし、どうすれば確認できますか? Checkboxの状態はCanvasクラスで表示されますか? – whatfor

答えて

3

アプリケーションはSwingコンポーネントではなく、AWTコンポーネントを使用する必要がありますので、あなたがSwingタグを使用しているすべての最初の。スイングコンポーネントは、スイングコンポーネントがJPanelであるキャンバスを除いて、 "J"で始まります。次に、paint()ではなくpaintComponent(...)メソッドをオーバーライドする必要があります。

あなたは別の色でオブジェクトをペイントしたいなら、あなたは2つのオプションがあります。

  1. はBufferedImageのに直接ペイントを。次に、形状が作業の例についてはサイズ/位置/色

含む塗装すべき形状に関する情報を含むオブジェクトのArrayListの、から現在選択されている色

  • 塗料で塗装されどちらのアプローチもCustom Painting Approachesをチェックしてください。