java - Is there a way to make JTextField for my address bar larger and curvier -
i'm making browser practice java skills, there way make address bar jtextfield, larger instead of swing's default value , curvier. here's code.
//imports of gui //import java.awt.*; //import java.awt.event.*; //import javax.swing.*; //import javax.swing.event.*; //import javax.swing.text.*; //import javax.swing.grouplayout.*; //extends use gui class public class readfile extends jframe { private jtextfield addressbar; //to have address bar private jeditorpane display; //display html information //constructor //set frame icon image loaded file. public readfile() { super("sphere"); //name of browser addressbar = new jtextfield("enter url", 50); //inside url addressbar.addactionlistener( new actionlistener(){ public void actionperformed(actionevent event){ loadcrap(event.getactioncommand()); } } ); add(addressbar, borderlayout.north); display = new jeditorpane(); display.seteditable(false); display.addhyperlinklistener( new hyperlinklistener(){ public void hyperlinkupdate(hyperlinkevent event){ if(event.geteventtype()==hyperlinkevent.eventtype.activated){ loadcrap(event.geturl().tostring()); } } } ); add(new jscrollpane(display), borderlayout.center); setsize(600,200); setvisible(true); } //load crap display on screen private void loadcrap(string usertext){ try{display.setpage(usertext); addressbar.settext(usertext);}catch(exception e){system.out.println("crap!")} } }
i want make usable browser, want html , its' css pages show, else have learn make work.
almost of comes down manipulating border, may not produce results after, example...
jtextfield field = new jtextfield(10); field.setborder(new compoundborder(field.getborder(), new emptyborder(10, 0, 10, 0)));
creating rounded border more difficult...
and curvier
there few ways might achieve, example, create border
of own, example...
public class roundedborder extends abstractborder { @override public insets getborderinsets(component c, insets insets) { insets.left = 5; insets.right = 5; insets.top = 5; insets.bottom = 5; return insets; } @override public void paintborder(component c, graphics g, int x, int y, int width, int height) { graphics2d g2d = (graphics2d) g.create(); roundrectangle2d shape = new roundrectangle2d.float(0, 0, width - 1, height - 1, 20, 20); g2d.setcolor(color.black); g2d.draw(shape); g2d.dispose(); } }
then apply field...
field.setborder(new compoundborder(new roundedborder(), new emptyborder(10, 0, 10, 0)));
which produces like...
but don't this, as, if closely, area outside border still painted...you have border fill area, having ability provide transparent capabilities components, instead, fake it...
basically, creates custom component can paint around field, but, because can better control painting process, can provide transparency outside border effect...
public class fakeroundedborder extends jpanel { private jtextfield field; public fakeroundedborder(jtextfield field) { this.field = field; setborder(new emptyborder(5, 5, 5, 5)); field.setborder(new emptyborder(10, 0, 10, 0)); setlayout(new borderlayout()); add(field); setopaque(false); } @override protected void paintcomponent(graphics g) { super.paintcomponent(g); graphics2d g2d = (graphics2d) g.create(); roundrectangle2d shape = new roundrectangle2d.float(0, 0, getwidth() - 1, getheight() - 1, 20, 20); g2d.setcolor(field.getbackground()); g2d.fill(shape); g2d.setcolor(color.black); g2d.draw(shape); g2d.dispose(); } }
this bunch of examples of course, you'll need clean , provide customisation values ;)
Comments
Post a Comment