2012-06-01 66 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

使用'的paintComponent(圖形G)',而不是'油漆(圖形G)' – mKorbel

+0

這個聰明的東西,'redBtn.isSelected()? SELECTED_COLOR:null;'在現實世界中皺起了眉頭......不幸的是它仍然存在。 – mre

+0

Mathew:不,你的代碼不會工作,因爲你的tmp變量對於actionPerformed方法是本地的,因此對於paintComponent方法是不可見的。如果你把tmp作爲這個類的一個實例字段,那麼是的,它可能會工作。你仍然需要調用'repaint()'來使JComponent自己重繪。 –

回答

5

你可以一個ActionListener添加到它只是呼籲繪製的JComponent repaint()對JCheckBox。然後在paintComponent內部,通過調用​​來檢查複選框的狀態,並將Color設置爲布爾結果。

在回答(+1)提到
Color tmp = redBtn.isSelected() ? SELECTED_COLOR : null; 
相關問題