2012-06-01 5 views
1

일부 도형을 페인팅하려고하는데 선택 확인란의 이벤트로 변화하는 색상을 추가해야합니다. 체크 박스를 선택하면 색상이 바뀌는 새로운 방법을 쓰는 방법 tmp? 내가 JCheckBox에 만들체크 박스에 이벤트를 추가하는 방법은 무엇입니까?

방법 :

public class Paint extends JFrame { 
public Paint() { 

    JCheckBox redBtn = new JCheckBox("Red"); 

} 

}

그린 사각형의 색상 방법 : 편집

private class PaintSurface extends JComponent { 
    public void paint(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g; 
     Color tmp = null; //If no checkbox selected, no color 

     for (Shape s : shapes) 
      g2.setPaint(tmp); //Here is color of shape 
      g2.fill(s); 
     } 
    } 

:

이 어떻게 ActionListener를 정상적으로입니다 어떻게 생겼어?

ActionListener actionListener = new ActionListener() { 
       public void actionPerformed(ActionEvent actionEvent) { 
        JCheckBox a = (JCheckBox) actionEvent.getSource(); 
       Color tmp = redBtn.isSelected() ? Color.RED : null; 
       } 
}; 
+0

는'대신'페인트 (그래픽 g)' – mKorbel

+0

이 똑똑한 물건,'redBtn.isSelected()의'의 paintComponent (그래픽 g)을 사용합니까? SELECTED_COLOR : null;은 현실 세계에서 눈살을 찌푸리게됩니다 ... 불행히도 여전히 발생합니다. – mre

+0

Mathew : tmp 변수가 actionPerformed 메소드의 로컬이므로 코드가 작동하지 않으므로 paintComponent 메소드에 표시되지 않습니다. tmp를 클래스의 인스턴스 필드로 만든다면, 가능하다. JComponent를 다시 칠하기 위해서'repaint()'를 호출 할 필요가 있습니다. –

답변

5

당신은 단순히 그리기 JComponent의에 repaint()를 호출하는 JCheckBox에에 ActionListener를 추가 할 수 있습니다. 그런 다음 paintComponent 내부에서 isSelected()을 호출하여 확인란의 상태를 확인하고 부울 결과에 따라 색상을 지정합니다.

대답 (+1)에서 언급 한 바와 같이
Color tmp = redBtn.isSelected() ? SELECTED_COLOR : null;