如何重绘内部类java awt

时间:2016-07-27 20:48:10

标签: java awt

当用户使用java awt standalone(homework)移动滑块时,我试图更新圆圈的颜色。我必须使用Frame。我可以看到我的值从滑块更新,但是我可以将这些值放到paint方法中的内部类圆圈中进行重新绘制并更新圆形的颜色(目标) 谢谢你的帮助!! 到目前为止,这是我的代码:

package cs111b;
import java.awt.*;
import java.awt.event.*;


public class ColorFactory extends Frame implements ActionListener, AdjustmentListener
{
    private static final long serialVersionUID = 1L;
    static Dimension t = Toolkit.getDefaultToolkit().getScreenSize();
    Panel pS,cP,rB;
    Scrollbar rScroll, gScroll, bScroll;
    Checkbox hex, dec, oct,bin;
    int[] Red = new int[4];
    int[] Green = new int[4];
    int[] Blue = new int[4];
    int[] rgb = new int[3];
    Color cl = new Color(rgb[0],rgb[1],rgb[2]);
    Dimension Cr = new Dimension((int)(t.width*.70),(int)(t.height*.60));
    int w = 300;
    int x = (Cr.width/2)-(w/2);
    int y = (Cr.height/2)-(w/2);

    class Circle extends Canvas
    {

        private static final long serialVersionUID = 1L;
        Dimension Cr = new Dimension((int)(t.width*.70),(int)(t.height*.60));
        int w = 300;
        int x = (Cr.width/2)-(w/2);
        int y = (Cr.height/2)-(w/2);
        //Color c;// = new Color(rgb[0],rgb[1],rgb[2]);
        public Circle(int[] c)
        {
            cl = new Color(rgb[0],rgb[1],rgb[2]);
        setSize(Cr);

        }
        @Override
        public void paint(Graphics g)
        {
            super.paint(g);
            //c = new Color(rgb[0],rgb[1],rgb[2]);
            g.setColor(cl);
            g.fillOval(x, y, w, w);
        }
    }
    class Rect extends Canvas
    {
        private static final long serialVersionUID = 1L;
        public Rect()
        {

        }

        public Rect(int x,int y,int w, int h)
        {
            Red[0] = x;
            Red[1] = y;
            Red[2] = w;
            Red[3] = h;
        }
      @Override
        public void paint(Graphics g)
        {
            super.paint(g);
            g.setColor(Color.WHITE);
            g.fillRect(Red[0], Red[1], Red[2], Red[3]);
            g.setColor(Color.GREEN);
            g.fillRect(Green[0], Green[1], Green[2], Green[3]);
            g.setColor(Color.BLUE);
            g.fillRect(Blue[0], Blue[1], Blue[2], Blue[3]);
        }

    }

    public ColorFactory()
    {
        addWindowListener( new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        }
        );
        setSize(t);
        setTitle("Color Factory");
        setLayout(new FlowLayout());
        //*****************Creating Label
        Label l = new Label("Color Factory");
        l.setAlignment(Label.CENTER);
        l.setPreferredSize(new Dimension(t.width,(int)(t.height*.1)));
        l.setFont(new Font("Seriff",Font.BOLD,35));
        l.setForeground(Color.ORANGE);
        add(l);
        //******************Creating Scrolls
        rScroll = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
        gScroll = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
        bScroll = new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
        rScroll.setPreferredSize(new Dimension(255,20));
        gScroll.setPreferredSize(new Dimension(255,20));
        bScroll.setPreferredSize(new Dimension(255,20));
        //******************Creating Panel
        pS = new Panel();
        pS.setPreferredSize(new Dimension(t.width, (int)(t.height*.10)));
        pS.setBackground(Color.BLUE);

        //rScroll.setPreferredSize(new Dimension((int)(this.getWidth()*.2),(int)(this.getHeight()*.02)));
        rScroll.setBackground(Color.WHITE);
        gScroll.setBackground(Color.WHITE);
        bScroll.setBackground(Color.WHITE);
        rgb[0]= rScroll.getValue();
        rgb[1]= gScroll.getValue();
        rgb[2]= bScroll.getValue();
        pS.add(rScroll);
        pS.add(gScroll);
        pS.add(bScroll);
        add(pS);
        //Creating Circle
        cP = new Panel();
        cP.setBackground(Color.BLUE);
        cP.setPreferredSize(new Dimension((int)(t.width*.70), (int)(t.height*.60)));
        Circle C = new Circle(rgb);
        C.setBackground(Color.DARK_GRAY);
        //C.setForeground(Color.cyan);
        C.setPreferredSize(new Dimension((int)(t.width*.70), (int)(t.height*.60)));
        cP.add(C);
        add(cP);
        //creating radio buttons panel
        rB = new Panel();
        rB.setPreferredSize(new Dimension((int)(t.width*.27), (int)(t.height*.60)));
        rB.setBackground(Color.RED);
        //Creating CheckBoxes
        CheckboxGroup cg = new CheckboxGroup();
        hex = new Checkbox("Hex",cg,true);
        dec = new Checkbox("Dec",cg,true);
        oct = new Checkbox("Oct",cg,true);
        bin = new Checkbox("Bin",cg,true);
        rB.add(hex);
        rB.add(dec);
        rB.add(oct);
        rB.add(bin);
        //creating Rectangles
        Red[0] = (int)(rB.getWidth()*.20);Red[1]= (int)(rB.getHeight()*8);Red[2] = 20; Red[3]= rScroll.getValue();
        Green[0] = (int)(rB.getWidth()*.20)+40;Green[1]= (int)(rB.getHeight()*8);Green[2] = 20; Red[3]= rScroll.getValue();
        Blue[0] = (int)(rB.getWidth()*.20)+80;Blue[1]= (int)(rB.getHeight()*8);Blue[2] = 20; Blue[3]= rScroll.getValue();
        Rect r = new Rect();
        r.setSize(this.getWidth(), this.getHeight());


        rB.add(r);
        add(rB);
        rScroll.addAdjustmentListener(this);
        gScroll.addAdjustmentListener(this);
        bScroll.addAdjustmentListener(this);
        setVisible(true);
    }
    /*
    public void paint(Graphics g)
    {

        super.paint(g);
        //g.setXORMode(cl);
        g.setColor(cl);
        g.fillOval(x, y, w, w);

    }
    */

    public static void main(String[] args)
    {
        new ColorFactory();
    }
    @Override
    public void actionPerformed(ActionEvent e) 
    {

    }
    @Override
    public void adjustmentValueChanged(AdjustmentEvent e) 
    {
        if(rScroll.getValueIsAdjusting())
        {
            Red[3]= e.getValue();
            rgb[0]= e.getValue();
            cP.setForeground(new Color(rgb[0],rgb[1],rgb[2]));
            cP.repaint();
        }
        if(gScroll.getValueIsAdjusting())
        {
            rgb[1] = e.getValue();
            cP.repaint();

        }
        if(bScroll.getValueIsAdjusting())
        {
            rgb[2] = e.getValue();
            cP.repaint();

        }

        rB.repaint();

    }
}

0 个答案:

没有答案