如何在按钮单击时激活图形方法(如绘画)

时间:2015-03-24 08:40:29

标签: java button graphics paint

对于一个学校项目,我们已经收到了一些我们应该在画布上用普通的Java图形方法绘制的数字.paint()。这应该在几个按钮的帮助下进行控制,每个按钮都会绘制不同的颜色组合。 paint-method非常简单且有效,但是当我们尝试连接按钮时,除了按钮出现在屏幕上之外没有任何反应。代码如下:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class MarcusErikaGrf2 extends Applet implements ActionListener {

    Button knapp, knapp2, knapp3, knapp4, knapp5;
    boolean svart=false, rod=false, gul=false, gron=false, rensa=false;
    int tx[],ty[],pox[],poy[],pgx[],pgy[],pgxf[],pgyf[],bx[],by[],bxf[],byf[],hf[],hy[];
    Polygon txy, po, pg, pgf, b, bf, hxy;

public void init (){

    this.setSize(800,900);
    this.setBackground(Color.white);
    this.setLocation(200,1);

    knapp= new Button ("Svart");
    knapp2= new Button ("Röd & Rosa");
    knapp3= new Button ("Gul & Orange");
    knapp4 = new Button ("Grön & Blå");
    knapp5 = new Button ("Rensa fönstret");

    knapp.addActionListener(this);
    knapp2.addActionListener(this);
    knapp3.addActionListener(this);
    knapp4.addActionListener(this);
    knapp5.addActionListener(this);

    add(knapp);
    add(knapp2);
    add(knapp3);
    add(knapp4);
    add(knapp5);

    int tx[] = {375,475,425};
    int ty[] = {110,110,250};
    int pox[] = {65,120,120,65,50};
    int poy[] = {350,350,450,450,400};
    int pgx[] = {35,88,98,88,35,25};
    int pgy[] = {210,210,270,330,330,270};
    int pgxf[] = {36,87,97,87,36,26};
    int pgyf[] = {211,211,270,329,329,270};
    int bx[] = {372, 400, 395, 420, 415, 440/*TP*/, 415, 400, 405, 382, 387 };
    int by[] = {60 , 67 , 70 , 77 , 80 , 87 /*TP*/, 95, 88 , 85 , 75 , 70};
    int bxf[] = {373,399,394,419,414,439,416,401,406,383,388};
    int byf[] = {61,67,70,77,80,86,94,88,85,75,70};
    int hx[] = {150,185,225};
    int hy[] = {176,120,176};

    Polygon txy = new Polygon(tx,ty,tx.length);
    Polygon po = new Polygon(pox,poy,pox.length);
    Polygon pg = new Polygon(pgx,pgy,pgx.length);
    Polygon pgf = new Polygon(pgxf,pgyf,pgxf.length);
    Polygon b = new Polygon(bx,by,bx.length);
    Polygon bf = new Polygon(bxf,byf,bxf.length);
    Polygon hxy = new Polygon(hx,hy,hx.length);

}

@Override
public void paint(Graphics g){

    if(svart == true){
    g.setColor(Color.black);
    g.drawRect(50, 50, 30, 150); //Rektangel 1
    g.drawRect(90,50,30,150); //Rektangel 2
    g.drawOval(140, 60, 40,30); //Öga 1
    g.drawOval(200, 62, 40, 30); //Öga 2
    g.fillOval(147,67,15,15); //Pupill 1
    g.fillOval(218,69,15,15); //Pupill 2
    g.fillOval(310,100,50,120); //Svart oval, Stor 
    g.fillOval(310, 50, 22, 30); //Svart oval, Medium
    g.fillOval(270, 220, 20, 28); //Svart oval, Liten
    g.drawOval(100,230,140,40); //Rosa oval, outline
    g.fillOval(370,250,100,50); //Svart oval, horisontell
    g.drawRect(200,300,180,150); //Grön rektangel, outline
    g.drawRect(170,369,10,130);
    g.drawRect(140,369,10,130);
    g.fillOval(250,480,28,40);
    g.fillOval(400,480,14,20);
    g.drawOval(280,520,122,200);
    g.drawOval(160, 570, 80, 100);
    g.drawOval(50,680,140,40);
    g.drawRect(65,500,65,150);
    g.drawPolygon(pg);
    g.drawPolygon(b);

    g.setColor(Color.white);
    g.fillOval(317, 65, 8, 8); //Vit prick i svart oval, Medium
    g.fillOval(277, 235, 6, 6); //Vit prick i svart oval, Liten
    }

    else if(rod == true){
    g.setColor(Color.red);
    g.fillOval(161,571,79,99);
    g.fillOval(255, 150, 50, 70);

    g.setColor(Color.pink);
    g.fillOval(101, 231, 138, 38); //Rosa oval
    g.fillPolygon(bf);

    g.setColor(Color.white);
    g.fillOval(255, 170, 50, 50);
    }

    else if(gron == true){
    g.setColor(Color.blue);
    g.fillRect(51, 51, 29, 149); //Rektangel 1
    g.fillRect(91, 51, 29, 149); //Rektangel 2
    g.fillRect(66,501,64,149);
    g.fillPolygon(txy);

    g.setColor(Color.green);
    g.fillRect(201, 301, 179, 149); //Grön rektangel
    g.fillOval(51,681,139,38);
    g.fillPolygon(pgf);
    }

    else if(gul == true){
    g.setColor(Color.yellow);
    g.fillRect(171,370,9,129);
    g.fillRect(141,370,9,129);
    g.fillOval(281,521,120,198);

    g.setColor(Color.orange);
    g.fillPolygon(po);
    g.fillPolygon(hxy);
    g.fillOval(150, 160, 45, 45);
    g.fillOval(180, 160, 45, 45);
    }

    else if(rensa == true){

        repaint();

    }

}

public void actionPerformed (ActionEvent e){       

    if(e.getSource() == knapp){
        svart = true;
    }

    else if(e.getSource() == knapp2){
        rod = true;
    }

    else if(e.getSource() == knapp3){
        gul = true;
    }

    else if(e.getSource() == knapp4){
        gron = true;
    }

    else if(e.getSource() == knapp5){
        rensa = true;
    }

  }

}

我们缺少什么?

1 个答案:

答案 0 :(得分:0)

在actionPerformed(...)方法中,您需要调用:

repaint();

这告诉组件重绘自己。

else if(rensa == true){
    repaint();
}

永远不要在绘画方法中调用repaint()。绘画方法是用于绘画,而不是安排绘画。