java - Draw border below the text of a component in Swing -
i've created custom border class fill rectangle act background component. note border have more complex shape in future, not simple rectangle.
when add border component, text of component appear behind border , make text unreadable. (the result depicted in image below.)
is there way draw border below text?
my border class:
public class customborder extends abstractborder { private static final long serialversionuid = 1l; @override public void paintborder(component c, graphics g, int x, int y, int width, int height) { graphics2d g2d = (graphics2d) g; g2d.setcolor(new color(125, 125, 125, 255)); g2d.fillrect(x - 10, y - 10, width + 20, height + 20); } @override public insets getborderinsets(component c) { return super.getborderinsets(c); } @override public insets getborderinsets(component c, insets insets) { return super.getborderinsets(c, insets); } @override public boolean isborderopaque() { return super.isborderopaque(); } } main:
public static void main(string[] args) { jlabel label = new jlabel("jlabel text"); label.setborder(new compoundborder(new emptyborder(50, 20, 20, 20), new customborder())); jframe frame = new jframe(""); frame.setlayout(new flowlayout()); frame.setsize(200, 200); frame.add(label); frame.setvisible(true); } edit: should note using border chat program, using bubble-shaped messages, colored square using setbackground() no-no.
see a closer @ paint mechanism explains how painting done. border painted after text of label painted.
what trying do? border painting code doesn't make sense. trying fill rectangle equal width/height of component + 20 pixels, means trying paint area larger component.
if trying paint background on label can use:
label.setopaque( true ); label.setbackground(...); edit: code in this answer linked in comment section below solved problem.

Comments
Post a Comment