java - Graphics2D on JPanel and adding JPanel to JFrame -


i trying draw on jpanel , add jframe in createandshowgui method. have tried few different things: creating jpanel in createandshowgui method, adding drawing jframe, etc... 1 thing common, don't see of graphics!

note: able graphics display in jtabbedpane not on jpanel, want them show on make code more object oriented.

edit: here working concept self contained example:

import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.geom.ellipse2d; import java.util.arraylist; import java.util.hashmap; import java.util.map;  public class drawpanelmain extends jpanel {      /*     * variables used set value of preferred height , width     */     public static final double version = 0.0;     jpanel switchpanel = new jpanel();     jpanel testpanel = new jpanel();     jpanel btnpanel = new jpanel();     drawellipses drawellipses = new drawellipses(point_list);      public static void main(string[] args) {          swingutilities.invokelater(new runnable() {             public void run() {                 initializepointlist();                 createandshowgui();             }         });     }      public static java.util.list<point> point_list = new arraylist<>();      /*     * loop initialize point_list set of points drawing ellipses.     * each loop initializes points top row , second loop draws     * right triangle.     */     public static void initializepointlist() {          int ellipsepointsycoordinate[] = {140, 200, 260, 320, 380, 440, 500, 560, 620};         int ellipsepointsxcoordinate[] = {140, 200, 260, 320, 380, 440, 500, 560, 620, 680};         int xx = 80;          (int axt : ellipsepointsxcoordinate) {             point_list.add(new point(axt, xx));         }          (int = 0; < ellipsepointsycoordinate.length; i++) {             (int j = i; j < ellipsepointsycoordinate.length; j++) {                 point_list.add(new point(ellipsepointsxcoordinate[i], ellipsepointsycoordinate[j]));             }         }     }      public drawpanelmain() {          testpanel.setbackground(color.red);         switchpanel.add(drawellipses);          setlayout(new borderlayout());         add(switchpanel, borderlayout.center);         add(testpanel, borderlayout.east);         add(btnpanel, borderlayout.south);         getpreferredsize();          btnpanel.add(new jbutton(new addswitchaction("add switch panel")));     }      public static void createandshowgui() {          jframe frame = new jframe("rf connection panel " + version);          frame.setlayout(new borderlayout());         frame.add(new drawpanelmain());         frame.setdefaultcloseoperation(jframe.exit_on_close);         frame.setlocationbyplatform(false);         //frame.setlocationrelativeto(null);         frame.pack();         frame.setvisible(true);     }      /*     * addswitchaction add new pane tabbedpane when add switch button clicked     */     private class addswitchaction extends abstractaction {         public addswitchaction(string name) {             super(name);             int mnemonic = (int) name.charat(0);             putvalue(mnemonic_key, mnemonic);         }          @override         public void actionperformed(actionevent e) {             int index = 0;             drawellipses tabcomponent = new drawellipses(point_list);             switchpanel.add(tabcomponent, index++);          }     }  }  @suppresswarnings("serial") class drawellipses extends jpanel {     private final int pref_w = 750; //window width     private final int pref_h = 750; //window height     private static final int oval_width = 30;     private static final color inactive_color = color.red;     private static final color active_color = color.green;     private java.util.list<point> points;     private java.util.list<ellipse2d> ellipses = new arraylist<>();     private map<ellipse2d, color> ellipsecolormap = new hashmap<>();      /*      * method used populate "ellipses" initialized ellipse2d dimensions      */     public drawellipses(java.util.list<point> points) {         this.points = points;         (point p : points) {             int x = p.x - oval_width / 2;             int y = p.y - oval_width / 2;             int w = oval_width;             int h = oval_width;             ellipse2d ellipse = new ellipse2d.double(x, y, w, h);             ellipses.add(ellipse);             ellipsecolormap.put(ellipse, inactive_color);         }          mymouseadapter mlistener = new mymouseadapter();         addmouselistener(mlistener);         addmousemotionlistener(mlistener);     }      /*      * paintcomponent used paint ellipses      */     @override     protected void paintcomponent(graphics g) {         super.paintcomponent(g);         graphics2d g2 = (graphics2d) g;         g2.setrenderinghint(renderinghints.key_antialiasing,                 renderinghints.value_antialias_on);         (ellipse2d ellipse : ellipses) {             g2.setcolor(ellipsecolormap.get(ellipse));             g2.fill(ellipse);             g2.setcolor(color.black);             g2.setstroke(new basicstroke(2));             g2.draw(ellipse);         }          /*          * set font characteristics, color, , draw row labels.          */         g.setfont(new font("timesroman", font.bold, 18));         g.setcolor(color.black);          //along top row         g.drawstring("external port", 10, 50);         g.drawstring("1", 135, 50);         g.drawstring("2", 195, 50);         g.drawstring("3", 255, 50);         g.drawstring("4", 315, 50);         g.drawstring("5", 375, 50);         g.drawstring("6", 435, 50);         g.drawstring("7", 495, 50);         g.drawstring("8", 555, 50);         g.drawstring("9", 615, 50);         g.drawstring("10", 672, 50);          //along y-axis         g.drawstring("radio 2", 40, 145);         g.drawstring("3", 90, 205);         g.drawstring("4", 90, 265);         g.drawstring("5", 90, 325);         g.drawstring("6", 90, 385);         g.drawstring("7", 90, 445);         g.drawstring("8", 90, 505);         g.drawstring("9", 90, 565);         g.drawstring("10", 90, 625);          //along x-axis         g.drawstring("1", 135, 670);         g.drawstring("2", 195, 670);         g.drawstring("3", 255, 670);         g.drawstring("4", 315, 670);         g.drawstring("5", 375, 670);         g.drawstring("6", 435, 670);         g.drawstring("7", 495, 670);         g.drawstring("8", 555, 670);         g.drawstring("9", 615, 670);          //draws 3drect around top row of ellipse2d objects         g2.setcolor(color.lightgray);         g2.draw3drect(120, 60, 580, 40, true);         g2.draw3drect(121, 61, 578, 38, true);         g2.draw3drect(122, 62, 576, 36, true);      }      /*      * mouseadapter extended mousepressed event detects if x, y coordinates      * of drawn ellipse clicked.  if color inactive changed active ,      * vice versa.      */     private class mymouseadapter extends mouseadapter {         @override         /*          * when mousepressed event occurs, color toggled between active , inactive          */         public void mousepressed(mouseevent e) {             color c;             (ellipse2d ellipse : ellipses) {                 if (ellipse.contains(e.getpoint())) {                     c = (ellipsecolormap.get(ellipse) == inactive_color) ? active_color : inactive_color;                     ellipsecolormap.put(ellipse, c);                 }             }             repaint();         }     }      /* * method set dimensions of jframe equal preferred h x w */     @override     public dimension getpreferredsize() {         if (ispreferredsizeset()) {             return super.getpreferredsize();         }         return new dimension(pref_w, pref_h);     } } 

switchpanel.add(title, tabcomponent); 

by default jpanel uses flowlayout respects preferred size of component. preferred size of component (0, 0) there nothing paint. also, using "title" string incorrect (and obsolete has been mentioned). string represents constraint layout manager. can't make string value. in case flowlayout not accept contraints should using:

switchpanel.add(tabcomponent); 

i trying draw on jpanel

when doing custom painting need override getpreferredsize() of panel layout manager can use information. if don't override method size (0, 0) there nothing paint.

edit:

first general comments:

  1. don't hardcode sizes of panel. hardcoded size of (1200 x 750) large monitor. if want full screen use frame.setextendedstate(jframe.maximized_both);

  2. post code testing. has been mentioned posted code doesn't add "switchpanel" frame.

  3. you haven't updated code show how override getpreferredsize() method.

finally, see in code add panel dynamically visible gui. in case general code should be:

panel.add(....); panel.revalidate(); // invoke layout manager otherwise size still (0, 0) panel.repaint(); 

Comments

Popular posts from this blog

html - Firefox flex bug applied to buttons? -

html - Missing border-right in select on Firefox -

c# - two queries in same method -