java - How to implement JLabel-like size management in my custom control? -


in code below, jframe contains jlabel only, in center of borderlayout.

package test.swing;  import java.awt.borderlayout;  import javax.swing.jframe; import javax.swing.jlabel;  public class try_jlabel_01 {      public static void main(string[] arg) {          jframe frame = new jframe() {              jlabel label = new jlabel("label");              {                 setlayout(new borderlayout());                 add(label, borderlayout.center);             }          };          frame.pack();         //frame.setlocationrelativeto(null);         frame.setdefaultcloseoperation(jframe.exit_on_close);         frame.setvisible(true);       }  } 

if ran, program shows window, fits control size.

simultaneously, if define custom control, default window of 0 size:

public class try_jlabel_02 {      public static void main(string[] arg) {          jframe frame = new jframe() {              //jlabel label = new jlabel("label");             jcomponent label = new jcomponent() {                  @override                 protected void paintcomponent(graphics g) {                     super.paintcomponent(g);                      g.setcolor(color.red);                     g.filloval(0, 0, 200, 100);                 }             };               {                 setlayout(new borderlayout());                 add(label, borderlayout.center);             }          };          frame.pack();         //frame.setlocationrelativeto(null);         frame.setdefaultcloseoperation(jframe.exit_on_close);         frame.setvisible(true);       }  } 

how extend jcomponent correctly, behaves jlabel and, example, has default size of 200x100?

p.s. don't want extend jlabel. want learn how jlabel extending jconmponent instead.

i see source code of jlabel, can't understand, how control sizes. see no size control code @ there.

update

i found can solve task if not override, if set sizes:

//jlabel label = new jlabel("label");         jcomponent label = new jcomponent() {              {                 setminimumsize(new dimension(200, 100));                 setpreferredsize(new dimension(200, 100));             }              @override             protected void paintcomponent(graphics g) {                 super.paintcomponent(g);                  g.setcolor(color.red);                 g.filloval(0, 0, 200, 100);             }         }; 

but works in case know sizes myself. in case of font, can't know size without having graphics object first.

so how determine sizes in case of font?

i don't want extend jlabel.

if don't want extend jlabel, can pad enclosing container, shown here using emptyborder.


Comments

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

java.util.scanner - How to read and add only numbers to array from a text file -

iphone - Three second countdown in cocos2d -