2012-06-01 38 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; 
相关问题