Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将事件添加到复选框?_Java_Swing_User Interface_Graphics2d_Jcheckbox - Fatal编程技术网

Java 如何将事件添加到复选框?

Java 如何将事件添加到复选框?,java,swing,user-interface,graphics2d,jcheckbox,Java,Swing,User Interface,Graphics2d,Jcheckbox,我试图画一些形状,我需要添加改变颜色作为选择复选框的事件。如何编写在选中复选框时更改颜色的新方法 创建JCheckBox的方法: public class Paint extends JFrame { public Paint() { JCheckBox redBtn = new JCheckBox("Red"); } } 方法,其中为绘制矩形的颜色: private class PaintSurface extends JComponent { public void p

我试图画一些形状,我需要添加改变颜色作为选择复选框的事件。如何编写在选中复选框时更改颜色的新方法

创建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;
              }
};

您可以将ActionListener添加到JCheckBox,它只需在绘图JComponent上调用
repaint()
。然后在paintComponent内部,通过调用
isSelected()
检查复选框的状态,并根据布尔结果确定颜色

Color tmp = redBtn.isSelected() ? SELECTED_COLOR : null;

您可以将ActionListener添加到JCheckBox,它只需在绘图JComponent上调用
repaint()
。然后在paintComponent内部,通过调用
isSelected()
检查复选框的状态,并根据布尔结果确定颜色

Color tmp = redBtn.isSelected() ? SELECTED_COLOR : null;

如回答(+1)所述,使用
paintComponent(Graphics g)
而不是
paint(Graphics g)
这个聪明的东西,
redBtn.isSelected()?所选颜色:空在现实世界中是不受欢迎的…不幸的是,它仍然存在。Mathew:不,您的代码不会工作,因为您的tmp变量是actionPerformed方法的局部变量,因此不会对paintComponent方法可见。如果您将tmp作为类的实例字段,那么是的,它可能会工作。您仍然需要调用
repaint()
使JComponent重新绘制自己。如回答(+1)所述,使用
paintComponent(Graphics g)
而不是
paint(Graphics g)
这个聪明的东西,
redBtn.isSelected()?所选颜色:空在现实世界中是不受欢迎的…不幸的是,它仍然存在。Mathew:不,您的代码不会工作,因为您的tmp变量是actionPerformed方法的局部变量,因此不会对paintComponent方法可见。如果您将tmp作为类的实例字段,那么是的,它可能会工作。您仍然需要调用
repaint()
,以使JComponent自身重新绘制。