2017-10-26 15 views
1

JPanel을 사용하여 캔버스에서 마우스로 페인트하려고합니다. 지금까지 모든 것이 잘 작동합니다. 그릴 수있어. 나는 내가 선택한 것을 색으로 설정할 수 있습니다. 그러나 단추를 클릭 할 때 단추가 첨부 된 모든 색으로 변경되도록하려면 노력하고 있습니다.JPanel 마우스로 그리는 색상 변경

검은 색으로 그리면 "파란색"단추가 눌려지면 검은 색 대신 파란색으로 바뀝니다 ... 나는 어디서 잘못 가고 있는지 확실하지 않습니다. Heres 내 paintComponent 부분.

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

    button1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (e.getSource() == button1) 
       g.setColor(Color.BLUE); 
     } 
    }); 

    for (Point point : points) 
     g.fillOval(point.x, point.y, 4 , 4); 
} 
+0

그 모든 것이 필요합니다. '{'또는'}'앞의 공백 행은 일반적으로 중복됩니다. –

답변

2

아니요, 아니요, 아니요. 페인트 방법 내부의 버튼에 ActionListener을 추가하는 이유는 무엇입니까? 페인트 방법은 페인트 관리자가 12 번 이상 빠르게 호출 할 수 있습니다. 이제는 아무 것도하지 않을 버튼에 12 개 이상의 ActionListener이 등록되었습니다.

원하는 페인트 색을 저장할 수있는 필드를 만드는 것으로 시작하십시오. ActionListener을 버튼에 등록하십시오. 아마도 클래스 생성자를 통해 "페인트 색상"을 변경하고 새로운 페인트 사이클을 트리거합니다. 라고하면 paintComponent, 더 나은 이해 그림이 실제로 스윙에서 작동하는 방법으로 얻을 수 Painting in AWT and Swing 가서 Performing Custom Painting를 읽고, 이제 원하는 페인트 색상

private Color paintColor = Color.BLACK; 

protected void setupActionListener() { 
    button1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (e.getSource() == button1) { 
       paintColor = Color.BLUE; 
       repaint(); 
      } 
     } 
    });  
} 

@Override 
public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    g.setColor(paintColor); 
    for (Point point : points) 
     g.fillOval(point.x, point.y, 4 , 4); 


} 
을 적용 소스 코드에서 공백의 하나의 빈 줄이

+0

고마워요! 이것은 1 톤을 도왔다! 확실히 확실한 멍청한 놈의 자바 기술이 ... Lol – user2951723

+1

한 가지 더 물어볼 수 있습니까? 이 방법은 훌륭하게 작동했지만, 이미 그려진 것이 무엇이든간에 새로운 색상이 바뀌면 변경되지 않습니다. 파란색으로 그려면 빨간색으로 바뀌면 파란색으로 그려지기를 바랍니다. 그러나 대신 모든 것이 빨간색으로 바뀝니다. – user2951723

+0

더 큰 질문 - 두 가지 기본 옵션이 있습니다. 포인트를 캡쳐 할 때 사용 된 색상을 기록하거나, 사용자 정의 오브젝트로 래핑하거나, BufferedImage와 같이 뒷면 버퍼에 페인트 한 다음이 페인트를 'paintComponent' 메소드로 페어링하십시오. – MadProgrammer