2016-12-02 2 views
-3

내 클래스는 ChangeListener를 구현합니다. 브러시의 크기를 변경할 수 있도록 슬라이더를 만들고 brush_size라는 변수가 있지만 stateChanged 메서드에서 brush_size를 어떻게 바꿀 수 있는지 알 수 없습니다. brushSize 변수가 모델자바 브러시 크기를 변경하는 방법

public class PaintBrushTool implements Tool, ChangeListener { 

    private PaintBrushToolUI ui; 
    private ImageEditorModel model; 
    private int brush_size = 5; 
    private JSlider sizeSlider; // new slider 

    public PaintBrushTool(ImageEditorModel model) { 
     this.model = model; 
     ui = new PaintBrushToolUI(); 

     JSlider sizeSlider = new JSlider();  // initialize the slide 
     sizeSlider.addChangeListener(this);  // make this class listen to the PaintBrushToolUI class 
    } 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mousePressed(MouseEvent e) { 
     model.paintAt(e.getX(), e.getY(), ui.getBrushColor(), brush_size); 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseEntered(MouseEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseExited(MouseEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     model.paintAt(e.getX(), e.getY(), ui.getBrushColor(), brush_size); 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public String getName() { 
     return "Paint Brush"; 
    } 

    @Override 
    public JPanel getUI() { 
     return ui; 
    } 
    @Override 
    public void stateChanged(ChangeEvent e) { 
     // what should i put in here? 
    } 

} 
+0

..... @Override 공공 무효 따라서, stateChanged (ChangeEvent를 전자) { brush_size ++; } – Blaatz0r

+0

@ Blaatz0r : 너무 간단합니다. 슬라이더는 ** 및 ** 값의 증가를 증가시킬 수 있으며 그 값은 보통 +1로만 증가하는 것이 아닙니다. –

+0

너무 간단한 답변을 좋아합니다 – Blaatz0r

답변

1

개최 안 : 여기 내 코드? 그럼에도 불구하고 getValue()을 호출하여 ChangeListener 내의 JSlider에서 값을 가져 와서 브러시 크기 변수를 설정하는 데 사용하십시오. 모델에 의해 보유되고있는 경우는, JSlider로부터 값을 취득한 후에 모델에 setBrushSize(value)를 호출 해, 모델에 그 메소드를 지정해주세요.

코드에 M-V-C 또는 Model-Viewer-Controller 유형 구조가 사용 된 것 같습니다. 그렇다면 모델의 setter 메서드를 호출하면 모델 관찰자에 대한 알림이 트리거되어 결국 뷰가 변경됩니다. 그럼 예를 들어

+0

중첩 for 루프를 사용해야합니까? – user6428015

+0

@ user6428015 : 이유가 무엇입니까? 나는 당신이 그것을 어디에서 사용 하는지를 보지 못합니다 - 설명하십시오. 어떤 배열이나 컬렉션 (코드에 아무 것도 표시하지 않음)을 반복할까요? –

+0

늦게까지 죄송합니다. 이제 getValue()가 생겼고 브러시 크기를 변수로 설정했습니다. 하지만 여전히 효과가 없습니다. 여기 내 코드는 다음과 같습니다 public void stateChanged (ChangeEvent e) { \t \t JSlider source = (JSlider) e.getSource(); \t \t int sizeValue = source.getValue(); \t \t brush_size = sizeValue; \t} – user6428015

관련 문제