java - Graphical User Interface, why doesn't my canvas repaint? -
the canvas within graphical user interface not update or repaint on hitting "display" action button should. noticeable when extension drop down box changed , canvas should produce different display upon "display".
would appreciate if point out errors within code. having trouble drawing graphics lines on canvas, appear fill rather draw , think may due canvas repaint error.
thanks, code below
import java.awt.*; import javax.swing.*; import java.awt.event.*; //import event handler classes import java.awt.geom.*; // geom packages public class listric_gui extends jframe implements actionlistener, itemlistener { jpanel pane = new jpanel (); jcombobox extension; mycanvas can1; //class variables static float[]x = new float[201]; static float[]y = new float[201]; static float[]y2 = new float[201]; static float[] hwd = new float [201]; //static float dip = 0f; static int end = 200; static int i, e1; static int x_ending=160, y_ending = 35, ticksize=5; static float x_orig = 50f, y_orig=50f, x_scale=4f, y_scale=5f,hwd_orig=50f,hwd_scale=5f; listric_gui () { try{ uimanager.setlookandfeel ( //"com.sun.java.swing.plaf.windows.windowslookandfeel"); uimanager.getsystemlookandfeelclassname()); } catch (exception e) { system.err.println("can't set , feel: " + e); } gridbaglayout gridbag = new gridbaglayout(); gridbagconstraints constraints = new gridbagconstraints(); pane.setlayout(gridbag); setbackground(color.lightgray); //title buildconstraints(constraints, 0,0,5,1,0,10); constraints.fill = gridbagconstraints.both; font f = new font ("helvetica", font.bold, 22); jlabel label1 = new jlabel("fault modelling program", jlabel.center); label1.setfont (f); //label1.setbackground(color.white); label1.setbackground(color.red); gridbag.setconstraints(label1, constraints); pane.add(label1); //initialise button objects //file buildconstraints(constraints, 0, 1, 1, 1, 1, 10); constraints.fill = gridbagconstraints.both; font f1 = new font("helvetica", font.bold, 14); jbutton file = new jbutton("file"); gridbag.setconstraints(file, constraints); file.setfont(f1); pane.add(file); //input buildconstraints(constraints, 1, 1, 1, 1, 1, 0); constraints.fill = gridbagconstraints.both; //constraints.ipadx = 10; jbutton input = new jbutton ("input"); gridbag.setconstraints(input,constraints); input.setfont(f1); pane.add(input); //run buildconstraints(constraints, 2, 1, 1, 1, 1, 0); constraints.fill = gridbagconstraints.both; jbutton run = new jbutton ("run"); gridbag.setconstraints(run, constraints); run.setfont(f1); pane.add(run); //display button buildconstraints(constraints, 3, 1, 1, 1, 1, 0); constraints.fill = gridbagconstraints.both; jbutton display = new jbutton ("display"); gridbag.setconstraints(display, constraints); display.setfont(f1); pane.add(display); //quit button buildconstraints(constraints, 4, 1, 1, 1, 1, 0); constraints.fill = gridbagconstraints.both; jbutton quit = new jbutton ("quit"); gridbag.setconstraints(quit, constraints); quit.setfont(f1); pane.add(quit); //fault geometry label buildconstraints(constraints, 0, 2, 1, 1, 1, 10); constraints.fill = gridbagconstraints.none; constraints.anchor = gridbagconstraints.south; jlabel label2 = new jlabel ("fault geometry", jlabel.center); label2.setfont(f1); gridbag.setconstraints(label2, constraints); pane.add(label2); //geometry - listric buildconstraints(constraints, 0, 3, 1, 1, 1, 10); constraints.fill = gridbagconstraints.none; constraints.anchor = gridbagconstraints.north; jcheckbox c1 = new jcheckbox ("listric"); gridbag.setconstraints(c1, constraints); pane.add(c1); //checkbox group define 1 selected @ time buttongroup bg = new buttongroup (); bg.add(c1); //extension label buildconstraints(constraints, 0, 4, 1, 1, 1, 10); constraints.anchor = gridbagconstraints.south; jlabel label3 = new jlabel ("extension", jlabel.center); label3.setfont(f1); gridbag.setconstraints(label3, constraints); pane.add(label3); //extension choice buildconstraints(constraints, 0, 5, 1, 1, 1, 10); constraints.fill = gridbagconstraints.none; constraints.anchor = gridbagconstraints.north; jcombobox extension = new jcombobox (); extension.additem ("-5 km"); extension.additem ("-2 km"); extension.additem ("0 km"); extension.additem ("5 km"); extension.additem ("10 km"); extension.additem ("15 km"); extension.additem ("20 km"); extension.additem ("25 km"); extension.additem ("30 km"); gridbag.setconstraints(extension, constraints); pane.add(extension); //draw canvas buildconstraints(constraints, 1, 2, 4, 5, 0, 0); constraints.fill = gridbagconstraints.both; mycanvas can2 = new mycanvas (); // paint method in seperate class gridbag.setconstraints(can2, constraints); can2.setbackground(color.white); pane.add(can2); //add event listeners components display.addactionlistener(this); quit.addactionlistener(this); extension.addactionlistener(this); setcontentpane(pane); } //define main block public static void main (string args[]){ jframe frame = new listric_gui(); //method exit windowlistener l = new windowadapter (){ public void windowclosing (windowevent e) { system.exit (0); } }; frame.addwindowlistener (l); frame.setsize(1600,600); //frame.pack(); //frame.revalidate(); //frame.repaint(); frame.setvisible (true); } static void buildconstraints(gridbagconstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy){ gbc.gridx = gx; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; } public insets getinsets() { return new insets (10, 10, 10, 10); } //declare actionlistener method public void actionperformed (actionevent ae) { string label = ae.getactioncommand(); if (label == "display") { modelling m1 = new modelling (); can1= new mycanvas(); pane.add(can1); setcontentpane(pane); }else if (label == "quit") system.exit(0); } public void itemstatechanged (itemevent evt) { if(evt.getsource () == extension) { string s = (string) evt.getitem (); if (s == "-5 km") e1 = (int) -5f; if (s == "-2 km") e1 = (int) -2f; if (s == "0 km") e1 = (int) 0f; else if (s == "5 km") e1 = (int) 5f; else if (s == "10 km") e1 = (int) 10f; else if (s == "15 km") e1 = (int) 15f; else if (s == "20 km") e1 = (int) 20f; else if (s == "25 km") e1 = (int) 25f; else if (s == "30 km") e1 = (int) 30f; } } //end of controlling class //class modelling fault class modelling { modelling () { calc (); } private void calc () { float sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8;//initialise variables float = 30f; float b = 50f; float c = -1f; float zd = 20f; //float x0 = 60f; float d = 1f; int k; //loop calculating fault 1 coordinates for(k=0;k<=listric_gui.x_ending;k++){ listric_gui.x[k] = (float) k; sum1 = (listric_gui.x[k] - a); sum2 = ((sum1/zd)*c); sum3 = d - ((float)math.exp(sum2)); sum4 = (a * sum3); listric_gui.y[k] = sum4; if(listric_gui.x[k]<=30) listric_gui.y[k]=0; sum1 = (listric_gui.x[k] - b); sum2 = ((sum1/zd)*c); sum3 = d - ((float)math.exp(sum2)); sum4 = (a * sum3); listric_gui.y2[k] = sum4; if(listric_gui.x[k]<=50) listric_gui.y2[k]=0; system.out.println("x = " + listric_gui.x[k] + " y = "+ listric_gui.y[k] + "y2 = " + listric_gui.y2[k]); } //loop calculating hangingwall deformation //initialise variables listric_gui.hwd [k] = (float) k; listric_gui.e1 = 30; for(k=0;k<=listric_gui.x_ending;k++){ listric_gui.hwd[k] = 0f; if(listric_gui.x[k]>30) listric_gui.hwd[k] = listric_gui.y[k]-listric_gui.y[k-listric_gui.e1]; //system.out.println("x = " + x[k] + " hwd = "+ hwd [k]); } //fault 2 loop /*for(k=0;k<=listric_gui.x_ending;k++){ //listric_gui.x[k] = (float) k; listric_gui.y2[k] = (b * (d - ((float)math.exp((((listric_gui.x[k] - b)/zd)*c))))); if(listric_gui.x[k]<=50) { listric_gui.y2[k]=0; } system.out.println("f2x = " + listric_gui.y2[k]);*/ } } //listener method //draw class class mycanvas extends jpanel { int k, i; public void paintcomponent (graphics screen) { super.paintcomponent(screen); graphics2d screen2d = (graphics2d) screen; screen2d.setcolor(color.red); generalpath ln = new generalpath(); ln.moveto(listric_gui.x_orig,listric_gui.y_orig); for(k=0;k<=listric_gui.x_ending;k++) { ln.lineto((listric_gui.x[k]*listric_gui.x_scale)+listric_gui.x_orig,(listric_gui.y_orig+(listric_gui.y[k]*listric_gui.y_scale))); ln.closepath(); screen2d.fill(ln); } generalpath ln2 = new generalpath(); ln2.moveto(listric_gui.x_orig,listric_gui.hwd_orig); for(k=0;k<=listric_gui.x_ending;k++) { ln2.lineto((listric_gui.x[k]*listric_gui.x_scale)+listric_gui.x_orig,(listric_gui.y_orig+(listric_gui.hwd[k]*listric_gui.hwd_scale))); ln2.closepath(); screen2d.fill(ln2); } /*generalpath ln5 = new generalpath(); ln5.moveto(listric_gui.x_orig,listric_gui.hwd_orig); for(k=0;k<=listric_gui.x_ending;k++) { ln5.lineto((listric_gui.x[k]*listric_gui.x_scale)+listric_gui.x_orig,(listric_gui.y_orig+(listric_gui.y2[k]*listric_gui.hwd_scale))); ln5.closepath(); //screen2d.fill(ln5); screen2d.draw(ln5); }*/ //fault profile graphically //x axis basicstroke xpen = new basicstroke(2f, basicstroke.cap_butt,basicstroke.join_round); screen2d.setstroke(xpen); screen2d.setfont(new font("serif", font.plain, 11)); screen2d.setcolor(color.black); generalpath xaxis = new generalpath(); xaxis.moveto(listric_gui.x_orig,(listric_gui.y_orig+(listric_gui.y_ending*listric_gui.y_scale))); xaxis.lineto((listric_gui.x_orig+(listric_gui.x_ending*listric_gui.x_scale)),(listric_gui.y_orig+(listric_gui.y_ending*listric_gui.y_scale))); (i=0; <=(listric_gui.x_ending); i=i+20){ line2d.float ticks = new line2d.float(((i*listric_gui.x_scale)+listric_gui.x_orig), ((listric_gui.y_orig)+(listric_gui.y_ending*listric_gui.y_scale)), ((i*listric_gui.x_scale)+listric_gui.x_orig), ((listric_gui.y_orig+listric_gui.ticksize)+(listric_gui.y_ending*listric_gui.y_scale))); screen2d.draw(ticks); screen2d.drawstring(""+i, ((i*listric_gui.x_scale)+listric_gui.x_orig), ((listric_gui.y_orig)+(listric_gui.y_ending*listric_gui.y_scale))+20); } //y axis basicstroke ypen = new basicstroke(2f, basicstroke.cap_butt,basicstroke.join_round); screen2d.setstroke(ypen); screen2d.setfont(new font("serif", font.plain, 11)); screen2d.setcolor(color.black); generalpath yaxis = new generalpath(); yaxis.moveto(listric_gui.x_orig,listric_gui.y_orig); yaxis.lineto(listric_gui.x_orig,(listric_gui.y_orig+(listric_gui.y_ending*listric_gui.y_scale))); screen2d.draw(yaxis); (i=0; <=listric_gui.y_ending; i=i+5){ screen2d.drawstring(""+i, ((listric_gui.x_orig))-15, (listric_gui.y_orig+(i*listric_gui.y_scale))); line2d.float yticks = new line2d.float(((listric_gui.x_orig)), (listric_gui.y_orig+(i*listric_gui.y_scale)), (((listric_gui.x_orig+listric_gui.ticksize))), (listric_gui.y_orig+(i*listric_gui.y_scale))); screen2d.draw(yticks); } //y axis label screen2d.setfont(new font("serif", font.plain, 14)); screen2d.draw(xaxis); affinetransform orig = screen2d.gettransform(); screen2d.drawstring("depth(km)", listric_gui.x_orig-20, listric_gui.y_orig-20); screen2d.rotate(-math.pi/2); screen2d.settransform(orig); //x axis label screen2d.setfont(new font("serif", font.plain, 14)); screen2d.drawstring("distance (km)", listric_gui.x_orig+(listric_gui.x_ending*listric_gui.x_scale/2), listric_gui.y_orig+(listric_gui.y_ending*listric_gui.y_scale)+40); //values screen2d.setfont(new font("serif", font.plain, 10)); screen2d.setcolor(color.red); int y_val = 25; (k = 0; k <=160; k=k+5){ screen2d.drawstring(" x = " + string.valueof(listric_gui.x[k]) + " y = " + string.valueof(listric_gui.y[k]), (listric_gui.x_orig+(listric_gui.x_ending*listric_gui.x_scale)+35), y_val); y_val = y_val+10; } //print screen hwd values int y_val2 = 25; (k = 0; k <=160; k=k+5){ screen2d.drawstring("x = " + string.valueof(listric_gui.x [k])+ " hwd = " + string.valueof(listric_gui.hwd[k]),(listric_gui.x_orig+(listric_gui.x_ending*listric_gui.x_scale)+155),y_val2); y_val2 = y_val2+10; } //title screen2d.setcolor(color.black); font f1 = new font("helvetica", font.bold, 24); screen2d.setfont(f1); screen2d.drawstring("listric fault", (listric_gui.x_ending*listric_gui.x_scale/2)+listric_gui.x_orig,(listric_gui.y_orig-10)); } } }
Comments
Post a Comment