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
Post a Comment