Friday, 15 July 2011

swing - Java - My graphics flickers -



swing - Java - My graphics flickers -

this question has reply here:

java: how double-buffering in swing? 5 answers

i'm having problem. here's program. there scenery drawn using paint method. when nail space button, background change. whenever nail space, graphics flickers. heres code:

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class scenery extends jframe implements keylistener { int c1=1; jlabel bg = new jlabel(new imageicon("bg.png")); jlabel pattern1 = new jlabel(new imageicon("p1.jpg")); jlabel pattern2 = new jlabel(new imageicon("p2.jpg")); jlabel pattern3 = new jlabel(new imageicon("p3.jpg")); jlabel pattern4 = new jlabel(new imageicon("p4.jpg")); jlabel pattern5 = new jlabel(new imageicon("p5.jpg")); int f[] = new int[2]; int p[] = new int[3]; container c = getcontentpane(); public scenery() { super("press space alter background"); c.setlayout(null); setsize(800,600); setvisible(true); setlocationrelativeto(null); setresizable(false); setdefaultcloseoperation(jframe.exit_on_close); addkeylistener(this); getcontentpane().setbackground(new color(22,145,217)); c.add(pattern1); pattern1.setbounds(0,0,800,600); pattern1.setvisible(false); c.add(pattern2); pattern2.setbounds(0,0,800,600); pattern2.setvisible(false); c.add(pattern3); pattern3.setbounds(0,0,800,600); pattern3.setvisible(false); c.add(pattern4); pattern4.setbounds(0,0,800,600); pattern4.setvisible(false); c.add(pattern5); pattern5.setbounds(0,0,800,600); pattern5.setvisible(false); } public void paint (graphics g) { super.paint(g); g.setcolor(color.cyan); g.fillrect(30,100,180,600); g.setcolor(color.black); g.drawrect(30,100,180,600); g.setcolor(color.yellow); g.fillrect(40,120,160,50); g.fillrect(40,200,160,50); g.fillrect(40,280,160,50); g.fillrect(40,360,160,50); g.fillrect(40,440,160,50); g.fillrect(55,520,55,80); g.fillrect(120,520,55,80); g.setcolor(color.black); g.drawrect(40,120,160,50); g.drawrect(40,200,160,50); g.drawrect(40,280,160,50); g.drawrect(40,360,160,50); g.drawrect(40,440,160,50); g.drawrect(55,520,55,80); g.drawrect(120,520,55,80);// g.setcolor(color.red); g.fillrect(410,190,370,20); g.setcolor(color.black); g.drawrect(410,190,370,20);// g.setcolor(color.orange); g.fillrect(420,210,350,200); g.setcolor(color.black); g.drawrect(420,210,350,200);// g.setcolor(color.red); g.fillrect(410,400,370,20); g.setcolor(color.black); g.drawrect(410,400,370,20);// g.setcolor(color.orange); g.fillrect(420,420,350,200); g.setcolor(color.black); g.drawrect(420,420,350,200);// g.setcolor(color.white); g.fillrect(440,230,50,50); g.fillrect(510,230,50,50); g.fillrect(580,230,50,50); g.fillrect(650,230,50,50); g.fillrect(710,230,50,50); g.fillrect(440,320,50,50); g.fillrect(510,320,50,50); g.fillrect(580,320,50,50); g.fillrect(650,320,50,50); g.fillrect(710,320,50,50); g.fillrect(440,450,50,50); g.fillrect(510,450,50,50); g.fillrect(580,450,50,50); g.fillrect(650,450,50,50); g.fillrect(710,450,50,50); g.fillrect(440,520,50,50); g.fillrect(510,520,50,50); g.fillrect(580,520,50,50); g.fillrect(650,520,50,50); g.fillrect(710,520,50,50); g.setcolor(color.black); g.drawrect(440,230,50,50); g.drawrect(510,230,50,50); g.drawrect(580,230,50,50); g.drawrect(650,230,50,50); g.drawrect(710,230,50,50); g.drawrect(440,320,50,50); g.drawrect(510,320,50,50); g.drawrect(580,320,50,50); g.drawrect(650,320,50,50); g.drawrect(710,320,50,50); g.drawrect(440,450,50,50); g.drawrect(510,450,50,50); g.drawrect(580,450,50,50); g.drawrect(650,450,50,50); g.drawrect(710,450,50,50); g.drawrect(440,520,50,50); g.drawrect(510,520,50,50); g.drawrect(580,520,50,50); g.drawrect(650,520,50,50); g.drawrect(710,520,50,50);// g.setcolor(color.black); g.fillrect(320,10,10,100); g.setcolor(color.white); g.drawrect(320,10,10,100); g.setcolor(color.black); g.fillrect(275,100,100,150); g.setcolor(color.white); g.drawrect(275,100,100,150); g.setcolor(color.black); g.fillrect(250,250,150,150); g.setcolor(color.white); g.drawrect(250,250,150,150); g.setcolor(color.black); g.fillrect(225,370,200,250); g.setcolor(color.white); g.drawrect(225,370,200,250); g.fillrect(290,120,70,25); g.fillrect(290,150,70,25); g.fillrect(290,180,70,25); g.fillrect(290,210,70,25); g.fillrect(265,270,123,25); g.fillrect(265,300,123,25); g.fillrect(265,330,123,25); g.fillrect(245,400,160,25); g.fillrect(245,430,160,25); g.fillrect(245,460,160,25); g.fillrect(245,490,160,25); g.fillrect(245,520,160,25); g.fillrect(245,550,160,25); g.setcolor(new color(153,76,0)); g.fillrect(150,350,15,260); g.fillrect(133,370,50,20); g.setcolor(color.black); g.drawrect(150,350,15,260); g.drawrect(133,370,50,20); g.setcolor(new color(153,76,0)); g.fillrect(400,350,15,260); g.fillrect(383,370,50,20); g.setcolor(color.black); g.drawrect(400,350,15,260); g.drawrect(383,370,50,20); g.setcolor(new color(153,76,0)); g.fillrect(650,350,15,260); g.fillrect(633,370,50,20); g.setcolor(color.black); g.drawrect(650,350,15,260); g.drawrect(633,370,50,20); g.setcolor(color.black); g.drawarc(-50, 320, 200, 100, 180, 180); g.drawarc(-50, 330, 200, 100, 180, 180); g.drawarc(-50, 340, 200, 100, 180, 180); g.drawarc(166,320,236,100,180,180); g.drawarc(166,330,236,100,180,180); g.drawarc(166,340,236,100,180,180); g.drawarc(414,320,236,100,180,180); g.drawarc(414,330,236,100,180,180); g.drawarc(414,340,236,100,180,180); g.drawarc(665,320,236,100,180,180); g.drawarc(665,330,236,100,180,180); g.drawarc(665,340,236,100,180,180); g.setcolor(color.orange); g.fillrect(20,470,170,20); g.setcolor(color.black); g.drawrect(20,470,170,20); g.setcolor(new color(249,216,83)); g.fillrect(32,490,150,120); g.setcolor(color.black); g.drawrect(32,490,150,120); g.setcolor(color.cyan); g.fillrect(40,505,30,30); g.fillrect(90,505,30,30); g.fillrect(40,555,30,30); g.fillrect(90,555,30,30); g.fillrect(135,520,40,90); g.setcolor(color.black); g.drawrect(40,505,30,30); g.drawrect(90,505,30,30); g.drawrect(40,555,30,30); g.drawrect(90,555,30,30); g.drawrect(135,520,40,90); g.setcolor(new color(179,91,255)); g.fillrect(225,470,170,20); g.setcolor(color.black); g.drawrect(225,470,170,20); g.setcolor(color.magenta); g.fillrect(236,490,150,120); g.setcolor(color.black); g.drawrect(236,490,150,120); g.setcolor(new color(153,255,51)); g.fillrect(249,505,30,30); g.fillrect(249,555,30,30); g.fillrect(289,505,30,30); g.fillrect(289,555,30,30); g.fillrect(335,520,40,90); g.setcolor(color.black); g.drawrect(249,505,30,30); g.drawrect(249,555,30,30); g.drawrect(289,505,30,30); g.drawrect(289,555,30,30); g.drawrect(335,520,40,90); // g.setcolor(new color(247,199,103)); g.fillrect(445,470,170,20); g.setcolor(color.black); g.drawrect(445,470,170,20); g.setcolor(color.green); g.fillrect(455,490,150,120); g.setcolor(color.black); g.drawrect(455,490,150,120); g.setcolor(color.darkgray); g.fillrect(469,505,30,30); g.fillrect(469,555,30,30); g.fillrect(519,505,30,30); g.fillrect(519,555,30,30); g.fillrect(560,520,40,90); g.setcolor(color.black); g.drawrect(469,505,30,30); g.drawrect(469,555,30,30); g.drawrect(519,505,30,30); g.drawrect(519,555,30,30); g.drawrect(560,520,40,90); } public static void main(string args[]) { new scenery(); } public void keypressed(keyevent e) { string key = e.getkeytext(e.getkeycode()); if (key.equals("space")); { int n1 = (int) (math.random()*5); if (n1==1) { pattern1.setvisible(true); pattern2.setvisible(false); pattern3.setvisible(false); pattern4.setvisible(false); pattern5.setvisible(false); n1=0; } if (n1==2) { pattern1.setvisible(false); pattern2.setvisible(true); pattern3.setvisible(false); pattern4.setvisible(false); pattern5.setvisible(false); n1=0; } if (n1==3) { pattern1.setvisible(false); pattern2.setvisible(false); pattern3.setvisible(true); pattern4.setvisible(false); pattern5.setvisible(false); n1=0; } if (n1==4) { pattern1.setvisible(false); pattern2.setvisible(false); pattern3.setvisible(false); pattern4.setvisible(true); pattern5.setvisible(false); n1=0; } if (n1==1) { pattern1.setvisible(false); pattern2.setvisible(false); pattern3.setvisible(false); pattern4.setvisible(false); pattern5.setvisible(true); n1=0; } } } public void keyreleased(keyevent e) { repaint(); } public void keytyped(keyevent e) { }

}

thanks in advance if respond.

never draw straight in top level window such jframe or japplet. instead draw in jpanel's paintcomponent method tutorials tell give double buffering default.

also, want off load of magic numbers file belong info , not code. i'd static parts of drawing onto bufferedimage , display image in paintcomponent method via g.drawimage(...).

also, utilize key bindings , not keylistener has been discussed in other similar questions on site, , utilize arrays or lists , seek refactor code create more streamline , less needless repetition. , utilize imageicons pattern images, , 1 jlabel , swap icons. if did this, code:

int n1 = (int) (math.random()*5); if (n1==1) { pattern1.setvisible(true); pattern2.setvisible(false); pattern3.setvisible(false); pattern4.setvisible(false); pattern5.setvisible(false); n1=0; } if (n1==2) { pattern1.setvisible(false); pattern2.setvisible(true); pattern3.setvisible(false); pattern4.setvisible(false); pattern5.setvisible(false); n1=0; } if (n1==3) { pattern1.setvisible(false); pattern2.setvisible(false); pattern3.setvisible(true); pattern4.setvisible(false); pattern5.setvisible(false); n1=0; } if (n1==4) { pattern1.setvisible(false); pattern2.setvisible(false); pattern3.setvisible(false); pattern4.setvisible(true); pattern5.setvisible(false); n1=0; } if (n1==1) { pattern1.setvisible(false); pattern2.setvisible(false); pattern3.setvisible(false); pattern4.setvisible(false); pattern5.setvisible(true); n1=0; } }

if set pattern imageicons arraylist called patternlist, code simply:

int randomindex = (int) math.random() * patternlist.size(); mylabel.seticon(patternlist.get(randomindex));

you tell me easier debug , maintain.

java swing jframe paint

No comments:

Post a Comment