Code
class RoundedCornerBorder extends AbstractBorder {
@Override public void paintBorder(
Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2 = (Graphics2D)g.create();
g2.setRenderingHint(
RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int r = 12;
int w = width - 1;
int h = height - 1;
Area round = new Area(new RoundRectangle2D.Float(x, y, w, h, r, r));
Container parent = c.getParent();
if(parent!=null) {
g2.setColor(parent.getBackground());
Area corner = new Area(new Rectangle2D.Float(x, y, width, height));
corner.subtract(round);
g2.fill(corner);
}
g2.setPaint(c.getForeground());
g2.draw(round);
g2.dispose();
}
@Override public Insets getBorderInsets(Component c) {
return new Insets(4, 8, 4, 8);
}
@Override public Insets getBorderInsets(Component c, Insets insets) {
insets.left = insets.right = 8;
insets.top = insets.bottom = 4;
return insets;
}
}
class KamabokoBorder extends RoundedCornerBorder {
@Override public void paintBorder(
Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2 = (Graphics2D)g.create();
g2.setRenderingHint(
RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int r = 12;
int w = width - 1;
int h = height - 1;
//*/
Path2D.Float p = new Path2D.Float();
p.moveTo(x, y + h);
p.lineTo(x, y + r);
p.quadTo(x, y, x + r, y);
p.lineTo(x + w - r, y);
p.quadTo(x + w, y, x + w, y + r);
p.lineTo(x + w, y + h);
p.closePath();
Area round = new Area(p);
/*/
Area round = new Area(new RoundRectangle2D.Float(x, y, w, h, r, r));
Rectangle b = round.getBounds();
b.setBounds(b.x, b.y + r, b.width, b.height - r);
round.add(new Area(b));
//*/
Container parent = c.getParent();
if(parent!=null) {
g2.setColor(parent.getBackground());
Area corner = new Area(new Rectangle2D.Float(x, y, width, height));
corner.subtract(round);
g2.fill(corner);
}
g2.setPaint(c.getForeground());
g2.draw(round);
g2.dispose();
}
}
References
master such apology to bother you again, but I have a little problem I want to customize a JPopupMenu containing JMenu, and attempt to remove the background by the following jmenu.getPopupMenu (). setOpaque (false), but does not work there will be a form of make it transparent or to take another look, thank you very much for your help and for your time
ReplyDeleteHi, HANNIBAL T.
ReplyDeleteHere is example: http://terai.xrea.jp/data/swing/TranslucentMenuTest.java
but there are a whole lot of issues to contend with.
(Heavyweight Lightweight popup, LookAndFeel dependency, bug?: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4688783 )
Hope that helps.
but here they are doing with JTree and building the menu, what I try to do is make transparent the JPopupMenu that has the JMenu to add the menu I have a bone jmenuiten
ReplyDeleteJMenuBar bar = new JMenuBar ()
bar.add (JMenu);
JMenu menu = new JMenu ();
the popup menu is what I want done transparently
menu.getPopupMenu (). setOpaque (false);
I put setOpaque but does not work
JMenuItem item = new JMenuItem ();
menu.add (item;)
I want to know if there are ways to make it transparent
I think the same way can use for JPopupMenu and JMenuBar: TranslucentMenuTest2.java
ReplyDelete(using JDK 1.7.0_04 on Windows 7)
thank you very much TERAI Atsuhiro really are a master in java
ReplyDeleteThanks TERAI Atsuhiro so much.
ReplyDeletehttp://terai.xrea.jp/data/swing/TranslucentMenuTest2.java is so useful
Glad to help. As the comment in this source code file, "Translucent and Shaped Swing Windows | Java.net" should also help: http://today.java.net/pub/a/today/2008/03/18/translucent-and-shaped-swing-windows.html
ReplyDelete