2017-04-25 4 views
0

내가 원하는 것은 사용자가 색상 (검정 또는 빨강)을 선택한 다음 색상에 따라 빨간색 또는 검은 색 모양을 그리는 두 개의 버튼입니다. 캔버스에 사각형. Canvas 클래스의 그래픽 색상 설정에 버튼이 연결된 MouseListener 관련 문제가 있습니다. 어디에서 색상을 정의해야합니까?자바 - 무엇을 캔버스에 그리게 할 것인가?

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

응용 프로그램이 스윙 구성 요소, AWT하지 구성 요소를 사용한다, 그래서 당신이 Swing 태그를 사용하는 첫째. 스윙 구성 요소는 Swing 구성 요소가 JPanel 인 Canvas를 제외하고는 "J"로 시작합니다. 그런 다음 paint()가 아닌 paintComponent(...) 메서드를 재정의해야합니다. BufferedImage의 직접

  1. 페인트 :

    당신이 다른 색으로 객체를 페인트하려면

    다음 두 가지 옵션이 있습니다. 그때 형상은 형상에 대한 정보를 포함하는 개체의 ArrayList를 행 페인트는 예를 사용하기위한 크기/위치/색

포함 그린 될

  • 현재 선택된 색으로 칠한 것 두 가지 방법 모두 Custom Painting Approaches을 확인하십시오.

  • 관련 문제