Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #4471
| From | "John B. Matthews" <john.b..matthews@THRWHITE.remove-dii-this> |
|---|---|
| Subject | Re: ctor: this.setLayout( |
| Message-ID | <nospam-376A9C.04130515112008@feeder.motzarella.org> (permalink) |
| Newsgroups | comp.lang.java.gui |
| References | <nospam-06C9C0.073807141 |
| Date | 2011-04-27 15:50 +0000 |
| Organization | TDS.net |
To: comp.lang.java.gui
In article <nospam-06C9C0.07380714112008@feeder.motzarella.org>,
"John B. Matthews" <nospam@nospam.invalid> wrote:
> In article
> <a037f2e0-dc88-4004-8204-11818ad7d8d7@r36g2000prf.googlegroups.com>,
> lbrtchx@gmail.com wrote:
>
> [...]
> > I think I still have a chicken-or-egg first kind of problem with my
> > code and I see as one of the differences between your example and my
> > toy code, that you are employing an actual JLabel as canvas. Is there
> > anything more graphically convenient that could be used as canvas?
>
> JLabel? We don't need no stinking JLabel! :-)
Sadly, I have stumbled into hubris. Again. One disadvantage of raw
drawing is how easy it is to get the geometry wrong. I made another try
below.
A more flexible approach is to implement the Icon interface in a
JComponent, e.g. JPanel or JLabel. This makes it somewhat easier to mix
components in a layout, as the x and y offsets are parameters to the
paintIcon() method. Here is an example:
<http://sites.google.com/site/drjohnbmatthews/composite>
I see at least one rendering implementation extends JPanel.
<http://www.exmpl.de/projects/mathml/math.html>
[Some knowledge of German required.]
<code>
class UrlPane extends JPanel {
private final Font font = new Font("Serif", Font.BOLD, 24);
private final String label = "\u2615 " + name;
public UrlPane() {
this.setBackground(Color.lightGray);
this.setPreferredSize(new Dimension(0, 250));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
int inset = 30;
int h = this.getHeight() - inset;
int w = h * 1618 / 1000;
int x = (this.getWidth() - w) / 2;
int y = inset / 2;
// __ circle
Ellipse2D ellipse = new Ellipse2D.Double(x, y, w, h);
g2D.draw(ellipse);
// __ square
g2D.drawRect(x, y, w, h);
// __ title
g.setFont(font);
int x2 = this.getWidth() / 2;
int y2 = this.getHeight() / 2;
int w2 = g.getFontMetrics().stringWidth(label) / 2;
int h2 = g.getFontMetrics().getDescent();
g.drawString(label, x2 - w2, y2 + h2);
}
}
</code>
--
John B. Matthews
trashgod at gmail dot com
http://home.roadrunner.com/~jbmatthews/
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24
Back to comp.lang.java.gui | Previous | Next | Find similar
Re: ctor: this.setLayout( "John B. Matthews" <john.b..matthews@THRWHITE.remove-dii-this> - 2011-04-27 15:50 +0000
csiph-web